介绍一下smoothquant

介绍一下AWQ量化

AWQ是一种对大模型仅权重量化方法。通过保护更“重要”的权重不进行量化,从而在不进行训练的情况下提高准确率。AWQ 发现,并非所有 LLM 权重都同等重要,仅保护 1% 的显著权重便能大幅减少量化误差。而要识别显著权重通道,应参考的是激活分布而非权重分布。尽管保留显著权重为 FP16 可以提升量化性能,且不会显著增加模型的总位数,但混合精度的数据类型会使推理系统实现复杂化。

为了避免硬件效率低下的混合精度量化,经过公式推导后,AWQ 采用等效变换来放大显著权重通道,权重W乘以缩放因子s,激活值X除以s,可以减少显著权重的量化误差。但是随着s的增大,非显著通道的相对误差将会增加,这可能会损害模型的整体精度。因此,在保护显著通道的同时还需要考虑非显著通道的误差,找到权重矩阵每一个通道的最佳缩放系数s,使得量化误差最小。

AWQ 统计了各通道的激活值平均值(计算输入矩阵各列绝对值的平均值),将此作为各通道的缩放系数sXs_X。另外,引入一个变量α\alpha用于平衡显著通道和非显著通道,并通过计算不同α\alpha下的MSE损失(浮点结果和量化结果的均方误差),损失最小的就是最佳的α\alpha

s=mean(abs(x))α,α=argminαL(mean(abs(x))α)s = \text{mean}\left(\text{abs}\left(x\right)\right)^\alpha,\quad \alpha^* = \arg \min_\alpha L\left(\text{mean}\left(\text{abs}\left(x\right)\right)^\alpha\right)

AWQ通过在区间[0,1][0,1]上进行快速网格搜索来找到最佳的α\alpha(0 表示不进行缩放;1 表示在搜索空间中最激进的缩放)。该方法实际上就是在 [0,1] 区间平均取 20 个数,0, 0.05, 0.10, 0.15 …… 然后逐个计算不同α\alpha下的 MSE 损失,损失最小的就是最佳的α\alpha。得到最佳α\alpha后,最佳缩放系数s也随之确定。

AWQ 不依赖反向传播或重构,因此可以泛化到不同领域和模态而不会对校准集过拟合。凭借更好的泛化性,它在指令微调语言模型以及多模态语言模型上首次实现了卓越的量化性能,而多模态模型量化是前作 SmoothQuant 没有测试的领域。