11. 양자화의 절충
핵심 질문
- "양자화"라고 뭉뚱그리는 것들은 실제로 무엇을 어디서 줄이는가?
- 각 양자화가 얻는 것과 잃는 것은 무엇이며, 그 경로는 어떻게 다른가?
목표
- weight-only / weight+activation / KV-cache 양자화의 메모리·커널·품질 경로를 분리한다.
- "양자화하면 무조건 빠르고 싸다"는 성급함을 조건으로 대체한다.
먼저: 양자화(quantization)가 뭔가요?
양자화는 숫자를 더 적은 bit로 표현하는 것입니다(04장 dtype). 예: FP16(16 bit)로 저장하던 값을 INT8(8 bit)이나 INT4(4 bit)로 낮춥니다. bit가 줄면 저장 용량과 옮길 데이터가 줄어 메모리·대역폭 이득이 생깁니다(03장 memory 병목 완화). 대신 표현이 거칠어져 정보 손실이 생길 수 있습니다.
핵심은 이것입니다: "무엇을" 양자화하느냐에 따라 얻는 것도 잃는 것도 완전히 다릅니다. 이 장은 그 세 갈래를 분리합니다.
flowchart TB
Q[양자화]:::comp --> W[weight-only<br/>가중치만]:::mem
Q --> WA[weight+activation<br/>가중치+활성값]:::comp
Q --> KV[KV-cache 양자화<br/>KV만]:::mem
W --> WG[가중치 메모리↓<br/>로드 대역폭↓]:::result
WA --> WAG[연산도 저정밀<br/>커널 이득 가능]:::result
KV --> KVG[KV 메모리↓<br/>동시요청↑ 여지]:::result
classDef comp fill:#d0ebff,stroke:#1971c2,color:#000;
classDef mem fill:#e5dbff,stroke:#7048e8,color:#000;
classDef result fill:#d3f9d8,stroke:#2f9e44,color:#000;
세 갈래
1. weight-only 양자화 (가중치만)
가중치를 낮은 bit로 저장하고, 계산 직전에 다시 높은 정밀도로 풀어(dequantize) 곱하는 방식이 흔합니다.
- 얻는 것: 가중치 메모리↓(04장), 가중치 로드 대역폭↓ → decode의 memory 병목(03장)에 특히 유리.
- 잃는 것/비용: dequantize 오버헤드, 가중치 표현 손실로 인한 품질 리스크. 연산 자체는 여전히 고정밀일 수 있어 compute 이득은 제한적일 수 있음.
2. weight+activation 양자화 (가중치+활성값)
가중치뿐 아니라 흐르는 활성값(activation)도 낮은 bit로 다뤄, 저정밀 연산 커널로 곱셈까지 저비용화하려는 방식.
- 얻는 것: 메모리에 더해 연산(커널) 이득 가능성.
- 잃는 것/비용: activation은 값의 분포가 넓고 이상치(outlier)에 민감해, 품질 유지가 더 까다로움. 구현·보정(calibration)이 복잡.
3. KV-cache 양자화 (KV만)
저장되는 KV(05장)를 낮은 bit로 압축.
- 얻는 것: KV 메모리↓ → 더 긴 컨텍스트·더 많은 동시 요청 여지(05·07장). 자료에 따르면 INT8은 대략 2배 압축에 정확도 손실이 작고, 더 공격적인 FP4 등은 4배 압축이 가능하나 리스크↑로 설명됩니다(확인일 2026-07-20).
- 잃는 것/비용: KV 표현 손실이 생성 품질에 미치는 영향, 저정밀 KV를 다루는 커널 필요.
표로 정리 — 경로 분리
| 양자화 | 주로 줄이는 것 | 주된 이득 | 주된 리스크·비용 |
|---|---|---|---|
| weight-only | 가중치 저장·로드 | decode 대역폭↓ | dequant 오버헤드, 품질 |
| weight+activation | 저장+연산 | 커널(연산) 이득 가능 | activation 이상치, 구현 복잡 |
| KV-cache | KV 저장 | 컨텍스트·동시요청 여지↑ | 생성 품질, 전용 커널 |
📌 핵심
"양자화 = 빨라짐"이 아니다어떤 양자화는 메모리를 줄이고(대역폭 병목에 유리), 어떤 것은 연산까지 줄입니다(커널 병목에 유리). 03장에서 병목이 compute냐 memory냐가 조건부였듯, 양자화 이득도 어느 병목을 겨냥하느냐에 따라 달라집니다. memory-bound 상황에서 weight-only가 잘 듣고, 이미 compute-bound라면 그 이득이 작을 수 있습니다.
⚠️ 품질은 "약간 손실"로 뭉뚱그리지 말 것
⚖️ 절충(tradeoff) — 핵심
양자화의 대가는 정밀도·정확도 리스크입니다. 그런데 이 리스크는 균일하지 않습니다.
- 어떤 과제(일반 대화)에선 눈에 안 띄고, 어떤 과제(정밀 추론·코드·수치)에선 두드러질 수 있습니다.
- 같은 bit 수라도 어디를(weight/activation/KV) 양자화했느냐로 영향이 다릅니다.
- 그래서 "INT4로 품질 거의 그대로"라는 말은 어떤 모델·과제·양자화 방식에서인지 없이는 의미가 약합니다.
🔬 증거 읽기 (주장 유형·조건)
- "INT8 KV는 손실이 작다"는 여러 measured 보고가 있으나, 모델·과제·평가지표가 명시돼야 합니다.
- "이 양자화로 크기 X배↓, 품질 그대로"는 흔히 vendor-reported입니다. owner의 유리한 벤치일 수 있으니 독립 재현(REPRODUCTION)과 구분하세요.
- 조건 없이 "양자화는 공짜 이득"으로 옮기는 자료는 신뢰도를 낮춰 읽으세요. calculated(메모리 절감량)와 measured(품질 영향)를 섞어 한쪽만 보여주는 경우가 많습니다.
여정에 위치시키기
양자화는 04장의 "VRAM 손님 줄이기" 지도에서 가중치·KV 손님을 bit 수준에서 줄이는 방법입니다. 06장의 attention 변형이 아키텍처 수준에서 KV를 줄였다면, KV 양자화는 정밀도 수준에서 줄입니다 — 둘은 다른 축이라 겹쳐 쓸 수도 있습니다(06장에서 언급). 어느 쪽이든 memory 병목(03장)을 겨냥한 거래이며, 품질이라는 대가가 붙습니다.
📌 핵심
- 양자화는 "무엇을 줄이느냐"로 갈린다: weight-only(가중치), weight+activation(가중치+활성값), KV-cache(KV).
- weight-only는 대역폭, weight+activation은 연산까지, KV 양자화는 컨텍스트·동시요청 여지를 겨냥.
- 이득은 겨냥한 병목(compute vs memory)에 따라 다르고, 대가는 품질·구현 복잡도.
- "무조건 빠르고 공짜"가 아니며, 품질 영향은 모델·과제·방식에 따라 다르다.
🔎 이 장의 '지지하지 않는 결론'
- "양자화하면 항상 빨라진다"고 말할 수 없습니다 — 이미 compute-bound면 memory 이득이 작습니다.
- "INT4로 품질 그대로"를 조건 없이 일반화할 수 없습니다 — 모델·과제·양자화 대상이 명시돼야 합니다.
✍️ 확인 문제
- weight-only와 weight+activation 양자화가 얻는 이득이 어떻게 다른지, 03장의 병목 개념으로 설명하세요.
- KV-cache 양자화가 07장(동시 요청)과 어떻게 연결되는지 설명하세요.
- (조건 유형) "이 모델을 INT4로 양자화해도 품질이 유지된다"를 신뢰하려면 어떤 조건과 출처 등급을 확인해야 합니까?
다음 장: 12 · speculative decoding과 MTP — 속도를 위한 추측과 그 검증.