메모리 아끼면서 Cross Entropy Loss 계산하기
요약
LLM 학습 시 긴 컨텍스트와 큰 어휘 사전으로 인해 발생하는 Cross Entropy Loss의 메모리 문제를 분석합니다. FLCE 방식을 통해 거대한 Logits 텐서가 메모리를 점유하지 않도록 효율적으로 계산하는 방법을 제안합니다.
핵심 포인트
- 긴 컨텍스트 학습 시 Logits 텐서가 모델 가중치보다 큰 메모리를 점유할 수 있음
- 단순한 Chunk 분할 방식은 Autograd의 그래프 유지 문제로 Peak Memory를 낮추지 못함
- FLCE는 Forward pass 내에서 Gradient를 즉시 계산하여 메모리 효율을 극대화함
- 메모리 사용량과 연산 지연 시간(Latency) 사이의 트레이드오프 분석 제공
긴 context, 큰 vocab의 LLM 학습에서 LM head + cross entropy가 왜 가장 큰 메모리 소비처 중 하나가 되는지 짚어본 글. 128K context에서는 logits 텐서 하나가 40GB에 육박해서, 모델 weight보다도 커진다.
16B 모델을 128K context로 학습하다 실제로 겪은 OOM에서 출발해, cross entropy의 forward/backward를 처음부터 유도하고, sequence 축을 단순히 chunk로 쪼개는 방식이 왜 peak memory를 못 낮추는지(autograd가 chunk별 graph를 backward까지 붙잡고 있음) 보인 뒤, FLCE가 각 chunk의 gradient를 forward pass 안에서 바로 계산해 큰 텐서가 graph에 남지 않게 하는 방법을 설명한다. 마지막엔 memory/latency tradeoff 분석과 실제 kernel 구현 walkthrough까지 다룬다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기