4bit·8bit 양자화, 흔한 함정과 해결법
요약: 4bit·8bit 양자화에서 2026년 가장 중요한 사실은 두 가지다. 첫째, 4bit는 '안전 바닥'이고 그 아래는 '절벽'이다 — 대부분 작업에서 4bit는 FP16 대비 1~2% 손실이지만, 3bit 이하부터 수학·다단계 추론이 무너진다. 둘째, 양자화 '실패'는 대부분 자초한 것이다: 포맷을 엔진과 안 맞추고(GGUF를 GPU 서빙에), 커널 없이 재고(Marlin 빠뜨림), 도메인 밖 데이터로 캘리브레이션한다.
4bit·8bit 양자화에서 2026년 가장 중요한 사실은 두 가지다. 첫째, 4bit는 '안전 바닥'이고 그 아래는 '절벽'이다 — 대부분 작업에서 4bit는 FP16 대비 1~2% 손실이지만, 3bit 이하부터 수학·다단계 추론이 무너진다. 둘째, 양자화 '실패'는 대부분 자초한 것이다: 포맷을 엔진과 안 맞추고(GGUF를 GPU 서빙에), 커널 없이 재고(Marlin 빠뜨림), 도메인 밖 데이터로 캘리브레이션한다. 그리고 에이전트/툴콜엔 절대 규칙 하나: V-cache를 Q4로 넣지 마라 — 꼬리 품질 저하가 툴콜을 깬다. 이 글은 양자화 고유 함정을 증상 → 원인 → 해결 순으로 수치와 함께 정리한다.
쉽게 말하면: 양자화는 사진을 JPEG로 압축하는 것과 같다. 적당한 압축(4bit)은 눈에 안 띄지만 과압축(2bit)하면 글자가 뭉개진다(수학 붕괴). 게다가 파일 포맷을 잘못 고르면(GGUF를 GPU 전용 뷰어에) 멀쩡한 사진도 느리게 뜬다 — 화질 탓이 아니라 뷰어(엔진)를 안 맞춘 탓이다.
왜 양자화 '실패'가 대부분 자초한 것인가?#
포맷을 서빙 스택과 안 맞추고, 커널을 빠뜨리고, 격리해서 측정하기 때문이다. 포맷은 세 갈래다: GGUF는 llama.cpp/Ollama용(CPU+GPU 하이브리드), AWQ는 GPU 프로덕션 기본(vLLM), GPTQ는 넓은 커버리지. GGUF를 vLLM에 억지로 넣으면 93 tok/s·TTFT 958ms로 느린데, 이건 알고리즘이 아니라 GGUF 레이아웃이 노트북·맥용이라 GPU 엔진에 빠른 로더가 없어서다. 커널도 반이다: Marlin 없이는 FP16보다 느리다(GPTQ -40%, bitsandbytes -64%). Marlin을 쓰면 GPTQ 2.6배·AWQ 10.9배 빨라진다(Marlin-AWQ가 스윗스팟: 51.8% Pass@1·741 tok/s). 캘리브레이션도 함정 — GPTQ/AWQ는 대표 샘플에 의존하니 도메인 밖 데이터로 캘리브레이션하면 조용히 품질이 떨어진다. 요컨대 포맷 단독이 아니라 '포맷-커널-워크로드' 조합으로 측정해야 한다.
| 상황 | 권장 포맷·비트(측정) | 대표 함정·수치 |
|---|---|---|
| NVIDIA GPU·추론/에이전트/코드 | AWQ INT4 (+Marlin 10.9배) | Marlin 없으면 FP16보다 느림 |
| CPU·애플·VRAM 부족 | GGUF Q4_K_M (perplexity 6.74) | vLLM에 넣으면 93 tok/s(자초) |
| KV 캐시(일반) | Q8 KV (품질손실 <0.1%) | 2bit = MATH 88→47(41점 절벽) |
| KV 캐시(에이전트/툴콜) | 비대칭 Q4-K + Q8-V | Q4 V-cache = 툴콜 붕괴 |
| 가중치 vs KV 순서 | 가중치 먼저(Q5→Q4 32B ~5GB↓) | flash-attn 없이 KV양자화 = 느림 |
KV 캐시는 어디까지 줄여도 되나?#
4bit까지는 사실상 무손실, 2bit는 절벽이다. arXiv 벤치에서 KV를 16→4bit로 줄여도 Qwen3-8B·LLaMA3-8B는 정확도 저하가 거의 없지만, 2bit로 가면 평균 -15.23·-10.15점 급락한다. 가장 심한 건 수학이다: Qwen3-8B의 MATH가 FP16/4bit ~88점에서 2bit 47.29점으로, 약 41점 절벽이 생긴다. 게다가 저하는 생각보다 일찍 시작한다 — 한 2026 논문은 8bit KV에서 이미 명령 준수가 흔들려 Pass_strict가 FP16 대비 ~10%p 떨어지고(프롬프트 4개 중 1개가 제약 위반), 6bit에서 붕괴한다고 보고한다. 실무 규칙: (1) Q8 KV가 기본(VRAM 반감·품질손실 <0.1%), (2) VRAM이 빠듯하면 비대칭 Q4-K + Q8-V(대칭 Q4+Q4보다 같은 VRAM서 품질 우위 — Keys만 채널 아웃라이어가 있어서), (3) 에이전트/툴콜엔 V-cache Q4 절대 금지(Q8 최소), (4) 가중치를 먼저 양자화하고 KV는 나중(가중치가 더 큰 레버), (5) quantized KV는 flash-attention과 반드시 페어링(안 그러면 디코딩이 기어간다).
그래서 안전한 양자화 세팅은?#
핵심은 "4bit를 바닥으로, 포맷은 스택에 맞추고, 큰 모델을 저정밀로"다.
- 비트: 4bit가 안전 바닥(FP16 대비 1~2%). 수학·코드·추론은 Q5_K_M/Q6_K로 여유를. 3bit 이하·재양자화(Q8→Q4)는 금지 — 오차 누적.
- 포맷: ==NVIDIA GPU 추론/에이전트=AWQ(+Marlin), CPU·맥·오프로드=GGUF(Q4_K_M)==. IQ-quant은 imatrix 확인, 캘리브레이션은 도메인 내 데이터로.
- KV·전략: Q8 KV 기본, 빠듯하면 비대칭 Q4-K+Q8-V, 에이전트 V-cache Q4 금지. 그리고 같은 용량이면 큰 모델 저정밀(70B Q4 >> 7B FP16 — 큰 모델이 손실을 덜 받는다). 모든 세팅은 네 데이터·작업으로 A/B 후 고정.
함께 읽기: 로컬 LLM, VRAM은 얼마나 필요할까, 로컬 코딩 보조 모델 2026: 직접 돌려보고 고른 현황과 추천
함께 읽기: 4bit·8bit 양자화 VRAM·RAM 요구량, 직접 실측, 로컬 오픈 LLM VRAM·RAM 요구량, 직접 계산·실측
참고 링크
- AWQ(MIT Han Lab·활성화 인지 양자화)
- GPTQ(IST-DASLab)
- llama.cpp(GGUF·quantize)
- KIVI: 2bit KV 캐시 양자화(arXiv)
- Qwen llama.cpp 양자화 공식 문서
참고: 4bit 손실(1~2%)·2bit 절벽(MATH 88→47)·8bit KV 저하(-10%p)·perplexity(6.74·6.84)·Marlin 배속(2.6~10.9배) 같은 수치는 2026년 arXiv·공개·상업 벤치이며 모델·아키텍처(예: DeepSeek MLA는 Q4 견딤 나쁨)·데이터·커널에 따라 달라진다(영구 수치 아님, 블로그 벤치 다수는 방향 지표). 포맷·커널·기본값은 스택 버전마다 바뀌니 상용 전 자기 데이터로 검증하라. sub-4bit는 특수 기법(Kitty·KVarN·SAW-INT4) 없이는 실패하는 연구 영역이다. 양자화 관행은 빠르게 바뀌니 분기별로 다시 본다.
Responses
No responses yet. Be the first to respond.