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를 호출해요.- 배치 정규화 계열은 누적 그래디언트와 통계가 달라질 수 있어 주의해요.