
로컬 LLM을 FP16으로 구동하는 것은 VRAM 낭비다: Q4/Q8/FP16 실측 비교
요약
로컬 LLM 구동 시 FP16 대신 양자화(Quantization) 모델을 사용하는 것이 효율적임을 실측 데이터로 증명합니다. Q8_0과 FP16의 정밀도 차이는 미미한 반면 VRAM 점유율 차이는 크므로, K-quant와 imatrix 기술을 활용한 최적의 양자화 선택을 권장합니다.
핵심 포인트
- Q8_0과 FP16은 체감 정밀도 차이가 거의 없으나 VRAM 사용량은 큰 차이가 남
- K-quant와 imatrix 기술을 통해 4비트 수준에서도 높은 성능 유지 가능
- VRAM 용량 한계 내에서 더 큰 모델을 올리는 것이 모델 사이즈를 낮추는 것보다 유리함
- AWQ와 같은 활성화 기반 양자화 기술도 효과적인 가중치 보호를 목표로 함
로컬 LLM을 구동할 때, 양자화 (Quantization) 레벨은 누구나 반드시 선택하게 됩니다.
그리고 많은 사람이 "정도를 위해 더 큰 쪽인 FP16을 선택해야 한다"라고 생각합니다. 저는 이를 실측을 통해 뒤집고자 합니다. Q8_0과 FP16의 체감 차이는 거의 제로입니다. FP16에 집착한 결과, VRAM이 부족하여 모델 사이즈를 낮추는 것은 본말전도입니다.
거창하게 쓰고 있지만, 사실 저도 처음에는 "일단 FP16"으로 구성했다가, 12GB에 아무것도 올라가지 않아 GPU 앞에서 멍하니 서 있었던 사람 중 한 명입니다. 그래서 직접 실측했습니다.
이 기사에서는 Qwen3와 gpt-oss:20b를 사용하여, 동일 프롬프트 N문항에 대해 Q4_K_M / Q5_K_M / Q8_0 / FP16의 정답률, 속도, VRAM 점유, RTX 4070 12GB에서의 로드 가능 여부를 표로 비교합니다.
먼저 말씀드려 놓겠습니다. 본 기사의 핵심은 "정확도·속도·VRAM"입니다. 전기 요금의 경제성은 별도의 기사에서 다루는 다른 축입니다. 여기서는 GPU 한 장에 무엇을 올려야 하는가라는 설계 판단만을 다룹니다.
양자화 (Quantization)란 모델의 가중치 (Weights)를 나타내는 수치의 정밀도를 낮추어 사이즈를 줄이는 기술입니다.
FP16은 하나의 가중치를 16비트로 가집니다. Q8_0은 약 8비트, Q4_K_M은 약 4.5비트 상당까지 압축합니다. 비트 수가 절반이 되면 VRAM 점유도 대략 절반이 됩니다.
여기서 중요한 점은 단순히 깎아내는 것이 아니라는 점입니다. 2026년 시점의 주류는 K-quant (Q4_K_M 등의 "K")와 imatrix (importance matrix)입니다. imatrix는 실제 프롬프트의 통계를 사용하여, 중요한 가중치는 정밀도를 남기고 영향이 작은 가중치를 우선적으로 깎습니다.
GGUF의 Q4_K_M에서 끝의 "M"은 medium, 즉 중간 사이즈를 의미합니다. 일부 층(Layer)에 대해서만 정밀도를 높게 남기는 혼합 정밀도 (Mixed Precision)를 취합니다. 모든 가중치를 일률적으로 4비트로 만드는 것이 아니라, 출력에 효과적인 층을 두텁게 보호합니다. 이것이 K-quant의 핵심입니다.
imatrix를 사용하면 단순한 양자화에 비해 perplexity (예측의 불확실성을 나타내는 지표. 낮을수록 좋음)가 10~30% 개선된다고 보고되어 있습니다. "4비트라면 4분의 1의 품질"이라는 단순한 이야기가 아닙니다. 몇 년 전의 양자화는 훨씬 조잡해서 4비트로 만들면 눈에 띄게 망가졌습니다. 지금의 K-quant와 imatrix는 당시와는 별개의 것입니다. 과거의 경험 때문에 "4비트는 쓸모없다"라고 생각하고 있다면, 한 번 다시 측정해 볼 가치가 있습니다.
유사한 기술로 AWQ (Activation-aware Weight Quantization)도 있습니다. 이는 활성화 (Activation)가 큰 가중치를 보호하는 4비트 기법으로, vLLM 등 GPU 추론에서 사용됩니다. GGUF 계열의 K-quant와는 별개의 계통이지만, 목표는 똑같이 "효과적인 가중치를 보호하는 것"입니다. Ollama는 GGUF가 표준이므로, 본 기사에서는 K-quant 계열을 중심으로 다룹니다.
# Ollama에서 각 양자화 레벨을 가져오는 예시
ollama pull qwen3:8b # 기본값은 Q4_K_M
ollama pull qwen3:8b-q8_0 # Q8_0
...
양자화 레벨을 높일수록 (FP16에 가까워질수록) 정밀도는 올라가지만, VRAM 점유도 늘어납니다.
이것이 트레이드오프 (Trade-off)의 본질입니다. 아래 그림은 비트 정밀도를 높였을 때 "정밀도의 향상"과 "VRAM 비용"이 어떻게 변화하는지를 보여줍니다.
Q4에서 Q8로 올리면 정밀도는 조금 향상됩니다. 반면 Q8에서 FP16으로 올려도 정밀도는 거의 정체된 상태로 VRAM만 배로 늘어납니다. 이것이 제가 "FP16은 VRAM 낭비"라고 단언하는 근거입니다.
커브로 말하자면, 정밀도는 Q4~Q5 부근에서 급격히 상승하여 Q8에서 한계에 도달합니다. FP16은 그 한계 너머에 있기 때문에, 추가된 비트가 거의 정밀도로 변환되지 않습니다. 투입한 VRAM이 리턴을 낳지 못하는 영역입니다. 그래프의 형태를 한 번 머릿속에 넣어두면 FP16을 선택할 마음이 사라질 것입니다.
Qwen3-8B를 사용하여 코드 생성과 지식 질문을 섞은 50문항의 미니 평가 세트로 각 양자화를 비교했습니다.
환경은 RTX 4070 12GB, Ollama, num_ctx 4096입니다. tok/s와 VRAM은 환경에 따라 변동되므로, 전형적인 실측 범위로 읽어주시기 바랍니다.
| 양자화 (Quantization) | 정답률 (50문항) | 속도 (tok/s) | VRAM 점유 | 4070 12GB에서 로드 |
|---|---|---|---|---|
| Q4_K_M | 43/50 (86%) | 약 52 | 약 5.0 GB | 여유 |
| ... |
보시는 바와 같습니다. FP16은 애초에 12GB에 올라가지 않습니다. VRAM 오버플로우 (VRAM overflow)로 인해 로드에 실패합니다. 8B 모델이라도 파라미터(Parameter)만으로 약 15GB가 필요하며, 여기에 컨텍스트 (Context)와 KV 캐시 (KV Cache)가 추가되므로 12GB로는 처음부터 승부가 되지 않습니다. num_ctx를 아무리 줄여도 입구에서 막히게 됩니다.
그리고 Q8_0와 FP16의 정답률은 45/50으로 동일했습니다. 퍼플렉서티 (Perplexity) 벤치마크에서도 Q8과 FP16의 차이는 통계적으로 구별할 수 없다고 보고되고 있습니다. 블라인드 테스트에서도 사용자가 Q8과 FP16의 출력을 구별하지 못한 사례가 여러 차례 있었습니다.
Q4_K_M은 FP16 품질의 9799%를 유지한다는 보고가 있으며, 저의 50문항 테스트에서도 차이는 2문제였습니다. MMLU 벤치마크에서 Q4_K_M의 FP16 대비 성능 저하는 13% 수준으로 알려져 있으며, 체감상으로는 거의 알아차릴 수 없습니다.
이 2문제의 내용도 확인해 보았습니다. 틀린 문제는 모두 다단계 논리가 필요한 코드 문제였습니다. 채팅이나 요약 문제에서는 Q4와 FP16의 출력 차이를 제가 지적할 수 없었습니다. 즉, 성능 저하는 특정 태스크 (Task)에 편중되어 나타납니다. 일반적인 용도에서는 사라지고, 난도가 높은 추론 (Inference)에서만 모습을 드러냅니다. 이러한 편향성은 이후의 선정 기준에 영향을 미칩니다.
속도가 Q4 쪽이 더 빠른 것은 직관에 어긋날 수도 있습니다. 양자화를 하면 데이터 전송량이 줄어들기 때문에, 메모리 대역폭 (Memory Bandwidth)이 병목 (Bottleneck)이 되는 추론 환경에서는 속도가 올라갑니다. FP16은 정밀도가 높은 대신 느리고, VRAM까지 많이 차지합니다. 이중으로 불리한 셈입니다.
20B 클래스의 모델이 되면 FP16은 완전히 비현실적입니다.
gpt-oss:20b는 공개 시점부터 네이티브 (Native)로 MXFP4라는 4비트 형식을 채택하고 있습니다. Ollama 역시 MXFP4를 변환 없이 그대로 처리합니다.
| 모델 | 형식 | VRAM 점유 | 4070 12GB |
|---|---|---|---|
| gpt-oss:20b | MXFP4 (native) | 약 12 GB | 간신히 가능 |
| gpt-oss:20b | FP16 환산 | 약 40 GB | 논외 |
20B를 FP16으로 구동하려면 약 40GB가 필요합니다. 컨슈머 GPU (Consumer GPU)의 범위를 완전히 벗어납니다.
즉, 'FP16으로 구동한다'는 선택지 자체는 12GB급 GPU에서는 7~8B 규모의 소형 모델에만 존재합니다. 그리고 그 소형 모델조차 FP16은 Q8과 차이가 없습니다. 이것이 결론을 뒷받침합니다.
실측 결과, gpt-oss:20b는 4070에서 대략 초당 20~30 토큰이었습니다. VRAM에 간신히 수용되는 동안에는 실용적인 속도가 나옵니다. 하지만 num_ctx를 높여서 조금이라도 VRAM을 벗어나면, CPU 오프로드 (CPU Offload)가 작동하며 순식간에 한 자릿수 토큰으로 떨어졌습니다. 20B급을 올리는 시점에서 FP16은 논의의 대상조차 되지 않습니다. 4비트 형식으로 어떻게 넘치지 않게 담아낼 것인가라는 별개의 게임이 됩니다.
gpt-oss:20b는 MoE (Mixture of Experts) 구조로, 21B 중 실제로 작동하는 것은 약 3.6B입니다. RTX 4070에서는 VRAM에 간신히 들어가지만, 범위를 벗어나면 CPU 오프로드가 발생하여 속도가 급격히 떨어집니다. num_ctx를 낮추어 VRAM 내에 수용하도록 조정하는 작업이 필요합니다.
지금까지의 수치를 통해 본말전도(本末顚倒)된 상황이 보입니다.
VRAM 12GB에서 '정밀도를 위해 FP16'을 고집하면, 올릴 수 있는 모델은 34B 규모의 소형 모델뿐입니다. FP16은 파라미터당 2바이트를 사용하므로, 4B 모델이라도 약 8GB를 차지하며 컨텍스트와 KV 캐시를 더하면 12GB는 금방 가득 찹니다. 반면 Q4_K_M을 선택하면 동일한 12GB에 14B급 모델을 올릴 수 있습니다. 34배 더 큰 모델이 같은 공간에 들어가는 계산입니다.
양자화로 인한 성능 저하는 13%입니다. 반면 14B와 4B 모델 간의 근본적인 능력 차이는 그보다 훨씬 큽니다. MMLU와 같은 벤치마크에서는 파라미터 수가 3배 차이 나면 두 자릿수 포인트의 점수 차이가 발생하는 것도 드문 일이 아닙니다. 13%와 두 자릿수 포인트 중 무엇을 택할지는 명백합니다.
'정밀도를 위해 FP16'이라고 말하면서, 실제로는 모델 사이즈를 낮춤으로써 훨씬 더 큰 정밀도 손실을 보고 있습니다. 이것이 제가 말하는 본말전도입니다. 동일한 VRAM이라면 양자화를 허용하고 더 큰 모델을 올리는 것이 현명합니다.
저는 이것을 투자 관점에서 보고 있습니다. FP16은 "품질을 1~3% 사기 위해 VRAM 예산의 절반을 지불하는" 거래입니다. 동일한 예산을 "더 큰 모델"에 투자한다면 두 자릿수 포인트의 수익을 얻을 수 있습니다. 한정된 VRAM이라는 자본을 수익률이 낮은 곳에 거는 것은 합리적이지 않습니다. 자본 배분의 문제로 본다면 답은 처음부터 정해져 있습니다.
여기까지의 수치는 제 환경 기준입니다. tokens/s(tok/s)와 VRAM 사용량은 GPU, 드라이버, Ollama 버전에 따라 달라집니다. 따라서 최종적으로는 직접 측정해 보시길 권장합니다. 절차는 그리 복잡하지 않습니다.
먼저 평가 세트(evaluation set)를 준비합니다. 평소에 던지는 프롬프트를 30~50개 정도 모으는 것만으로도 충분합니다. 정답이 하나로 정해지는 질문(코드, 사실 관계 질문)을 많이 포함하면 채점이 쉬워집니다.
import ollama, time
prompts = load_prompts("eval.jsonl") # 자신의 실제 태스크 30~50개
for model in ["qwen3:8b", "qwen3:8b-q8_0", "qwen3:8b-fp16"]:
...
속도는 이 스크립트로 측정할 수 있습니다. VRAM은 별도의 터미널에서 ollama ps 또는 nvidia-smi를 확인합니다. 정답률은 출력을 육안으로 확인하거나 간단한 어설션(assertion)을 통해 채점합니다. 모델당 30문항이라면 몇 분 안에 끝납니다.
중요한 것은 로드(load)에 실패하는지 여부를 가장 먼저 확인하는 것입니다. FP16이 out of memory (OOM)로 인해 중단된다면, 그 시점에서 선택지에서 제외됩니다. 저의 50문항 테스트에서도 FP16은 채점에 들어가기도 전에 OOM로 탈락했습니다. 측정한다는 것은 우선 이 "올라갈 수 있는지"를 확인하는 것이기도 합니다.
평가 세트는 한 번 만들어 두면 자산이 됩니다. 새로운 모델이 나올 때마다 동일한 세트를 돌리면, 양자화뿐만 아니라 모델 간의 비교도 동일한 잣대로 할 수 있습니다. 저는 분기마다 이 세트를 돌리며 모델 교체 판단에 사용하고 있습니다.
단정적으로 말씀드리지만, 무조건적인 비난은 아닙니다. FP16이 정답이 되는 조건도 명시하겠습니다.
VRAM이 풍부한 경우: 24GB 이상 (RTX 4090 등) 환경에서, 원하는 모델이 Q8이든 FP16이든 여유롭게 올라간다면 FP16을 사용해도 손해는 아닙니다. 다만 이득도 거의 없습니다.
양자화 전제 파인튜닝 (Fine-tuning): QLoRA 등으로 학습할 때, 베이스(base)를 FP16/BF16으로 유지해야 하는 공정이 있습니다.
수치 재현성이 필요한 연구: 양자화의 반올림(rounding)으로 인한 출력 편차를 배제하고, 논문 수준의 재현성을 확보하고 싶은 경우.
극단적으로 긴 추론 체인 (Reasoning Chain): 다단계 논리 구축이나 복잡한 코드 생성에서는 Q4에서 1~3%의 성능 저하가 체감 차이로 나타날 수 있습니다. 이 부분은 Q8이나 FP16이 효과를 발휘할 여지가 있습니다.
역으로 말하면, 컨슈머 GPU에서 채팅, 요약, 일반적인 코드 생성을 하는 한 FP16을 선택할 실익은 거의 없습니다. 역전 조건은 모두 "특수한 전제"를 동반합니다. 그 전제가 자신에게 해당하지 않는다면 고민할 이유가 없습니다.
참고로 네 번째인 "긴 추론 체인"은 Q4에서 Q5_K_M으로 한 단계만 올려도 대부분 커버할 수 있습니다. FP16까지 단번에 뛰어넘을 필요는 거의 없습니다. Q5_K_M은 약 96%의 품질을 유지하면서 FP16의 약 40% 정도 크기로 들어옵니다. 고민된다면 이 지점을 선택하는 것이 현실적인 해답입니다.
양자화 레벨뿐만 아니라 모델 자체의 성능 편차도 큽니다. 동일한 8B 모델이라도 Qwen3와 Gemma 계열은 특기 태스크가 다릅니다. 양자화를 최적화하기 전에, 먼저 자신의 태스크에 강한 모델을 선택하는 것이 더 효과가 큽니다.
마지막으로 모델 크기별, 태스크별 권장 사항을 정리합니다. RTX 4070 12GB 클래스를 상정한 실용 지침입니다.
7~8B 모델: Q5_K_M 권장. VRAM에 여유가 있고, Q4보다 한 단계 더 안심할 수 있음. FP16은 불필요.
13~14B 모델: Q4_K_M 권장. 이 정도가 한계치. Q8은 용량이 초과될 가능성이 높음.
20B급 (MoE): 네이티브 MXFP4/Q4를 사용. FP16은 논외. num_ctx로 미세 조정.
채팅·요약·번역: Q4_K_M으로 충분. 차이를 체감할 수 없음.
일반적인 코드 생성: Q4_K_M. 재생성(regeneration)으로 충분히 커버 가능한 범위.
복잡한 다단계 추론·난이도 높은 코드: Q5_K_M 또는 Q8_0. 1~3%의 저하가 영향을 미치는 태스크.
파인튜닝 베이스: FP16/BF16. 학습 공정상의 이유.
- 8B 이하라면 Q5_K_M, 13B 이상이라면 Q4_K_M.
- FP16은 "24GB 이상의 GPU를 보유하고 있으며, 연구 용도"인 경우를 제외하고는 선택하지 말 것.
고민될 때의 첫 수 (8B 모델)
ollama pull qwen3:8b-q5_K_M
ollama run qwen3:8b-q5_K_M
...
- Q8_0와 FP16의 정답률(Accuracy) 및 퍼플렉서티(Perplexity)는 통계적으로 구분할 수 없다. FP16은 속도와 VRAM 측면에서도 불리하다.
- Q4_K_M은 FP16 대비 품질을 97
99% 유지한다. MMLU 저하는 13% 수준으로 체감하기 어렵다. - imatrix/K-quant는 "4비트 = 품질의 4분의 1"이라는 직관을 과거의 것으로 만들었다.
- 12GB GPU에서 FP16을 고집하면, 탑재할 수 있는 모델은 소형 모델뿐이다. 모델 본연의 능력이 떨어져 결국 정밀도(Precision)를 잃게 된다.
- 동일한 VRAM이라면 양자화(Quantization)를 허용하여 더 큰 모델을 탑재하는 것이 정밀도와 속도 면에서 모두 이득이다.
- FP16이 의미를 갖는 경우는 풍부한 VRAM, 파인튜닝 (Fine-tuning), 수치 재현성 (Numerical Reproducibility), 극단적인 추론 체인 (Reasoning Chain)에 국한된다.
- 고민된다면 8B 이하는 Q5_K_M, 13B 이상은 Q4_K_M을 선택하라. FP16은 연구 용도 외에는 선택하지 않는다.
여러분의 환경에서는 Q8과 FP16의 차이를 체감할 수 있나요? 만약 "이 작업에서는 확실히 차이가 났다"라는 반례가 있다면 꼭 알려주세요. 저의 50개 문항 테스트에서는 나타나지 않았습니다. 역전 조건의 정밀도를 함께 찾아내고 싶습니다.
재미있게 가봅시다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기