본문으로 건너뛰기
김신건의 로그

분산 학습

· 수정 · 📖 약 3분 · 982자/단어 #ai #training #parallelism #scaling
Distributed Training, distributed training, 분산 훈련, model parallelism, tensor parallelism, pipeline parallelism, data parallelism

정의

분산 학습 (Distributed Training) 은 한 GPU 또는 TPU 에 들어가지 않는 큰 모델을 여러 가속기에 나눠서 학습시키는 기법.

현대 LLM (Llama 405B, GPT-4, Gemini Ultra 등) 은 수천 ~ 수만 개의 GPU 로 동시에 학습된다. 한 GPU 가 메모리, 컴퓨트, 통신 등 어느 한 자원이 부족할 때 다양한 방식으로 분할한다.

핵심 4가지 병렬화 전략

대규모 모델 학습은 보통 4가지 (이상의) parallelism 을 조합해서 사용한다.

1. Data Parallelism (DP), 가장 단순

GPU 0: 전체 모델 + 데이터 batch 의 1/N
GPU 1: 전체 모델 + 데이터 batch 의 1/N
...
GPU N: 전체 모델 + 데이터 batch 의 1/N

→ 각자 forward + backward
→ all-reduce 로 gradient 동기화
→ 같은 step 후 모델이 동일해짐
  • 장점: 구현 가장 단순 (PyTorch DDP 한 줄)
  • 단점: 각 GPU 에 전체 모델이 들어가야 함 (메모리 부족 시 사용 불가)
  • 통신: 매 step backward 후 all-reduce (전체 모델 gradient 동기화)

2. Tensor Parallelism (TP), 한 layer 를 쪼개기

큰 행렬 곱셈을 가로/세로로 분할.

Original: Y = X @ W  (W: [hidden, ff] = [4096, 16384])

Tensor Parallel (4-way):
  GPU 0: W_0 = W[:, 0:4096]
  GPU 1: W_1 = W[:, 4096:8192]
  GPU 2: W_2 = W[:, 8192:12288]
  GPU 3: W_3 = W[:, 12288:16384]

  각 GPU: Y_i = X @ W_i
  결합: Y = concat([Y_0, Y_1, Y_2, Y_3])  # all-gather
  • 장점: 큰 layer 도 분할 가능
  • 단점: forward 마다 통신 (all-reduce/all-gather) 필요, 노드 내 NVLink 같은 빠른 연결 필수
  • 대표: Megatron-LM 의 TP 구현

3. Pipeline Parallelism (PP), layer 를 분할

모델의 layer 를 GPU 들에 수직 분배.

GPU 0: Layer 1-10
GPU 1: Layer 11-20
GPU 2: Layer 21-30
GPU 3: Layer 31-40

→ 입력 → GPU 0 → GPU 1 → GPU 2 → GPU 3 → 출력

순차적이라 idle 시간 발생. micro-batching 으로 pipeline 채움 (GPipe, PipeDream).

시간 →
GPU 0: [B1] [B2] [B3] [B4] [bw4][bw3][bw2][bw1]
GPU 1:      [B1] [B2] [B3] [B4] [bw4][bw3][bw2][bw1]
GPU 2:           [B1] [B2] [B3] [B4] [bw4][bw3][bw2][bw1]
GPU 3:                [B1] [B2] [B3] [B4] [bw4][bw3][bw2][bw1]
  • 장점: 통신 비용 작음 (인접 GPU 만), 매우 깊은 모델에 효과적
  • 단점: bubble (idle 시간) 발생, 정확한 schedule 필요

4. ZeRO / FSDP, 메모리 sharding

Microsoft DeepSpeed 의 ZeRO (arXiv:1910.02054), PyTorch FSDP 가 대표.

데이터 병렬의 메모리 비효율을 해결. 각 GPU 가 모델 일부만 저장.

Stageshard 대상메모리 절약
ZeRO-1Optimizer state4x
ZeRO-2+ Gradient8x
ZeRO-3 (FSDP)+ ParameterN x (GPU 수에 비례)

ZeRO-3 / FSDP 동작:

  • 평소: parameter 도 shard 되어 있음

  • forward 시: 필요한 layer 의 parameter 를 all-gather 로 모음

  • backward 시: gradient 계산 후 reduce-scatter 로 다시 분산

  • 장점: Data Parallelism + 메모리 효율

  • 단점: gather/scatter 통신 비용 추가

5. Context Parallelism (CP), 시퀀스 차원 분할

긴 컨텍스트 (32K, 100K+ token) 학습 시 시퀀스 자체를 GPU 에 분할.

