
week4: Gradient Accumulation & Checkpointing
Gradient Accumulation은 큰 배치 크기를 사용하고 싶지만, GPU 메모리가 부족할 때 사용하는 기법이다.
batch_size=128 을 사용하고 싶지만 메모리 부족 → batch_size=16 으로 8번 학습하여 동일한 효과를 얻음!✅ 큰 배치 크기로 학습하고 싶은데, GPU 메모리가 부족한 경우
✅ 메모리 문제로 배치 크기를 줄여야 하지만, 모델 성능 저하를 방지하고 싶은 경우
❌ GPU가 충분해서 원래 배치 크기를 사용할 수 있는 경우 → 불필요
Trainer에서 쉽게 설정 가능!
training_args = TrainingArguments(
per_device_train_batch_size=16, # 한 번에 올릴 수 있는 작은 배치 크기
gradient_accumulation_steps=8, # 16 x 8 = 128 (큰 배치 크기 효과)
**default_args
)
💡 gradient_accumulation_steps=N 을 설정하면 N번 그래디언트를 누적한 후 한 번만 가중치 업데이트!
Gradient Checkpointing은 GPU 메모리가 부족할 때, 메모리 사용을 줄이기 위한 기법이다.
✅ 대형 모델(GPT, BERT 등)을 학습하는데 GPU 메모리가 부족한 경우
✅ Gradient Accumulation을 해도 메모리가 부족한 경우
❌ 작은 모델(CNN, LSTM 등)에서는 불필요
❌ GPU 메모리가 충분한 경우 → 사용하지 않는 것이 더 빠름!
✅ 장점
🚨 단점
Trainer에서 쉽게 설정 가능!
training_args = TrainingArguments(
per_device_train_batch_size=1,
gradient_accumulation_steps=4,
gradient_checkpointing=True, # ✅ Gradient Checkpointing 활성화
**default_args
)
💡 gradient_checkpointing=True 로 설정하면 자동으로 일부 활성화 값만 저장하여 메모리를 절약!
| 상황 | Gradient Accumulation 필요? | Gradient Checkpointing 필요? |
|---|---|---|
| GPU 메모리가 충분 & 작은 모델 (CNN, LSTM 등) | ❌ 필요 없음 | ❌ 필요 없음 |
| 큰 배치 크기로 학습하고 싶지만, GPU 메모리가 부족한 경우 | ✅ 사용해야 함 | ❌ 필요 없음 |
| 대형 모델(GPT, BERT 등) 학습 시 메모리 부족 | ✅ 사용하면 좋음 | ✅ 필수! |
| Gradient Accumulation을 해도 GPU 메모리가 부족한 경우 | ✅ 사용해야 함 | ✅ 필수! |
💡 Gradient Accumulation → 배치 크기를 키우기 위한 방법
💡 Gradient Checkpointing → 메모리 부족을 해결하는 방법