W4A8通常表示Weight使用4-bit、Activation使用8-bit。它比W4A16更積極降低記憶體與頻寬,也需要硬體和Kernel真正支援4-bit Weight × 8-bit Activation GEMM。KV Cache量化則是另一條路:模型權重只保存一份,KV會隨Token和Concurrency成長,因此長Context服務可能更受FP8或NVFP4 KV Cache影響。
AWQ、GPTQ、FP8與NVFP4不是同一層的選項。AWQ與GPTQ主要決定如何把已訓練權重量化;Activation Quantization處理Runtime資料;KV Cache Quantization處理注意力狀態。部署應先找出瓶頸,再選配方,不能只以「位元最低」排序。
重點快讀
- W4A16:4-bit Weight、16-bit Activation,支援較廣。
- W4A8:4-bit Weight、8-bit Activation,節省更多Bandwidth。
- AWQ利用Activation分布保護重要Weight Channel。
- GPTQ以二階近似逐層降低Weight Quantization Error。
- SmoothQuant把Activation Outlier部分搬到Weight。
- FP8 KV Cache支援範圍通常比NVFP4 KV Cache廣。
- TensorRT-LLM目前提供W4A8 AWQ/GPTQ、FP8 KV與NVFP4 KV等配方。
- 配方是否可用取決於模型、GPU世代與Backend。
權重、Activation與KV是三種資料
| 資料 | 生命週期 | 主要壓力 |
|---|---|---|
| Weight | 模型載入後固定 | 模型容量、HBM讀取 |
| Activation | 每層、每Batch暫時產生 | GEMM、Peak Memory、Outlier |
| KV Cache | 隨Session Token累積 | 長Context、Concurrency、Decode頻寬 |
只量化Weight可能讓模型放得下,長對話仍會因KV耗盡顯存;只量化KV則不一定讓巨大模型本身能載入。
W4A16和W4A8差在哪?
| 配方 | Weight | Activation | 優勢 | 限制 |
|---|---|---|---|---|
| W4A16 | INT4/FP4 | FP16/BF16 | 品質較穩、支援成熟 | Activation Bandwidth仍高 |
| W4A8 | INT4/FP4 | INT8/FP8 | 更低Memory Traffic與高吞吐潛力 | Outlier、Scale與硬體要求更高 |
W4A8是否更快,取決於Kernel是否原生支援、Dequantization是否融合,以及工作負載是否Memory-bound。沒有相容Kernel時,轉換成本可能抵消節省。
AWQ如何量化Weight?
Activation-aware Weight Quantization觀察Calibration Activation,找出對輸出較重要的Weight Channel,再以Scale調整保護這些權重。它通常屬Weight-only PTQ,不需要完整重新訓練。
- 使用代表性Calibration Prompt。
- 依Activation Magnitude決定Channel Scale。
- Weight按Group量化到4-bit。
- Runtime再解碼或使用專用Kernel。
- 品質依Group Size、Scale與模型而變。
AWQ對常見Activation分布有效,若正式流量和Calibration差異很大,受保護Channel可能不再匹配。
GPTQ如何運作?
GPTQ以近似二階資訊衡量Weight誤差對Layer Output的影響,逐列或逐Block量化並更新剩餘權重補償誤差。
minimize || W X - Q(W) X ||²
using approximate Hessian from calibration activations- 通常比單純Round-to-nearest保留更多品質。
- 量化過程較慢且需要Calibration。
- Group Size和Activation Order影響結果。
- 不同Runtime需要相容Packing Layout。
- 量化Checkpoint不能假設跨引擎通用。
SmoothQuant處理Activation Outlier
Activation常有少數Channel值特別大,讓INT8或FP8 Scale被Outlier支配。SmoothQuant透過等價縮放,把部分Activation難度轉移到Weight:
Y = X W
= (X / s) (s W)縮小Activation Outlier後更容易量化,Weight則承擔相反Scale。平衡參數需要Calibration,並要和AWQ、GPTQ及Kernel配方相容。
Scale Granularity
| 粒度 | 優勢 | 代價 |
|---|---|---|
| Per-tensor | Metadata少、Kernel簡單 | Outlier影響整個Tensor |
| Per-channel | Weight Channel較準 | Scale讀取和布局 |
| Per-group | 4-bit Weight常用平衡 | Group Size需調校 |
| Per-token | Activation適應每個Token | Runtime Amax與Scale成本 |
| Blockwise | 貼近局部分布 | Scale Metadata與硬體要求 |
KV Cache量化
KV Cache在每個Layer為每個Token保存Key與Value。將BF16 KV改成FP8,理論容量約減半;NVFP4可進一步下降,但格式和Scale更複雜。
| KV格式 | 容量方向 | 硬體/軟體 | 風險 |
|---|---|---|---|
| BF16/FP16 | 基線 | 最廣 | 容量高 |
| FP8 | 約50% | Hopper、Ada、Blackwell及相容引擎 | Scale和長Context誤差 |
| NVFP4 | 更低 | Blackwell特定路徑 | 4-bit誤差、配方限制 |
TensorRT-LLM目前的NVFP4 KV Cache需要搭配FP8 Weight/Activation量化Checkpoint。支援組合會隨版本變化,不能只看格式名稱。
TensorRT-LLM目前有哪些配方?
- FP4。
- FP8 Per-tensor。
- FP8 Block Scaling。
- FP8 Rowwise。
- FP8 KV Cache。
- NVFP4 KV Cache。
- W4A16 AWQ/GPTQ。
- W4A8 AWQ/GPTQ。
並非每個模型和GPU支援全部組合。正式選型要同時查Model Support Matrix、Hardware Matrix與Feature Combination Matrix。
硬體矩陣怎麼看?
| GPU | 常見可用方向 |
|---|---|
| Ampere | W4A16、FP8 KV部分支援;W4A8依官方矩陣 |
| Ada | FP8、FP8 KV、W4A8/W4A16 |
| Hopper | FP8多配方、FP8 KV、W4A8/W4A16 |
| Blackwell SM100/103 | FP4、MXFP4、FP8、NVFP4 KV、W4A8/W4A16 |
| Blackwell SM120 | 支援組合較特定,需查當前矩陣 |
硬體支援不等於特定模型支援。Architecture、Attention、MoE、Multimodal和Backend都可能限制配方。
Calibration資料怎麼選?
- 覆蓋正式使用語言與Domain。
- 包含短、中、長Context。
- 包含System Prompt與Tool Schema。
- 包含Coding、數學、格式和拒答。
- 避免只有通用Web文字。
- 保存Tokenizer和Chat Template版本。
- Calibration和Evaluation分開。
Activation-aware與Scale估計高度依賴Calibration分布。只用幾十條簡單聊天容易低估Outlier和長Context風險。
本機與Production的選擇順序
- 確認模型原始BF16/FP16品質和顯存。
- 先測W4A16 AWQ或GPTQ。
- 硬體支援時再測W4A8。
- 長Context容量不足時測FP8 KV。
- Blackwell與相容配方再測NVFP4 KV。
- 比較Accepted Task Rate、TPOT與P99。
- 建立Fallback到較高精度版本。
低精度格式原理可閱讀FP8、MXFP8和NVFP4差在哪?;KV容量可閱讀KV Cache是什麼?。
任務驗收
| 任務 | 檢查 |
|---|---|
| 聊天 | Instruction、語氣和一致性 |
| Coding | Build、Tests、跨檔和Tool Call |
| 數學 | 精確答案和長推理 |
| 長Context | Needle、引用、排序和KV誤差 |
| 結構化輸出 | JSON Schema、Function Arguments |
| 安全 | 拒答、PII和Policy Regression |
- 顯存和最大Concurrency。
- TTFT、TPOT與Goodput。
- Kernel是否真正走量化路徑。
- Dequantization與CPU開銷。
- 模型更新後回歸。
常見問題
AWQ和GPTQ哪個一定較好?
沒有固定答案。AWQ通常更依賴Activation重要性,GPTQ使用二階近似;模型、Group Size、Runtime和任務會改變結果。
W4A8一定比W4A16快嗎?
不一定。只有硬體和Kernel原生支援、Activation Bandwidth是瓶頸時才可能明顯受益。
KV Cache量化會改變短回答嗎?
可能影響較小,但仍需測試。誤差通常在長Context、多輪和精確引用更容易累積。
官方資料
量化選型要先分清Weight、Activation和KV Cache。AWQ與GPTQ決定權重如何壓縮,W4A8要求更完整硬體路徑,FP8與NVFP4 KV則決定長Context容量。真正答案來自模型、GPU與任務的共同測試。
發表迴響