Gradient Accumulation
Gradient accumulation은 큰 batch를 한 번에 처리하지 않고, 작은 micro-batch 여러 개로 나눠 gradient를 누적하는 방식이다.
micro-batch 1
g1
g1
micro-batch 2
g2
g2
micro-batch 3
g3
g3
micro-batch 4
g4
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를 언제 수행하는가?
- 이 방법이 주로 줄이는 것은 어떤 메모리인가?