GPU 0: token 0~8K
GPU 1: token 8K~16K
GPU 2: token 16K~24K
GPU 3: token 24K~32K

→ attention 시 ring exchange 로 통신

Google Gemini 1.5 Pro (1M context), Llama 3 (128K context) 학습에 사용.

6. Expert Parallelism (EP), MoE 모델

Mixture of Experts (MoE) 모델에서 각 expert 를 다른 GPU 에 배치. 라우팅으로 활성 expert 만 통신.

  • Mixtral 8x7B
  • DeepSeek V3 (671B parameter, 활성 37B)

조합: 3D / 4D / 5D Parallelism

대규모 학습은 보통 여러 차원을 조합:

Total GPUs = TP × PP × DP × CP × EP

예: Llama 3.1 405B 학습 (16,000 H100):
  TP: 8 (노드 내, NVLink)
  PP: 16 (노드 간, InfiniBand)
  DP: 125 (전체 batch 분산)
  Total: 8 × 16 × 125 = 16,000

각 차원의 통신 패턴:

  • TP: forward 마다 all-reduce/all-gather → 고대역폭 필수 (NVLink)
  • PP: layer 경계에서 1회 → 저대역폭 OK (InfiniBand)
  • DP: backward 후 all-reduce → 중간 대역폭
  • CP: ring exchange → 노드 내 추천
  • EP: 라우팅 통신 → all-to-all

동기화 패턴 (Collective Communication)

분산 학습의 핵심은 collective operation 들.

all-reduce:  [a,b,c,d] → 각 노드에 sum=a+b+c+d
all-gather:  [a,b,c,d] → 각 노드에 [a,b,c,d]
reduce-scatter: [a,b,c,d] → 각 노드에 일부 sum
broadcast:   [a,...,...,...] → [a,a,a,a]
all-to-all:  matrix transpose 같은 전체 재분배

이 연산들이 분산 학습의 통신 비용. 효율적인 구현이 NVIDIA NCCL, AMD RCCL, Google CC 라이브러리.

프레임워크

프레임워크주력비고
PyTorch DDPDP가장 단순, 한 줄로 사용
PyTorch FSDPDP + ZeRO-3메모리 효율 DP
Megatron-LM (NVIDIA)TP + PP + CP + DP + EPLLM 학습 표준
DeepSpeed (Microsoft)ZeRO 1/2/3 + PPMoE 지원
Colossal-AI모든 전략 통합학습 + 추론 통합
JAX/Flax + pmap/pjitSPMD 스타일 분할Google TPU 표준

어디서 사용?

모델학습에 쓴 전략
Llama 2/3 (70B+)DP + TP + PP + FSDP
Mixtral 8x7B (MoE)DP + EP + TP
GPT-4 (추정)DP + TP + PP + EP
Gemini 1.5 Pro (1M context)DP + TP + CP
DeepSeek V3 (671B MoE)DP + EP + TP

CS 에 미친 영향

분산 학습은 단순한 엔지니어링 기법을 넘어 ML 연구 전체를 바꿨다.

  • 모델 크기 폭증: 1B → 7B → 70B → 405B → 1T (3년에 1000배)
  • 데이터센터 설계 변화: NVLink, InfiniBand, 광 통신이 핵심 인프라
  • 새로운 연구 분야: scaling law, parallelism 자동 탐색 (Alpa, GSPMD)
  • 분산 시스템 지식 필수: ML 엔지니어가 통신, 동기화, 장애 복구를 알아야

관련 위키

  • SPMD - 분산 학습의 프로그래밍 모델
  • 양자화 - 학습된 모델 압축
이 글의 용어 (4개)
모델 양자화ml
정의 양자화 (Quantization) 는 신경망 모델의 가중치/활성화를 높은 정밀도 (FP32, FP16) 에서 낮은 정밀도 (INT8, INT4 등) 로 변환하여 메모리와 연…
GPU: 그래픽/ML 병렬 프로세서ml
정의 GPU (Graphics Processing Unit) 는 원래 그래픽 렌더링용이었지만, massively parallel 아키텍처가 딥러닝과 HPC 에도 이상적. NVID…
SPMDml
정의 SPMD (Single Program, Multiple Data)는 병렬 컴퓨팅의 대표 모델 중 하나. 모든 프로세스(또는 thread)가 같은 프로그램을 실행하되, 각자 …
TPU (Tensor Processing Unit): Google 의 ML ASICml
정의 TPU (Tensor Processing Unit) 는 Google 이 딥러닝 워크로드용으로 만든 ASIC (application-specific IC). 2015 년 v1…

이 개념을 다룬 위키 페이지 (2)

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기