Spark를 이용한 빅데이터 분석 2-1
병렬 처리와 분산 처리
병렬 처리
- 여러개를 시키도록 나눠주는 것
- 주로 단일 머신 내의 여러 코어나 프로세서를 사용하여 작업을 동시에 수행하는 것
- Multiprocessing이나 joblib이 흔히 사용
- sklearn의 njobs가 이를 제어하는 기능
분산처리
- 네트워크를 통해 연결된 여러 대의 컴퓨터(노드)가 각각의 작업을 수행하는 것
- Spark를 포함해 Ray, Desk 등의 라이브러리 사용 가능
** CPU : 여러 개의 코어로 이루어져 있고, 파이썬은 기본적으로 1개 사용
CPU vs GPU
CPU
- 기본적으로 스파크가 사용
GPU
- GPU 기반의 병렬처리도 발달
- LLM의 발달로 GPU에 대한 수요가 크게 증가
- 프레임워크가 다름
- Spark도 GPU 지원
병렬 처리 vs Vectorize
- 전처리 단계에서 삶의 질을 크게 향상할 수 있는 방법
- 한 기기의 메모리 안에서 처리가 가능한 규모라면, 굳이 Spark를 사용하는 것보다는 연산을 최적화하는 것이 일반적으로 더 나음
- Numpy(Pandas 포함)는 벡터화 연산을 통해 단순 반복작업을 굉장히 빠르게 처리 가능
- 최소 수십, 최대 수백배 이상 속도의 차이 날 수 있음
- 특히 for문의 순회를 최적화하는데 많이 사용
- 스파크에서도 개별 머신은 벡터화를 수행하여 속도 최적화 가능
병렬 처리의 기술
Pickling과 Job broker
- 스파크를 포함해 분산/병렬처리 도구들은 내부에서 데이터를 Picklie로 변환하여 송수신
- 어떤 프로세서에 어떤 데이터를 보내고, 어떤 작업을 시킬 것이며, 어떻게 취합할 것인지에 대한 매니저가 필요하며 이를 Job broker라고 칭함
- 스파크에서는 클러스터 매니저(Cluster Manager)가 Yarn, Mesos, Kube 등 이용
- 병렬 처리에서는 명시적으로 드러나는 매니저는 없지만, 내부적으로는 해당 기능이 필요
- Airflow의 경우 Celery나 Rabbit MQ 등 사용 가능
스레드와 프로세스
- 프로세스: 독립된 메모리 공간
- 스레드: 같은 메모리 공간을 공유
- 파이썬은 글로벌 인터프리터 락(GIL, Global Interpreter Lock) 때문에 한 번에 하나의 스레드만 파이썬 바이트코드 실행 가능
- 파이썬은 멀티프로세싱 일반적
Jolib과 머신러닝
- 파이썬에서 병렬처리 위해 다양한 패키지 제공
- 가장 손쉽고 안정적으로 쓸 수 있는 패키지는 Joblib
- Sklearn이 내부에서 joblib 사용
- 단점
- k개의 멀티프로세싱 할 때 k개 완료 되어야 다음 순회로 넘어감
- 20개의 작업을 4개의 프로세서로 멀티프로세싱을 한다면 1,2,3,4번이 모두 완료되어야 5,6,7,8번 작업으로 넘어간다는 것
- 이로 인한 약간의 비효율 발생 가능
- 그 외 대안으로는 multiprocessing 패키지도 많이 사용
- k개의 멀티프로세싱 할 때 k개 완료 되어야 다음 순회로 넘어감
'내일배움캠프' 카테고리의 다른 글
| [내일배움캠프] TIL 46일차 26.04.08(수) (1) | 2026.04.08 |
|---|---|
| [내일배움캠프] TIL 45일차 26.04.06(월) (1) | 2026.04.06 |
| [내일배움캠프] TIL 43일차 26.04.02(목) (0) | 2026.04.02 |
| [내일배움캠프] TIL 42일차 26.04.01(수) (0) | 2026.04.01 |
| [내일배움캠프] TIL 41일차 26.03.17(화) (0) | 2026.03.17 |