一、背景
- AWQ(Activation-aware Weight Quantization)是一种用于大型语言模型(LLM)的权重量化技术,旨在减少模型大小和加速推理过程,同时保持模型性能。AWQ的核心思想是权重对模型性能的重要性并不相同,因此通过保护更重要的权重(通常是较小的一部分,如0.1%-1%),可以显著减少量化误差。AWQ不依赖于反向传播或重构,有助于保持模型在不同领域和模态上的泛化能力。此外,AWQ还实现了一个高效的推理框架,显著提高了在桌面和移动GPU上的运行速度。
二、引言
- 现状问题
- QAT(量化感知训练)需要高训练成本。
- PTQ low-bit 状态下,精度损失比较大,GPTQ使用二阶信息能一定程度缓解问题,但是容易过拟合,具体表现为重建模型的时候会扭曲分布外域上的学习特征。
- 本文基于权重对LLM效果不是同样的重要的假设,提出AWQ:
- 参考激活值,而不是权重值的方法来进行针对性量化,量化对象还是模型权重。
- 所以,针对不同的权重,缩放范围也不一样,来达到最优量化的效果。
- 本文还实现了一个高效的框架,用于推理,对比HF,实现3倍以上加速,AWQ已经可以用于vLLM、HuggingFace、LMDeploy等推理框架上。
三、实现原理
3.1 初步方案、推论和实验
- 图a:RTN(round-to-nearest quantization),直接四舍五入量化,可以看到效果一般,PPL 43.2。
- 图b:x是激活值,通过发现重要激活值,来找到右边蓝色的salient weights(指在模型中对最终输出或决策具有重要影响的权重)。保留着salient weights的FP16 channel,其他参数都进行了RTN量化,模型效果达到PPL 13.0。但是这种方案对硬件不友好,因为参数是混合精度存储的。
- 图c:方案三,还是对W进行量化,只不过是针对x激活值来进行个性化的量化,所以可以看到右边Q(W)的矩阵,每一行不同颜色,代表每个通道缩放的范围都不一样。下面来看看具体的原理。
- Table1 是通过实验来证明一个结论,基于activation(激活值的大小)来进行进行权重量化,比基于权重W,和random,更接近全是FP16的效果。并且保留0.1%-1%的channel,其他进行量化,模型效果已经十分接近FP16精度的效果。
3.2 对Weight进行放大对量化误差的影响
- 这一段是证明w乘以一个系数s后,量化参数乘以x的结果与原来结果的误差会减少,因为:
- Δ \Delta Δ 与 Δ ′ \Delta' Δ′是约等于关系,因为对小部分W进行scale up,刚好scale上最大的w概率很低,特别是选0.1% - 1%参数的情况下。
- RoundErr中,对数据取round,也可以认为期望值不变,都是0.25。
- 所以两者相乘等于s
- 文中还对不同的s的影响进行统计,可以看到:
- Δ \Delta Δ 变化的比例,s取值越大,变化越大,因为原来不是最大的w,通过乘以s,改变了最大的w,从而影响到 Δ \Delta Δ
- s取1.5、2、4等值的时候,只有4使得 Δ \Delta Δ / Δ ′ \Delta' Δ′的偏离1太多,此时PPL反而上升了,文中解释是因为使得非重要权重的量化损失过大。
3.3 个性化权重
- 下面应该是本文原理最重要的部分,讲解了怎样进行个性化的量化。
- 首先最直观的方法就是定义一个目标loss,使得量化前后的WX差异越小越好,但是因为量化函数无法求导,所以无法使用原始的反向梯度传播方法来优化。有一些近似梯度的方法,但是也会面临收敛不稳定的问题。
- 为了使得过程更加稳定,文章提出了一种最直观的方法,s只跟激活值相关,同时引入超参数
α
\alpha
α,来平衡重要显著的通道和非显著通道。意思就是通过在一个数据集上,
s
x
s_{x}
sx直接跟激活值x相关,搜参最优
α
\alpha
α来找到最好的
s
x
a
s_{x}^{a}
sxa组合,从而使得quantization error的MSE最小化。这种方法不依赖回归和反向传播,也不容易过拟合,因为只是借助calibration set来确定不同channel的“显著性”。
今天先写到这,后续有时间再补充上实验和应用部分,欢迎关注。