← 返回题目列表

什么是大模型量化?INT8、INT4 和 GPTQ、AWQ 有什么区别?

高频 困难 第 10 / 25 题 更新于 2026/08/03
模型量化INT8INT4GPTQAWQ

简化版

量化把模型权重(或激活)从 FP32/FP16 这样的高精度,压缩到 INT8、INT4 这样的低比特表示,用比例因子 scale + 零点 zero_point 把浮点映射成整数,从而省显存、省带宽、加快推理INT8/INT4 描述的是位宽(每个数用几位);GPTQ、AWQ 是两种训练后权重量化方法——GPTQ 侧重「量化后补偿误差」,AWQ 侧重「保护对输出最重要的权重通道」。量化只降精度、不减参数个数(减参数是剪枝/蒸馏的事)。

详细版

量化的核心是一个映射:

量化:  q = round(x / scale) + zero_point
反量化:x ≈ scale × (q − zero_point)

scale 决定量化步长,zero_point 对齐零位。常见分类:

  • PTQ(训练后量化):训练完直接量化,成本低,主流;
  • QAT(量化感知训练):训练时模拟量化误差,精度更好但成本高;
  • Weight-only:只量化权重,激活保留高精度(如 W4A16);
  • W8A8:权重和激活都 8 位,硬件支持好时吞吐高;
  • W4A16:权重 4 位、激活 16 位,大幅省显存,大模型部署常见。

GPTQ 用少量校准数据 + 近似二阶信息,逐列量化并补偿未量化权重的误差;AWQ 观察激活分布、保护对输出影响大的权重通道再量化。效果取决于模型、任务、校准数据、分组大小、硬件内核,不能只看位宽

完整版教学

一、量化为什么能加速:省的是显存和带宽

大模型推理常被显存容量内存带宽卡住(尤其 Decode 阶段,见推理板块)。降低位宽直接带来三重收益:

7B 模型权重存储:
  FP16:7e9 × 2 字节 = 14 GB
  INT8:7e9 × 1 字节 = 7 GB
  INT4:7e9 × 0.5 字节 = 3.5 GB
  • 权重更小 → 同一块 GPU 能装更大模型或更多并发;
  • 每次读取的数据更少 → 访存受限的 Decode 直接提速;
  • 若硬件有对应低精度计算内核 → 矩阵运算吞吐也能提升。

注意易错点:实际压缩达不到理论倍数——还要存 scale、zero_point、元数据,且 Embedding、归一化、输出头等敏感层常保留高精度,所以 INT4 权重通常是「约 1/4」而非精确 1/4。

二、量化的数学:一个手算例子

量化就是把连续浮点「装进」有限的整数格子。看一个对称量化到 INT4 的例子(INT4 对称范围 −7…7):

一组权重范围 [-0.8, 1.2],取绝对值最大 1.2:
  scale = 1.2 / 7 ≈ 0.171
量化 x = 0.5:
  q = round(0.5 / 0.171) = round(2.92) = 3
反量化:3 × 0.171 = 0.513  → 误差 |0.513 − 0.5| = 0.013

可以看到量化的本质是「四舍五入到最近的格子」,误差来自舍入。格子越少(位宽越低),步长 scale 越大,误差越大——这就是 INT4 比 INT8 更容易掉精度的根源。

三、对称 vs 非对称、以及量化粒度

对称量化:zero_point 固定为 0,scale = max(|x|)/(2^(b-1)-1),实现简单、计算友好,适合以 0 为中心的分布(如权重)。非对称量化:用 zero_point 覆盖 [min, max],更好处理偏斜分布(如经过 ReLU 的激活恒非负),但运算更复杂。

量化粒度决定 scale 算在多大范围上:

粒度scale 作用范围误差元数据开销
per-tensor整个张量一个 scale最大最小
per-channel每个输出通道一个
per-group每 128 个权重一个最小最大

粒度越细,越能贴合局部分布、误差越小,但要存更多 scale。大模型 INT4 常用 per-group(group_size=128) 做平衡。

四、GPTQ 的思路:量化后补偿误差

GPTQ 属于训练后权重量化,核心是「量化一部分、补偿剩下的」。它用校准样本估计每层的输入,借助近似二阶信息(Hessian) 衡量「量化某个权重会给输出带来多大误差」,然后:

逐列量化权重 → 每量化一列,就调整"尚未量化"的权重来抵消刚引入的误差
(思想源自 OBQ/最优脑量化:让量化误差对最终输出的影响最小)

这样即便压到 INT4,输出误差也被逐步补偿掉,适合离线压缩。它不是某种固定文件格式,实现上还涉及分组、激活重排序、推理内核兼容。

五、AWQ 的思路:先保护重要通道

AWQ(Activation-aware Weight Quantization)的关键观察是:只有极少数权重通道对输出特别重要,而重要性可以从激活幅度看出来(激活大的通道对应的权重更关键)。它的做法:

1. 从激活分布找出"显著通道"(salient channels);
2. 对这些通道的权重做等价缩放(放大权重、相应缩小激活),保护它们不被量化误差伤到;
3. 再执行低比特量化。

AWQ 不需要反向传播、不需要二阶信息,比 GPTQ 更轻量。简要说对比:GPTQ 是”量化后补偿误差”,AWQ 是”量化前保护要害”。选哪个看目标硬件、推理框架和实测质量。

六、常见误区与追问

  • 误区:量化减少了参数数量。 不,它只降每个参数的位数(精度),参数个数不变;减参数是剪枝/蒸馏的事。
  • 误区:位宽越低越好。 INT4 比 INT8 省一半,但误差更大,数学/代码/长上下文/长尾知识更易退化。
  • 误区:困惑度没怎么变就说明没损失。 困惑度不敏感,但具体能力(推理、代码)可能明显退化,要测真实任务。
  • 追问:GPTQ 和 AWQ 核心区别? GPTQ 逐列量化 + 二阶误差补偿;AWQ 激活感知 + 保护显著权重通道再量化。
  • 追问:为什么激活比权重难量化? 权重静态、离线可校准;激活随输入变化且含离群值(outlier),量化难度大。
  • 追问:per-group 量化为什么好? 更细粒度贴合局部分布、降误差,代价是多存 scale(group_size=128 是常见平衡)。
  • 追问:KV Cache 能量化吗? 能,独立量化 KV 可在长上下文/高并发时省显存。

七、加强记忆

量化记「低比特映射 + 只降精度不减参数」:核心公式 q=round(x/scale)+zero_point,位宽(INT8/INT4)决定格子多少、误差大小(7B:FP16≈14GB→INT8≈7GB→INT4≈3.5GB)。两种主流权重量化钉死区别——GPTQ「量化后用二阶信息补偿误差」,AWQ「量化前按激活保护重要通道」。三个易错点:量化不减参数(减参数靠剪枝/蒸馏)、激活比权重难量化(有离群值)、困惑度不变≠能力不掉(要测真实任务)。位宽像每个参数的包装盒,盒子越小越省,但跑得快不快、答得准不准还看硬件和校准。