※ 'LLM을 활용한 실전 AI 애플리케이션 개발' 책을 정리한 내용입니다.
GPU 메모리에 저장되는 데이터
- 모델 파라미터
- 그레이디언트(gradient)
- 옵티마이저 상태(optimizer state)
- 순전파 상태(forward activation)
립러닝 학습 과정을 요약하면, 먼저 순전파를 수행하고 그때 계산한 손실로부터 역전파를 수행하고 마지막으로 옵티마이저를 통해 모델을 업데이트한다.
※순전파 : Neural Network 모델의 입력층부터 출력층까지 순서대로 변수들을 계산하고 저장하는 것
※역전파 : 순전파의 과정을 역행하는 것
그레이디언트 누적 (gradient accumulation)
그레이디언트 누적 방법은 미니 배치를 통해 구해진 gradient를 n번의 step동안 Global gradients에 누적시킨 후, 한번에 업데이트하는 방법이다. 이렇게 되면 적은 GPU 메모리로도 더 큰 배치 크기와 같은 효과를 얻을 수 있지만, 추가적인 순전파 및 역전파 연산을 수행하기 때문에 학습 시간이 증가된다. (ex. 배치 크기 : 4 , 그레이디언트 누적 스텝 수 : 4 -> 배치 크기 16일 때와 같은 효과를 얻을 수 있다.)
딥러닝 모델에서 모델 업데이트를 위한 그레이디언트를 계산하기 위해 순전파와 역전파를 수행한다. 이때 역전파 계산을 위해서는 순전파의 결과를 저장하고 있어야하는데, 이는 GPU 메모리를 많이 차지한다. 이를 해결하기 위해 역전파를 진행하면서 메모리를 절약하기 위해 사용이 끝난 데이터는 삭제한다. 또는 역전파를 계산할 때 필요한 최소 데이터만 저장하고 나머지는 필요할 때 다시 계산하는 방법이 있다.(한 번의 역전파를 위해서 순전파를 반복적으로 계산을 해야하는 단점 존재) 이 두 방식은 많은 메모리 차지와 연산의 양이 늘어난다는 단점이 존재한다.
그레이디언트 체크포인팅(gradient checkpointing)
위의 두 문제를 절충하기 위한 방법으로, 중간중간에 값들을 저장해서 메모리 사용을 줄이고 필요한 경우 체크포인트부터 다시 계산해 순전파 계산량도 줄이는 방법이다.
'LLM' 카테고리의 다른 글
GPU 학습(4) (0) | 2024.08.21 |
---|---|
GPU 학습(3) (0) | 2024.08.20 |
GPU 학습(1) (0) | 2024.08.18 |
LLM 모델 만들기(3) (0) | 2024.08.17 |
LLM 모델 만들기(2) (0) | 2024.08.16 |