모델 한 대 장비에 다 안 들어가거나, 데이터가 너무 많아 한 GPU로는 며칠이 걸린다면 여러 장비·GPU에 학습을 쪼개야 한다. 이것이 분산 학습이다. 핵심은 "무엇을 쪼개느냐" — 데이터를 쪼개느냐, 모델을 쪼개느냐 — 두 갈래다.
MLA-C01 시험에서 분산 학습은 "모델이 GPU 메모리에 안 들어간다", "학습이 너무 느리다", "수십억 파라미터 모델을 학습한다" 같은 증상으로 등장한다. 오늘은 데이터 병렬, 모델 병렬, 그리고 SageMaker가 제공하는 분산 학습 라이브러리를 본다.
분산 학습의 두 패러다임을 먼저 명확히 구분한다.
| 구분 | 데이터 병렬 (Data Parallel) | 모델 병렬 (Model Parallel) |
|---|---|---|
| 쪼개는 대상 | 데이터(배치)를 GPU마다 분배 | 모델 자체를 여러 GPU에 분할 |
| 각 GPU가 가진 것 | 모델 전체 복제본 | 모델의 일부 레이어/파라미터 |
| 해결하는 문제 | 학습 속도(처리량) | 모델이 한 GPU 메모리에 안 들어감 |
| 동기화 | 그래디언트를 all-reduce로 평균 | 활성값·그래디언트를 단계 간 전달 |
| 대표 상황 | 데이터 많고 모델은 GPU에 들어감 | 초대형 모델(수십억 파라미터) |
핵심 직관: 데이터 병렬은 "모델은 들어가는데 느릴 때", 모델 병렬은 "모델 자체가 안 들어갈 때" 쓴다