주제: DT-1 Data Parallel (Distributed Data Parallel, DDP)

분류: foundations

타입: concept

난이도: 중급

선수지식: 있음 — 역전파, gradient descent, batch 학습

문제 설정

대규모 딥러닝 모델을 학습할 때 하나의 GPU만으로는 계산 시간이 너무 오래 걸립니다. 그래서 여러 GPU를 동시에 사용하는 분산 학습(distributed training)이 필요합니다.

가장 널리 사용되는 방법이 Data Parallel이며, PyTorch에서는 Distributed Data Parallel (DDP)로 구현됩니다.

핵심 아이디어:

직관 비유

1. Data Parallel 구조

예:

GPU0 -> batch0
GPU1 -> batch1
GPU2 -> batch2
GPU3 -> batch3

각 GPU는 동일한 모델을 가지고 있습니다.

model0=model1=model2=model3

기호 의미

왜 필요한가

여러 GPU를 활용하여 학습 속도를 높입니다.

주의점

모든 GPU 모델 파라미터는 동일하게 유지되어야 합니다.

2. Forward Pass

각 GPU는 자신의 mini-batch로 forward 계산을 수행합니다.

GPU0 : L0 = loss(model(x0))
GPU1 : L1 = loss(model(x1))
GPU2 : L2 = loss(model(x2))

왜 가능한가

모든 모델 replica가 동일하기 때문입니다.

주의점

forward는 GPU 간 통신 없이 독립적으로 실행됩니다.

3. Backward Pass

각 GPU는 gradient를 계산합니다.

gi=Li

하지만 각 GPU의 gradient는 서로 다릅니다.

그래서 gradient를 평균내야 합니다.

4. Gradient All-Reduce

DDP의 핵심 연산은 All-Reduce입니다.

g=(1/N)Σgi

기호 의미

직관 설명

모든 GPU의 gradient를 합쳐 평균을 만든 뒤 다시 모든 GPU에 전달합니다.

GPU0 -> g0
GPU1 -> g1
GPU2 -> g2
GPU3 -> g3
AllReduce: g = (g0 + g1 + g2 + g3) / 4

결과:

GPU0 = g
GPU1 = g
GPU2 = g
GPU3 = g

왜 필요한가

모든 모델 replica가 동일한 gradient로 업데이트되도록 하기 위함입니다.

주의점

All-Reduce는 GPU 간 통신 비용이 발생합니다.

5. 파라미터 업데이트

동기화된 gradient로 업데이트합니다.

w <- w - eta * g

모든 GPU가 동일한 업데이트를 수행합니다.

결과

모든 GPU 모델은 계속 동일한 상태를 유지합니다.

6. DDP 학습 흐름

1. 모델 복제 (replica 생성)
2. 각 GPU가 mini-batch 처리
3. forward 계산
4. backward 계산
5. gradient all-reduce
6. 파라미터 업데이트

7. 수식 요약

전체 batch gradient:

g=(1/N)ΣLi

파라미터 업데이트:

w <- w - eta * g

왜 중요한가

DDP는 single-GPU 학습과 동일한 결과를 유지하면서 학습 속도를 높입니다.

코드-수식 연결

개념 PyTorch 코드 설명
DDP 모델 torch.nn.parallel.DistributedDataParallel 모델 병렬 래핑
gradient 계산 loss.backward() 각 GPU gradient
all-reduce torch.distributed.all_reduce() gradient 동기화

자주 하는 오해 5개

체크리스트 (스스로 설명 가능해야 하는 질문)