대규모 훈련 — 거대한 모델을 효율적으로 → 분산 훈련(Distributed Training)
모델 병렬화와 혼합 정밀도
파이프라인 병렬성과 torch.cuda.amp를 사용한 혼합 정밀도 훈련을 구현합니다.
1 / 17
모델이 1 GPU에 안 들어갈 때 — 175B × 4바이트 = 700GB
왜 모델이 1 GPU에 안 들어갈 때 — 175B × 4바이트 = 700GB이 필요한가? 실무에서 이 개념 없이는 문제를 해결할 수 없습니다. 핵심 동기와 배경을 먼저 이해합시다.
핵심 문제: 거대 모델의 메모리 요구량이 단일 GPU를 초과합니다.
파라미터 메모리 계산:
- GPT-3 175B: 175 × 10⁹ × 4 bytes(FP32) = 700 GB
- FP16으로 줄여도: 175 × 10⁹ × 2 bytes = 350 GB
- A100 GPU 최대 메모리: 80 GB — 1장으로는 절대 불가능
학습 시 추가 메모리:
- 옵티마이저 상태(Adam): 파라미터의 2배 (m, v) → FP32로 1400 GB 추가
- 그래디언트: 파라미터와 같은 크기 → 700 GB
- 활성값(Activation): 배치 크기에 비례 → 수백 GB
총 필요 메모리 (FP32 학습):
A100 80GB 기준 최소 35장 이상 필요!
해결 방향 2가지:
1. 모델 병렬화 — 모델 자체를 여러 GPU에 분할
2. Mixed Precision — FP16/BF16으로 메모리 절반 + 속도 2배
왜 중요한가? FP16은 메모리를 절반으로 줄이지만 표현 가능한 최소값이 약 6×10⁻⁸로, 작은 그래디언트가 0으로 반올림되어 사라집니다(underflow). 학습 초기에는 괜찮아도 후반부의 미세 조정 단계에서 그래디언트 소실이 치명적입니다. Loss Scaling은 손실값을 크게 곱해서 그래디언트를 FP16 표현 범위 안으로 밀어넣고, 업데이트 전에 다시 나눕니다. 이 트릭이 혼합 정밀도 학습을 실용적으로 만든 핵심입니다.
Megatron-LM은 Shoeybi 등이 제안한 텐서 병렬화 프레임워크로, GPT 스케일 모델 학습을 가능하게 했다 (Shoeybi et al., 2019).
0:00
2:25
🎓 강의 스크립트
GPT-3의 파라미터가 1750억 개예요. 이걸 숫자로 바꿔볼게요.
에프피삼십이에서 파라미터 하나가 4바이트예요. 175B 곱하기 4는 700기가바이트예요.
그림 왼쪽 첫 번째 박스를 보세요. 파라미터만 700기가바이트라고 적혀 있어요.
그런데 학습할 때는 파라미터만 있으면 안 돼요. 그래디언트도 같은 크기가 필요해요.
두 번째 빨간 박스를 보면 그래디언트가 플러스 700기가바이트예요. 벌써 1.4테라바이트죠.
세 번째 주황 박스가 옵티마이저 상태예요. 아담은 모멘텀과 분산 두 개를 저장해요.
모멘텀이 700기가 분산이 700기가예요. 옵티마이저만 1.4테라바이트예요. 파라미터의 두 배죠.
네 번째 보라색 박스가 활성화예요. 배치 사이즈와 시퀀스 길이에 비례해서 수백 기가가 필요해요.
다 합치면 약 3.1테라바이트예요. 가운데 빨간 합산 바를 보세요.
아래쪽 GPU 비교를 보세요. 에이원백은 80기가바이트예요. 에이치이백도 141기가바이트밖에 안 돼요.
3100기가를 80기가로 나누면 에이원백이 39장이나 필요해요. 한 장에 2만 달러예요.
비이백이 192기가바이트로 가장 크지만 그래도 16장은 필요해요.
GPU 메모리 증가보다 모델 크기 증가가 훨씬 빨라요. 격차가 계속 벌어지고 있어요.
그래서 분산 학습은 선택이 아니라 필수예요. 오른쪽 하단에 초록색으로 적혀 있죠.
파이프라인 병렬화 텐서 병렬화 데이터 병렬화 그리고 혼합 정밀도가 이 문제를 해결해요.
이번 레슨에서 이 네 가지 기법을 하나씩 파헤쳐볼 거예요.
먼저 파이프라인 병렬화부터 시작해봅시다. 레이어를 GPU에 나누는 가장 직관적인 방법이에요.
왜 옵티마이저가 파라미터의 두 배 메모리를 차지하는지 기억하세요. 이게 제로 최적화의 핵심이에요.