ML | DL/딥러닝 방법론|실습

대규모 모델 학습·추론 최적화 시리즈 2편: Gradient Accumulation

Leeys 2025. 9. 14. 23:00
반응형

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


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

 

반응형