HuggingFace GPU 단일 카드 최적화 — 그래디언트 누적

HuggingFace GPU 단일 카드 최적화 — 그래디언트 누적

HuggingFace Transformers의 성능 최적화 문서는 단일 GPU로도 큰 모델을 훈련하는 여러 기법을 소개해요. 그중 gradient accumulation(그래디언트 누적)은 '효과적인 배치 크기'를 키우는 핵심 방법이에요.

왜 쓸까

  • GPU 메모리 한계로 batch_size를 크게 못 잡는 경우가 많아요.
  • 메모리는 미니배치로 계산하되, 그래디언트만 모아 여러 스텝 후 옵티마이저를 1회 갱신하면 큰 배치와 유사한 효과가 나요.

동작 방식

for step in range(num_steps):
    loss = model(batch)          # 미니배치 순전파
    loss.backward()              # 그래디언트 누적 (zero_grad 안 함)
    if (step + 1) % accum == 0:  # accum 번 만큼 모이면
        optimizer.step()         # 옵티마이저 1회 갱신
        optimizer.zero_grad()    # 그래디언트 초기화

사용 팁

  • accumulation_steps 만큼 반복 후에만 옵티마이저와 zero_grad를 호출해요.
  • 배치 정규화 계열은 누적 그래디언트와 통계가 달라질 수 있어 주의해요.

더 알아보기