모델의 파라미터 수는 겨우 20만 개 정도 늘었을 뿐인데 (파라미터 수: 1.1M → 1.3M), VRAM 사용량이 2배 가까이 증가했습니다...
보통 이런 현상의 원인은 단순한 파라미터 수 증가가 아니라, feature map 크기의 변화 때문입니다. 이 글에서는 PyTorch의 3D U-net 기준으로, VRAM 사용량에 가장 큰 영향을 미치는 요인들을 분석해보겠습니다.
입출력 채널 수가 32 → 64로 늘어나면, feature map이 차지하는 메모리는 최대 4배까지 증가할 수 있습니다. 왜냐하면, 텐서의 메모리 사용량은 다음과 같이 계산되기 때문입니다:
메모리 사용량 = 배치 크기 × 채널 수 × 해상도(D × H × W) × 데이터 타입 크기
(B, 32, D, H, W) → (B, 64, D, H, W)
채널 수만 두 배 늘어도 메모리 사용량은 4배가 될 수 있습니다. 특히 여러 레이어에 걸쳐 이 변화가 적용되면 누적 메모리는 훨씬 커집니다.
VRAM이 4배로 늘어난 이유:
1) 순전파 활성화(activations) + 역전파용 저장(gradient buffers)
- 순전파에 쓰이는 feature map 메모리
- 역전파 때 gradient 계산을 위해 저장해 두는 activation buffer
두 종류의 버퍼가 모두 채널 수에 비례해 커지기 때문입니다.채널 수 2배 →순전파 activation은 2배→역전파 buffer도 2배 → 총 4배 화소(pixel) 데이터가 메모리에 올라갑니다.
3D 볼륨 데이터에서는 해상도가 32³ → 64³로 증가할 경우, 텐서 크기는 2³ = 8배가 됩니다.
(32, 32, 32) → (64, 64, 64)
이러한 해상도 증가는 feature map 크기를 급격히 증가시키며, 그 결과 VRAM도 순식간에 소모됩니다.
요소 | 파라미터 수 영향 | VRAM 영향 | 증분 비율 추정 |
---|---|---|---|
채널 수 (32 → 64) | ↑ 약간 | ↑↑↑ | 2~4배 |
해상도 (32³ → 64³) | - | ↑↑↑↑↑↑↑↑ | 8배 이상 |
파라미터 수 (1.1M → 1.3M) | ↑ 조금 | 거의 없음 | 1.2배 정도 |
결론: VRAM 사용량의 급격한 증가는 대부분 intermediate feature map 크기 때문이지, 파라미터 개수 때문이 아닙니다.
PyTorch에서는 다음과 같은 도구로 GPU 메모리를 더 자세히 분석할 수 있습니다:
torch.cuda.memory_summary()
: 메모리 현황 요약 출력torch.profiler
: 메모리 타임라인과 병목 분석memory_summary()
나 profiler
활용