在参数量超过67亿的大模型中,Transformer每层的激活输出会稳定地出现少量(约0.1%)绝对值巨大的特征维度,这些异常值的幅度可达普通值的100倍以上。它们对模型性能至关重要,但会拉伸量化范围导致大量正常值被压缩到无效区间,直接量化会造成严重的精度崩塌。这一现象在LLaMA、OPT、BLOOM等各类架构中普遍存在。
LLM.int8()由Tim Dettmers等人于NeurIPS 2022提出,核心思路是将矩阵乘法分解为两部分:从输入激活中分离出包含异常值的列(约占1-2%),这部分保持FP16精度计算;剩余98%-99%的正常值用INT8量化计算;最后将两部分结果相加。该方法几乎无损地保持了模型精度,但由于需要动态识别异常值并进行分解,推理速度可能不会比FP16更快,主要收益在于减少激活值的内存占用。
SmoothQuant(MIT韩松实验室,ICML 2023)提出了更优雅的解决方案:既然权重易于量化(分布均匀)而激活难以量化(存在离群点),就通过数学等价变换将激活的量化难度迁移到权重端。具体做法是引入按通道的平滑因子s,将原始矩阵乘Y = X·W变换为Y = (X·diag(s)^(-1)) · (diag(s)·W),其中α控制迁移强度(通常0.5-0.75)。变换后激活的异常值被大幅平滑,权重仍保持较均匀的分布,从而实现W8A8全INT8量化,在OPT-66B上精度损失仅0.6%,推理加速1.56倍。
AWQ(Activation-aware Weight Quantization,MLSys 2024最佳论文)从另一个角度解决异常值问题:不是所有权重都同等重要。AWQ根据激活值的大小识别出约1%的"关键权重",对它们乘以缩放因子进行特殊保护后再量化,其余99%的权重正常量化。这种方法无需重新训练,产生的量化格式对硬件友好,在边缘GPU上可实现3倍以上加速。与SmoothQuant将难度迁移到权重不同,AWQ直接在量化过程中保护重要信息,两者思路互补。