VRAM 계산
"내 카드에서 돌아갈까"라는 질문은 전부 산수이지 속설이 아닙니다. 총 VRAM은 가중치에 KV 캐시를 더하고 활성화와 엔진 오버헤드의 고정 슬래브를 더한 것입니다. 파라미터에 비트를 곱할 수 있다면, 돈을 쓰기 전에 장비를 사이징할 수 있습니다. 이 페이지는 공식, 계산 표, 그리고 어느 카드에나 복사해 쓸 수 있는 16 GB 워크스루를 줍니다.
공식
total VRAM = weights + KV cache + overhead
weights (GB) = parameters (B) × bits per weight ÷ 8
KV cache = bytes per token × context length (see [KV cache](/guide/kv-cache))
overhead ≈ 1–2 GB (activations, driver context, buffers, fragmentation)
흔한 GGUF quant의 가중치당 유효 비트: Q4_K_M ≈ 4.8, Q5_K_M ≈ 5.7, Q6_K ≈ 6.6, Q8_0 ≈ 8.5. 파라미터에 그것을 곱하고 8로 나누면 디스크상 파일 크기와 몇 퍼센트 안에서 일치합니다.
외울 만한 법칙, 십억 파라미터당 GB:
- Q4_K_M ≈ 0.6 GB — 일상의 주력
- Q5_K_M ≈ 0.7 GB
- Q6_K ≈ 0.8 GB — 대부분의 눈에는 거의 무손실
- Q8_0 ≈ 1.1 GB — 투명, 대략 Q4 비용의 두 배
- fp16/bf16 = 2.0 GB — 학습과 제대로 된 파인튜닝 영역
계산 예제
KV 캐시 크기는 아키텍처에 의존합니다. 현대 GQA 모델은 8B–32B급에서 fp16 KV 기준 토큰당 대략 128–256 KB, 70B급은 약 320 KB를 씁니다. 정확한 공식은 KV 캐시에 있습니다. 여기서는 그냥 더합니다. 오버헤드는 행당 1.5 GB로 잡습니다.
Q4_K_M (가중치당 ~4.8 비트):
| 모델 | 가중치 | KV @ 8k | KV @ 32k | 합계 @ 8k | 합계 @ 32k |
|---|---|---|---|---|---|
| 8B | 4.8 GB | 1.0 GB | 4.2 GB | 7.3 GB | 10.5 GB |
| 14B | 8.4 GB | 1.6 GB | 6.4 GB | 11.5 GB | 16.3 GB |
| 32B | 19.2 GB | 2.1 GB | 8.4 GB | 22.8 GB | 29.1 GB |
| 70B | 42.0 GB | 2.6 GB | 10.5 GB | 46.1 GB | 54.0 GB |
Q6_K (가중치당 ~6.6 비트):
| 모델 | 가중치 | KV @ 8k | KV @ 32k | 합계 @ 8k | 합계 @ 32k |
|---|---|---|---|---|---|
| 8B | 6.6 GB | 1.0 GB | 4.2 GB | 9.1 GB | 12.3 GB |
| 14B | 11.6 GB | 1.6 GB | 6.4 GB | 14.7 GB | 19.5 GB |
| 32B | 26.4 GB | 2.1 GB | 8.4 GB | 30.0 GB | 36.3 GB |
| 70B | 57.8 GB | 2.6 GB | 10.5 GB | 61.9 GB | 69.8 GB |
체화할 패턴이 두 개 있습니다. Q6_K는 Q4_K_M보다 ~35–40% 비쌉니다 — 종종 GPU 티어 하나 차이가 됩니다. 그리고 32k 컨텍스트의 KV는 반올림 오차가 아닙니다. 작은 모델에서는 가중치 자체와 맞먹습니다. 구형 MHA 설계(Llama-2 시대)는 4–8배 큰 KV 캐시를 가졌고, 그래서 32k 컨텍스트가 예전에는 특별한 하드웨어를 요구했고 GQA 모델은 그렇지 않습니다.
로드 시 OOM 대 생성 중 OOM
- 로드 시: 가중치만으로 가용 VRAM을 초과합니다. 엔진이 시작을 거부하거나, 레이어를 CPU로 밀어내고 기어갑니다. 정직하고 즉각적이며 진단이 쉽습니다.
- 생성 중: 가중치는 들어가지만 KV 캐시가 토큰마다 자랍니다. 새 세션은 잘 되다가, 마흔 턴 뒤, RAG 덤프나 파일 붙여넣기 뒤에 캐시가 여유를 먹어치우고 답변 중간에 프로세스가 죽습니다. 이게 교활한 쪽입니다 — 첫 프롬프트가 아니라 실제로 도달하게 될 컨텍스트를 기준으로 사이징하세요.
실시간으로 관찰하기:
watch -n1 nvidia-smi --query-gpu=memory.used,memory.total --format=csv
사이징 워크시트: 16 GB 워크스루
- 사용 가능 예산: 16 GB × 0.85 ≈ 13.6 GB. 데스크톱, 브라우저, 드라이버가 이미 0.5–1 GB를 점유합니다. 10–20% 여유는 선택이 아니라 법칙입니다.
- 꿈: 32B Q4_K_M — 가중치만 19.2 GB. 시작하자마자 탈락.
- 현실: 8k 컨텍스트의 14B Q4_K_M: 8.4 + 1.6 + 1.5 = 11.5 GB. ~15% 여유로 들어갑니다. 이 조합으로 출발하면 됩니다.
- 이제 32k 컨텍스트가 갖고 싶습니다: 8.4 + 6.4 + 1.5 = 16.3 GB. 예산 초과.
- 세 가지 해결책 — 하나를 고르거나 조합하세요:
- KV 캐시를 q8_0로 양자화: 6.4 → 3.2 GB, 합계 13.1 GB. 통과.
- 가중치를 Q4_K_S 또는 IQ4_XS로 내려 또 ~0.5–1 GB 절감.
- 8B Q6_K로 하향: 6.6 + 4.2 + 1.5 = 12.3 GB, 넉넉.
같은 다섯 단계는 8 GB 카드, 24 GB 카드, 48 GB 듀얼 GPU 박스에도 통합니다. 예산 잡고, 꿈꾸고, 빼고, 조정하세요.
항상 여유를 남기세요
엔진은 배치 슬롯마다 스크래치 버퍼를 할당하고, 오래 돌고 나서 파편화가 쌓이며, 동시성은 활성 요청마다 KV를 곱합니다. 원샷 벤치에서 "딱 맞는" 설정은 운영에서 OOM납니다. 10–20% 여유는 계속 살아있기 위한 세금입니다. 각 카드 티어에서 실제로 뭘 담을 수 있는지는 GPU 티어에, quant 비트가 왜 그 값인지는 양자화에 있습니다.