Quantization
用低精度数值表示权重 / activation / KV cache,以大幅降显存 + 提算力为目标。FP16→INT8 2× 省,INT4 4× 省;Hopper / Blackwell 的 tensor core 对 FP8 / MXFP4 有原生支持,算力直接翻倍。核心难点是怎么在精度损失可控的前提下量化——不同对象(权重 / activation / KV)、不同粒度(per-tensor / per-channel / per-group / per-token)、不同时机(PTQ / QAT)有完全不同的方法论。
基本分类
按对象
| 量化对象 | 难度 | 典型方案 |
|---|
| Weight-only (W8, W4) | 容易,可离线 | GPTQ, AWQ, HQQ |
| Activation | 难,动态分布 outlier | SmoothQuant, LLM.int8() |
| KV cache | 中等,影响长度/带宽 | KIVI, KVQuant |
| Gradient (训练时) | 难,反向误差累积 | FP8 训练(Hopper/Blackwell) |
按粒度
- per-tensor:整张权重共享一个 scale,最粗
- per-channel:每输出通道独立 scale,标准做法
- per-group:每 g 个元素(如 128)共享 scale,W4 下常用
- per-token:activation 按 token 维度动态 scale
按时机
- PTQ (Post-Training Quantization):训练完再量化,用小 calibration set 估 scale
- QAT (Quantization-Aware Training):训练中就模拟量化误差,精度好但成本高
- Mixed-precision training:FP8 权重 + FP16 master copy,Hopper 世代的主流训练方式
LLM 推理里的典型组合
| 配置 | 含义 | 收益 |
|---|
| W4A16 | INT4 权重、FP16 activation | 显存 4×、算力仍 FP16(matmul 先 dequant) |
| W8A8 INT | 权重和 activation 都 INT8 | 算力 2×(若 tensor core 支持 INT8) |
| FP8 (E4M3 / E5M2) | Hopper / Blackwell 原生 | 算力 2×、数值范围比 INT8 大 |
| MXFP4 / NVFP4 | Blackwell 的 4-bit 浮点 | 算力 4×、首个真正好用的 4-bit 训练精度 |
系统视角
- Dequant kernel 融合:W4A16 需要在 matmul kernel 里先把 W4 上投到 FP16 再乘,融合得好算力开销可忽略
- KV cache 量化:每 token 存更少 bits → 更长 context / 更大 batch,但 attention 要能接受量化 K/V
- Outlier 处理:activation 里少数 channel 的数值远大于其他(Ferrari tail),需要 SmoothQuant 式重分配 scale 到权重
- 量化感知调度:不同层对精度敏感度不同,Hawkeye-MLSys26 / MixLLM-MLSys26 这类工作做 per-layer 混合精度
引用本概念的论文
相关概念