
Vấn đề bộ nhớ khi chạy LLM lớn
Khi triển khai inference cho mô hình ngôn ngữ lớn như Llama 2 7B hay Mistral 7B, hạn chế lớn nhất không phải tốc độ tính toán mà là bộ nhớ GPU. Trong quá trình inference tự hồi quy (autoregressive), mỗi layer của transformer cần lưu key-value pairs của tất cả token đã xử lý — gọi là KV cache.
Với Llama 2 7B, chuỗi 10.000 tokens, KV cache chiếm khoảng 5GB VRAM (công thức: 2 x 2 x num_layers x num_kv_heads x head_dim x seq_len). Với A100 80GB, dùng fp16 chỉ đủ chạy khoảng 40k tokens cùng lúc — quá thấp cho ứng dụng RAG hay chatbot hỏi đáp tài liệu dài.

KV Cache Quantization là gì?
KV Cache Quantization là kỹ thuật nén bộ nhớ KV cache sang định dạng số bit thấp hơn (INT4, INT8) mà vẫn giữ được độ chính xác cao trong suốt quá trình inference. Khác với weight quantization, KV cache quantization đặc biệt khó hơn vì cache được sinh ra động — không có cơ hội “calibrate” trước như PTQ thông thường.
Các phương pháp quantization chính
1. INT8/INT4 với LLM.int8()
Phương pháp LLM.int8() (Dettmers et al., 2022) sử dụng mixed-precision decomposition — các outlier trong activation được giữ ở fp16, còn phần còn lại quantize xuống INT8. Đây là baseline quan trọng cho mọi method sau.
2. KIVI — Tuning-free 2-bit KV cache
KIVI (arXiv:2402.02750) là phương pháp không cần fine-tune với 2-bit asymmetric quantization cho KV cache. Key cache quantize theo per-channel, value cache quantize theo per-token, và giữ residual cache 128 chiều ở độ chính xác gốc để không mất thông tin. Kết quả: giảm 2.6x peak memory, tăng 2.35-3.47x throughput trên A100.
3. KVQuant — Sub-4-bit KV cache
KVQuant (arXiv:2401.18079) cải tiến bằng per-channel key quantization, Pre-RoPE key preservation, non-uniform datatypes và dense-and-sparse outlier isolation. Trên LLaMA-7B, KVQuant cho phép chạy 1M context window trên A100-80GB — bước nhảy vọt so với giới hạn 128k của fp16.

4. SmoothQuant — INT8 W8A8 PTQ
SmoothQuant (arXiv:2211.10438) dịch chuyển outliers từ activations sang weights trước khi quantize, giúp INT8 hoạt động tốt hơn đáng kể. Kết quả: 1.56x speedup và 2x memory reduction mà không cần training data.
5. QuantServe / QServe — W4A8KV4 inference server
QServe (arXiv:2405.04532) là hệ thống serving thực tế với W4A8KV4 — 4-bit weight, 8-bit activation, 4-bit KV cache. Kết hợp progressive quantization, SmoothAttention và register-level parallelism để đạt throughput cao nhất. Trên LLaMA-3, QServe đạt 1.2-3.5x throughput so với TensorRT-LLM và giảm chi phí serving 3 lần.

So sánh hiệu quả trên LongBench
Dữ liệu từ LongBench benchmark (Llama2-7b-chat) cho thấy INT4 KV cache đạt ≥97% độ chính xác so với fp16 trên hầu hết dataset: TREC (63.0 vs 63.4), SAMSum (41.3 vs 41.8), TriviaQA (84.76 vs 85.2). Ngược lại, INT2 cache bị suy giảm rõ rệt (SAMSum: 14.04).
| Dataset | FP16 | INT4 | INT2 |
|---|---|---|---|
| TREC | 63.4 | 63.0 | 52.1 |
| SAMSum | 41.8 | 41.3 | 14.0 |
| TriviaQA | 85.2 | 84.8 | 71.5 |
| HotPotQA | 31.5 | 30.0 | 22.8 |
Khi nào dùng quantization nào?
- INT8 SmoothQuant — ứng dụng tổng quát, dễ triển khai, không cần training data, phù hợp cho production baseline
- INT4 (KIVI/KVQuant) — mô hình nhỏ đến trung bình (7B-13B), cần context dài (32k-1M tokens)
- W4A8KV4 (QServe) — serving LLM production với throughput cao, GPU data center
- INT2 — không khuyến nghị cho ứng dụng thực tế, độ chính xác suy giảm nghiêm trọng
Kết luận
KV Cache Quantization đã trở thành công cụ bắt buộc cho bất kỳ hệ thống LLM inference nào cần xử lý context dài trên GPU giới hạn. Với INT4, bạn có thể tăng context window gấp 2-4 lần hoặc giảm chi phí GPU inference xuống 50-75%. Các method như KIVI và KVQuant cho phép deployment mô hình 7B trên card nhỏ như RTX 4090 mà vẫn xử lý 100k+ tokens.
Hướng dẫn áp dụng thực tế
Để cài đặt KV Cache Quantization trong môi trường production:
- Transformers: HuggingFace hỗ trợ `torch_dtype=torch.float8_e4m3fn` khi load model — tự động quantize attention cache
- vLLM: Dùng flag `–kv-cache-dtype auto` để bật quantization thông minh dựa trên GPU utilization
- QServe: Cài đặt qua `pip install qserve` → cấu hình W4A8KV4 pipeline cho inference server
- Laravel với PyTorch Serving: Dùng API endpoint `/generate_cache` với header `kv_quant=int4` để bật cache quantize
Với các setup trên, một máy chủ A100 80GB có thể phục vụ đồng thời 5-10 LLM 7B với context 64k tokens — thay vì chỉ 1-2 model như trước đây.
