Gradient Accumulation & Checkpointing

panwoo·2025년 2월 12일
post-thumbnail

week4: Gradient Accumulation & Checkpointing

1️⃣ Gradient Accumulation

✔ 개념

Gradient Accumulation은 큰 배치 크기를 사용하고 싶지만, GPU 메모리가 부족할 때 사용하는 기법이다.

  • 원래 batch_size=128 을 사용하고 싶지만 메모리 부족 → batch_size=16 으로 8번 학습하여 동일한 효과를 얻음!
  • 즉, 작은 배치 크기로 여러 번 그래디언트를 계산한 후, 한꺼번에 가중치를 업데이트하는 방법
  • 16 F 16 F 16 F 16 F 16 F 16 F 16 F 16 F B O 이런 식으로 진행(F: forward pass, B: backward pass, O: optimize)

✔ 언제 사용해야 할까?

✅ 큰 배치 크기로 학습하고 싶은데, 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번 그래디언트를 누적한 후 한 번만 가중치 업데이트!


2️⃣ Gradient Checkpointing

✔ 개념

Gradient Checkpointing은 GPU 메모리가 부족할 때, 메모리 사용을 줄이기 위한 기법이다.

  • 보통 모델이 학습할 때, 순전파(Forward Pass)에서 모든 활성화 값(Activations)을 저장해야 한다.
  • 하지만 모델이 너무 크면, 이 활성화 값이 GPU 메모리를 많이 차지하는 문제가 발생!
  • Gradient Checkpointing은 일부 활성화 값만 저장하고, 나머지는 필요할 때 다시 계산하는 방식으로 메모리를 절약함.

Fitting larger networks into memory

  • 미리 저장하지 말고, 필요할 때 → 핵심 키워드

✔ 언제 사용해야 할까?

✅ 대형 모델(GPT, BERT 등)을 학습하는데 GPU 메모리가 부족한 경우

✅ Gradient Accumulation을 해도 메모리가 부족한 경우

❌ 작은 모델(CNN, LSTM 등)에서는 불필요

❌ GPU 메모리가 충분한 경우 → 사용하지 않는 것이 더 빠름!


✔ 장점 & 단점

장점

  • GPU 메모리 사용량 감소 → 더 큰 모델을 학습할 수 있음!
  • 더 큰 배치 크기 사용 가능

🚨 단점

  • 학습 속도가 약 20% 느려질 수 있음 (필요할 때 다시 계산해야 하므로 연산량 증가)
  • 엄청 큰 모델이 아니면 효과가 미비함 → 실제로 해보니, 진짜 많이 커야함

✔ 코드 적용 방법

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 → 메모리 부족을 해결하는 방법

0개의 댓글