딥러닝에서 GPU 메모리는 무엇을 저장할까? 학습 vs 추론 VRAM 완전 정복

Bean·2025년 6월 25일
0

인공지능

목록 보기
64/123

학습 vs 추론 시 VRAM 사용의 모든 것

딥러닝을 하다 보면 "왜 VRAM이 이렇게 부족하지?"라는 경험, 한 번쯤 있으셨을 거예요.
사실 VRAM에는 단순히 모델만 올라가는 게 아니라, 학습과 추론에 필요한 여러 가지 데이터들이 함께 저장됩니다.

이 글에서는 딥러닝에서 VRAM이 어떤 데이터들을 저장하는지, 그리고 학습과 추론 상황에 따라 어떤 메모리가 필요한지를 체계적으로 정리해드립니다.


1. 딥러닝에서 VRAM에 올라가는 주요 데이터들

항목설명
① 모델 파라미터 (weights, biases)학습 대상이 되는 고정된 값들입니다. 일반적으로 float32 또는 float16 포맷으로 저장됩니다.
② 중간 활성화값 (Activations)각 레이어의 출력값으로, 역전파(gradient 계산)를 위해 저장됩니다.
③ 그래디언트 (Gradients)손실 함수 기준으로 계산된 파라미터의 미분값입니다. 학습 중에만 사용됩니다.
④ 옵티마이저 상태 (Optimizer States)옵티마이저가 학습 진행을 위해 유지하는 추가 정보입니다. (예: Adam의 momentums 등)
⑤ 임시 연산 버퍼연산 중 발생하는 임시 메모리입니다. 연산 복잡도나 구조에 따라 가변적입니다.
⑥ 입력 데이터 (Input Batch)실제 학습/추론에 사용되는 입력값. GPU로 옮겨서 처리할 경우 VRAM 사용 대상입니다.

2. 학습 vs 추론: 어떤 메모리가 필요할까?

메모리 항목학습 시 사용됨추론 시 사용됨설명
모델 파라미터항상 필요함
중간 활성화값✅ 저장됨🔸 짧게 유지됨추론 시에는 레이어 간 전달 후 바로 해제됨
그래디언트역전파 시에만 필요
옵티마이저 상태학습 알고리즘에 따라 필요 (예: Adam 등)
입력 데이터보통 GPU에 올려서 처리
임시 연산 버퍼일시적으로 할당됨

추론 시에는 활성화값이 오래 저장되지 않고, 필요한 순간만 메모리에 올라왔다가 사라집니다.


3. 왜 추론이 메모리를 덜 쓰는가?

3.1. 학습(Training)에서는:

  • 모든 레이어의 중간 출력값(activation)VRAM에 저장해둬야 합니다.
  • 역전파를 위해 다시 사용되기 때문입니다.
  • → 결과적으로 VRAM 점유율이 매우 높아집니다.

3.2. 추론(Inference)에서는:

  • 역전파가 없기 때문에, 레이어의 출력값은 바로 다음 연산에만 쓰이고 즉시 삭제됩니다.
  • 덮어쓰기(in-place) 방식으로 VRAM을 아낄 수 있습니다.

예시 코드 흐름:

x1 = layer1(input)
x2 = layer2(x1)  # x1은 이제 더 이상 사용되지 않음
x3 = layer3(x2)  # x2도 마찬가지

3.3. 메모리 흐름 이미지 (개념):

[Training]
VRAM: [input] → [layer1 out] → [layer2 out] → [layer3 out] → ... (모두 저장됨)

[Inference]
VRAM: [layer1 out] → 덮어쓰기 → [layer2 out] → 덮어쓰기 → ... (계속 덮어쓰기)

4. 최종 요약

구분학습 시추론 시
메모리 요구량작음
활성화값 저장오래 유지즉시 해제
GPU 효율성낮음높음
배치 확장성낮음높음

5. 추가 팁

추론 중 VRAM을 더 아끼고 싶다면?

  • torch.no_grad() 사용
  • inplace=True 연산 활용
  • float16 (mixed precision inference)

profile
AI developer

0개의 댓글