Skip to content

量化实战深入(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 个元素一组一个 scaleGPTQ/AWQ 常用,精度/开销折中

三、核心难题:激活离群值(Outlier)★

研究发现(LLM.int8() 等):LLM 的激活中存在系统性离群值——极少数特征维度的数值比其他大几十上百倍,且随模型变大越明显。

问题:per-tensor 量化时,离群值把 scale 撑得很大,导致其余正常值被压缩到极少数量化格子里,精度灾难性下降

三种应对思路,对应三种主流算法:

  1. 混合精度隔离(LLM.int8()):把离群值那几列单独用 FP16 算,其余 INT8。简单但有效,是 8bit 权重量化的基础。
  2. 平滑迁移(SmoothQuant):把激活的「难量化」按数学等价迁移一部分到权重上。
  3. 重要性保护(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# 命名法与选型

方案权重激活收益场景
W16A16FP16FP16基线
W8A8INT8INT8用 INT8 算力提吞吐高并发服务(SmoothQuant)
W4A16INT4FP16省显存、提 decode 速度显存受限、中小并发(GPTQ/AWQ)
W4A8 / W4A4INT4INT8/4更激进前沿探索,精度挑战大
FP8(E4M3)FP8FP8新硬件原生支持,精度好于 INT8H100/新卡训练+推理

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 以下的探索。

八、工程落地建议

  1. 先定瓶颈:显存不够 → W4A16(AWQ/GPTQ);吞吐不够且有 INT8 算力 → W8A8(SmoothQuant)或 FP8。
  2. 务必评估精度:量化后跑业务评测集(不只看 PPL,要看真实任务指标),对比 FP16 基线。
  3. 配套 kernel:量化收益要靠高效 kernel 兑现(Marlin、Machete、TensorRT-LLM 的量化 kernel)。
  4. 组合使用:权重量化 + KV 量化 + 连续批处理叠加,收益最大化。
  5. 别过度量化:4bit 以下、激活低比特容易崩,收益边际递减而风险陡增。

高频追问

  1. 量化的基本原理? 用低比特整数近似浮点:$x\approx s(q-z)$,scale 定步长、zero-point 定偏移;分对称/非对称、per-tensor/channel/group。
  2. 大模型量化最大的难点是什么? 激活离群值:少数维度数值极大,撑大 scale 导致 per-tensor 量化精度崩,需混合精度/平滑/重要性保护应对。
  3. GPTQ 和 AWQ 区别? 都是 W4A16 权重量化:GPTQ 用 Hessian 做逐层误差补偿;AWQ 靠激活分布识别并保护 ~1% 重要权重通道,更快、部署友好。
  4. SmoothQuant 解决什么问题? 把激活的量化难度按等价变换迁移到权重,实现 W8A8,从而用 INT8 算力提吞吐——纯权重量化做不到这点。
  5. W4A16 和 W8A8 该选哪个? 瓶颈是显存/decode 速度选 W4A16;瓶颈是吞吐且硬件有 INT8/FP8 算力选 W8A8/FP8。
  6. 为什么要量化 KV Cache? 长上下文高并发时 KV Cache 占显存超过权重,量化它能直接提升最大并发;但过激会伤长文本精度。
  7. PTQ 和 QAT 什么区别,大模型用哪个? PTQ 训练后直接量化(便宜、主流),QAT 训练时感知量化(精度更好但要重训);大模型因重训昂贵几乎都用 PTQ。
  8. 量化一定要验证什么? 用真实业务评测集对比 FP16 基线(PPL 不够,要看下游任务指标),并确认有配套高效 kernel 兑现速度收益。

基于 MIT 许可发布