量化实战深入(GPTQ / AWQ / SmoothQuant / KV 量化)
量化是让大模型「跑得起、跑得省」的第一手段,也是推理岗的高频深挖点。本文参考 llm-action 的量化实战体系,系统讲清量化的数学本质、离群值难题、主流算法(GPTQ/AWQ/SmoothQuant)、W#A# 命名法、KV Cache 量化与 QAT。压缩总览(含蒸馏/剪枝)见 知识蒸馏与模型压缩,推理全景见 推理优化与部署。
面试先背这几句话
- 量化 = 用低比特整数近似表示高精度浮点权重/激活,核心公式 $x \approx s\cdot(q - z)$(scale 与 zero-point)。
- 分类维度:权重量化 vs 权重+激活量化、PTQ(训练后)vs QAT(量化感知训练)、对称 vs 非对称、per-tensor vs per-channel vs per-group。
- 大模型量化的最大难题是激活离群值(outlier):少数维度数值极大,导致 per-tensor 量化精度崩。
- 三大主流:GPTQ(逐层误差补偿量权重)、AWQ(激活感知保护重要权重通道)、SmoothQuant(把激活难度迁移到权重,解决 W8A8)。
- 命名法:W4A16 = 权重 4bit、激活 16bit(省显存、访存友好);W8A8 = 权重激活都 8bit(能用 INT8 算力提吞吐)。
一、为什么量化有效、代价是什么
- 收益:显存占用降低(FP16→INT4 降 4 倍)、访存量下降(decode 是访存瓶颈,量化直接提速)、可用更便宜/更少的卡跑更大模型。
- 代价:精度损失。量化引入舍入误差,比特越低损失越大;关键是用聪明的算法把损失压到可接受范围。
对 LLM 而言,decode 阶段是 memory-bound(见 推理性能压测),权重量化直接减少每步要读的字节数,所以 W4A16 常能显著提速且几乎不掉点——这是 4bit 权重量化流行的根本原因。
二、量化的数学本质
把浮点 $x$ 映射到 $b$ 比特整数 $q$:
$$q = \text{round}(x / s) + z, \qquad x \approx s\cdot(q - z)$$
- scale $s$:缩放因子,决定量化步长。
- zero-point $z$:零点偏移。
- 对称量化:$z=0$,范围关于 0 对称,简单快(权重常用)。
- 非对称量化:有 $z$,能更好覆盖非对称分布(激活常用)。
- absmax:$s = \max(|x|)/(2^{b-1}-1)$,最简单的定标方式。
量化粒度(精度与开销的权衡):
| 粒度 | 说明 | 精度 |
|---|---|---|
| per-tensor | 整个张量一个 scale | 最省,最容易被离群值毁掉 |
| per-channel | 每个输出通道一个 scale | 权重量化常用 |
| per-group | 每 128 个元素一组一个 scale | GPTQ/AWQ 常用,精度/开销折中 |
三、核心难题:激活离群值(Outlier)★
研究发现(LLM.int8() 等):LLM 的激活中存在系统性离群值——极少数特征维度的数值比其他大几十上百倍,且随模型变大越明显。
问题:per-tensor 量化时,离群值把 scale 撑得很大,导致其余正常值被压缩到极少数量化格子里,精度灾难性下降。
三种应对思路,对应三种主流算法:
- 混合精度隔离(LLM.int8()):把离群值那几列单独用 FP16 算,其余 INT8。简单但有效,是 8bit 权重量化的基础。
- 平滑迁移(SmoothQuant):把激活的「难量化」按数学等价迁移一部分到权重上。
- 重要性保护(AWQ):识别并保护对输出影响最大的权重通道。
四、三大主流算法 ★
4.1 GPTQ(权重量化,W4A16)
- 思路:逐层量化,用二阶信息(Hessian 近似)做误差补偿——量化某个权重后,调整同层未量化的权重来抵消引入的误差。
- 特点:只量化权重(激活仍 FP16),4bit 下精度损失很小;需要少量校准数据。
- 适用:追求省显存、单请求/中小并发场景;配 ExLlama/Marlin 等 kernel 提速。
4.2 AWQ(Activation-aware Weight Quantization,W4A16)
- 思路:激活感知——不是所有权重同等重要,通过观察激活分布找出「重要权重通道」(约 1%),对其做缩放保护,使量化后损失最小。
- 特点:不依赖反向/Hessian,量化快;泛化性好,常用于部署;同为 4bit 权重量化,与 GPTQ 是主要竞品。
4.3 SmoothQuant(W8A8)
- 思路:激活难量化、权重好量化,那就把激活各通道的「幅度」按等价变换迁移一部分到权重:$Y = (X,\text{diag}(s)^{-1})\cdot(\text{diag}(s),W)$,让激活变平滑、权重仍可量化。
- 目标:实现权重激活都 INT8(W8A8),从而能用硬件的 INT8 Tensor Core 提吞吐(这是纯权重量化做不到的)。
- 适用:高并发、追求吞吐的服务化场景。
面试对比:GPTQ/AWQ 是 W4A16(省显存、提 decode 速度,但计算仍走 FP16);SmoothQuant 是 W8A8(能用 INT8 算力真正提吞吐)。选哪个取决于瓶颈是显存还是算力。
五、W#A# 命名法与选型
| 方案 | 权重 | 激活 | 收益 | 场景 |
|---|---|---|---|---|
| W16A16 | FP16 | FP16 | 基线 | — |
| W8A8 | INT8 | INT8 | 用 INT8 算力提吞吐 | 高并发服务(SmoothQuant) |
| W4A16 | INT4 | FP16 | 省显存、提 decode 速度 | 显存受限、中小并发(GPTQ/AWQ) |
| W4A8 / W4A4 | INT4 | INT8/4 | 更激进 | 前沿探索,精度挑战大 |
| FP8(E4M3) | FP8 | FP8 | 新硬件原生支持,精度好于 INT8 | H100/新卡训练+推理 |
FP8 是趋势:Hopper/Blackwell 原生支持,动态范围比 INT8 好,DeepSeek-V3 等已用 FP8 训练。
六、KV Cache 量化
长上下文/高并发时,KV Cache 显存可能超过权重本身。对 KV Cache 做量化(如 KV8、KV4)能显著提升最大并发数:
- Key/Value 分别量化,通常 per-token 或 per-channel。
- 收益:直接增大可容纳的并发请求数(KV Cache 是并发上限的主因)。
- 风险:KV 量化过激进会伤长上下文准确性,需评估。
- 与架构手段互补:MQA/GQA/MLA 从结构上减小 KV(见 Attention 与变体、推理优化与部署)。
七、PTQ vs QAT
| PTQ(训练后量化) | QAT(量化感知训练) | |
|---|---|---|
| 做法 | 训练完直接量化,用少量校准数据 | 训练/微调时插入伪量化节点,让模型「适应」量化 |
| 成本 | 低(几分钟~小时) | 高(要训练) |
| 精度 | 好(GPTQ/AWQ 已很强) | 更好,尤其极低比特 |
| LLM 现状 | 主流(大模型重训代价太高) | 少用,多见于极低比特或小模型 |
大模型因为重训昂贵,几乎都用 PTQ;QAT 更多出现在端侧小模型或 4bit 以下的探索。
八、工程落地建议
- 先定瓶颈:显存不够 → W4A16(AWQ/GPTQ);吞吐不够且有 INT8 算力 → W8A8(SmoothQuant)或 FP8。
- 务必评估精度:量化后跑业务评测集(不只看 PPL,要看真实任务指标),对比 FP16 基线。
- 配套 kernel:量化收益要靠高效 kernel 兑现(Marlin、Machete、TensorRT-LLM 的量化 kernel)。
- 组合使用:权重量化 + KV 量化 + 连续批处理叠加,收益最大化。
- 别过度量化:4bit 以下、激活低比特容易崩,收益边际递减而风险陡增。
高频追问
- 量化的基本原理? 用低比特整数近似浮点:$x\approx s(q-z)$,scale 定步长、zero-point 定偏移;分对称/非对称、per-tensor/channel/group。
- 大模型量化最大的难点是什么? 激活离群值:少数维度数值极大,撑大 scale 导致 per-tensor 量化精度崩,需混合精度/平滑/重要性保护应对。
- GPTQ 和 AWQ 区别? 都是 W4A16 权重量化:GPTQ 用 Hessian 做逐层误差补偿;AWQ 靠激活分布识别并保护 ~1% 重要权重通道,更快、部署友好。
- SmoothQuant 解决什么问题? 把激活的量化难度按等价变换迁移到权重,实现 W8A8,从而用 INT8 算力提吞吐——纯权重量化做不到这点。
- W4A16 和 W8A8 该选哪个? 瓶颈是显存/decode 速度选 W4A16;瓶颈是吞吐且硬件有 INT8/FP8 算力选 W8A8/FP8。
- 为什么要量化 KV Cache? 长上下文高并发时 KV Cache 占显存超过权重,量化它能直接提升最大并发;但过激会伤长文本精度。
- PTQ 和 QAT 什么区别,大模型用哪个? PTQ 训练后直接量化(便宜、主流),QAT 训练时感知量化(精度更好但要重训);大模型因重训昂贵几乎都用 PTQ。
- 量化一定要验证什么? 用真实业务评测集对比 FP16 基线(PPL 不够,要看下游任务指标),并确认有配套高效 kernel 兑现速度收益。