"GPU 메모리가 부족해서 batch size를 늘릴 수 없다면?"
Gradient Accumulation(그래디언트 누적)은 작은 배치를 여러 번 돌려서 큰 배치 학습 효과를 내는 방법입니다.

Gradient Accumulation이란?
Gradient Accumulation은 작은 미니배치로 여러 번 forward/backward를 하고,
그라디언트를 누적(accumulate)한 뒤 한 번만 optimizer step을 수행하는 기법입니다.
즉, "가상의 대형 batch size"를 만드는 방식입니다.
왜 필요한가?
- 대규모 모델 학습 시 batch size를 크게 해야:
- Gradient 안정화
- Convergence 속도 향상
- 일반화 성능 개선
- 하지만 GPU 메모리가 부족하면 큰 batch size 불가 → 작은 batch로 여러 step 누적
동작 원리
for step in range(total_steps):
loss = model(input) / accumulation_steps
loss.backward() # gradient 누적
if (step+1) % accumulation_steps == 0:
optimizer.step() # 실제 weight update
optimizer.zero_grad()
- accumulation_steps: 몇 번의 미니배치를 누적할지
- 각 step에서 loss를 나누어 scale (gradient 크기 균일)
PyTorch 예시 코드
accumulation_steps = 4 # 가상의 batch size = mini_batch * 4
optimizer.zero_grad()
for step, (x, y) in enumerate(dataloader):
outputs = model(x)
loss = loss_fn(outputs, y)
loss = loss / accumulation_steps # loss 스케일 조정
loss.backward()
if (step + 1) % accumulation_steps == 0:
optimizer.step()
optimizer.zero_grad()
장점
1. 큰 batch 효과 → generalization & stability 개선
2. VRAM 절약 → 작은 batch로 학습 가능
3. OOM 방지 → GPU 메모리 초과 없이 대형 모델 학습 가능
단점 & 주의점
1. Effective batch size가 커지면 learning rate 조정 필요 (Linear Scaling Rule)
2. Gradient clipping, AMP 등과 함께 쓰면 순서 주의 필요
3. 너무 많이 누적하면 업데이트 빈도 줄어 → 학습 속도 체감 저하
실제 효과 (예시)
| GPU | 원래 batch | Accumulation | 가상 | batch성능 |
| RTX 3090 24GB | 16 | ×4 | 64 | 동일 (OOM 없이 학습) |
| A100 40GB | 128 | ×2 | 256 | 수렴 더 안정적 |
실무 적용 팁
- batch size 늘리면 learning rate도 비례해서 키우기 (Linear Scaling Rule)
- AMP와 함께 쓰면 메모리 효율 극대화 가능
- Gradient accumulation steps 너무 크면 optimizer step이 적어져서 convergence 느려짐 → 2~8 정도 권장
결론
Gradient Accumulation은 작은 GPU 메모리로 대형 batch 효과를 내는 핵심 기술입니다.
특히 AMP, ZeRO, FSDP와 같이 쓰면 수십억 파라미터 모델도 단일 GPU에서 학습 가능합니다.
다음 편은 아래에 있습니다!
https://machineindeep.tistory.com/74
대규모 모델 학습·추론 최적화 시리즈 3편: Gradient Checkpointing
"VRAM이 부족해서 모델을 학습할 수 없다면?"Gradient Checkpointing은 중간 activation을 저장하지 않고 필요할 때 재계산하여메모리를 절약하는 강력한 방법입니다.Gradient Checkpointing이란?일반적으로 모델
machineindeep.tistory.com
'ML | DL > 딥러닝 방법론|실습' 카테고리의 다른 글
| 대규모 모델 학습·추론 최적화 시리즈 4편: FSDP · ZeRO · DeepSpeed (0) | 2025.09.15 |
|---|---|
| 대규모 모델 학습·추론 최적화 시리즈 3편: Gradient Checkpointing (1) | 2025.09.14 |
| 대규모 모델 학습·추론 최적화 시리즈 1편: Mixed Precision Training (AMP) (1) | 2025.09.14 |
| 모델 압축·배포 최적화 시리즈 5편: ONNX / TensorRT / TFLite 변환 (0) | 2025.09.14 |
| 모델 압축·배포 최적화 시리즈 4편: Weight Clustering / Sharing (0) | 2025.09.14 |