SmoothQuant的原理?为什么能同时保持权重和激活的量化精度?SmoothQuant的原理?为什么能同时保持权重和激活的量化精度?
权重通常分布平滑、易量化;激活(尤其大模型里)动态范围大、 outlier 多,直接 INT8 量化激活会严重掉点。SmoothQuant 通过「迁移」一部分数值范围到权重,让激活更平滑、权重略「变难」但仍在可量化范围内,从而同时保持权重与激活的量化精度。
用数学等价变换:把激活的 scale 乘到权重上。设 Y = XW,令 X' = X/diag(s),W' = diag(s)W,则 X'W' = XW 不变。选 s(per-channel 或 per-token)使得 X' 的幅值变小(平滑激活)、W' 的幅值变大但在可接受范围,再对 X'、W' 分别量化,推理时先 dequant 再乘或直接 INT8 乘后按 scale 还原。
s 的选取常用激活的绝对值最大值或百分位数估计,有时结合一层内权重范数做平衡。实现上在量化前对线性层做一次离线或校准阶段的 scaling,推理仍是标准 linear + 量化。大模型 LLM 里 SmoothQuant 常与 per-channel 权重量化、per-token 激活量化配合,显著降低激活量化误差。
| 实现:s 按 channel 或 token 用激活幅值(如 max | X | )估计;推理保持数学等价,可与 per-channel/per-token 量化组合。 |
| 返回模块 | 返回总览 |