Gradient Accumulation

trainingmemorybatching

Gradient accumulation은 큰 batch를 한 번에 처리하지 않고, 작은 micro-batch 여러 개로 나눠 gradient를 누적하는 방식이다.

micro-batch 1
g1
micro-batch 2
g2
micro-batch 3
g3
micro-batch 4
g4
g = g1 + g2 + g3 + g4
optimizer update 1회

예를 들어 batch size 64를 한 번에 올릴 메모리가 부족하다고 하자. 대신 micro-batch 16을 네 번 처리할 수 있다.

micro-batch 16 x 4회 = effective batch 64

각 micro-batch마다 forward와 backward를 수행하고 gradient를 더한다. 네 번의 gradient가 모이면 optimizer update를 한 번 수행한다.

무엇이 줄어드나

gradient accumulation은 한 번에 올리는 micro-batch를 줄이므로 peak activation memory를 줄이는 데 도움이 된다.

하지만 다음 메모리를 직접 줄이는 기술은 아니다.

  • parameters
  • gradients
  • optimizer states

즉 “큰 batch 효과”를 작은 메모리로 흉내내는 방법이지, 모델 weight나 optimizer state 자체를 줄이는 방법은 아니다.

확인

  • micro-batch와 effective batch의 차이는 무엇인가?
  • gradient accumulation에서는 optimizer update를 언제 수행하는가?
  • 이 방법이 주로 줄이는 것은 어떤 메모리인가?