AWQ#
本页内容6 个部分
AWQ(Activation-aware Weight Quantization)是一种面向 LLM 的低比特 weight-only PTQ 方法。理解它最有用的视角不是“另一种 INT4 rounding 技巧”,而是:利用 calibration activation 找到对输出更敏感的 input channels,再通过等价的对角缩放,把模型重参数化到一个更适合低比特量化的坐标系。
从这个角度看,AWQ 可以视为一种 quantization-aware diagonal preconditioning / reparameterization。
1. 误差目标与校准#
1.1 从输出误差开始:weight error 不等于 model error#
线性层:
量化后令:
则输出误差:
两个大小相同的 weight quantization error,如果对应 activation magnitude 不同,对 layer output 的影响也完全不同:
weight A error = 0.1, activation = 0.01 → output error = 0.001
weight B error = 0.1, activation = 20 → output error = 2.0
因此真正值得保护的并不一定是绝对值最大的 weight,而是那些与大 activation channel 相乘、其误差会被明显放大的 weight。
input channels
↓
W = [ · · ★ · ]
[ · · ★ · ]
[ · · ★ · ]
[ · · ★ · ]
↑
salient activation
对应的 weight 列
这就是 Activation-aware:activation statistics 告诉量化器哪些 weight channels 更值得保护。
1.2 Calibration:如何知道哪些 channel 重要#
AWQ 不需要重新训练模型。它使用一小批有代表性的 calibration samples 做 forward,观察各层真实 activation 的统计特征。
概念上可为每个 input channel 计算类似:
若某个 channel 的 很大,则对应 weight quantization error 更容易通过 被放大。
所以 calibration 的作用不是重新学习知识,而是让量化算法看到:模型真实运行时,哪些坐标方向对输出更敏感。
2. 对角缩放的机制#
2.1 核心变换:#
令:
则:
要求每个 。因为 ,这在实数精确算术下是等价重参数化;有限精度下仍可能有舍入差异。
逐 channel 看:
因此:
AWQ 对重要 channel 选择合适的 ,让对应 weights 在进入低比特量化器之前获得更有利的数值尺度。
2.2 为什么浮点等价,量化后却不等价#
Quantizer 包含 rounding / clipping,是非线性的。通常:
一个极简例子:假设量化步长为 1,
但先放大两倍:
再除回去得到 。因此:
AWQ 正是在有意识地利用这种非线性:不改变浮点模型,却改变 quantizer 看到模型时的坐标与 rounding 结果。
2.3 Effective quantization step#
均匀量化可粗略写成:
在最近舍入、没有 clipping/溢出的前提下,单个标量的 rounding error 满足:
对单个乘积 的贡献:
现在使用 :
若 scaled weights 的 quantization step 为 ,则:
因此从原始 weight 坐标看,这个 channel 的 effective quantization step 是:
对完整输出,需要对各 channel 的误差贡献求和(或分析其相关性),不能直接把单项界当作整个线性层的界。单个 channel 的有效分辨率改善条件是:
也就是说,虽然 scaling 可能让整个 group 的 quantization step 变大,但只要 增长得没有 那么快,这个重要 channel 的有效分辨率就提高了。
3. 数值例子与分组效应#
3.1 数值例子#
假设某个 quantization group 的最大绝对 weight:
对称 INT4 粗略有:
其中一个重要 weight:
直接量化:
所以输出误差:
现在令:
则:
若 group 最大值仍由其他 weight 的 决定,。此时:
量化值约为 ,scaled weight-space error 为:
它甚至比原来的 更大,但最终输出误差:
从 降到约 。
此时:
相当于这个重要 channel 获得了一张更细的量化网格。
AWQ 的目标不是让 scaled weights 本身在欧氏距离上最接近原 weight,而是让量化后的 layer output 更接近原模型。
3.2 为什么和 group-wise quantization 强相关#
如果每个 weight 都有独立 quantization scale,那么 往往会让自己的 step 同比例变成:
于是:
几乎没有收益。
AWQ 能重新分配 quantization resolution,一个重要前提是多个 weights 共享量化参数,例如:
[w₁ w₂ ... w₁₂₈] → one shared quantization scale
如果只放大其中某些重要 channel,而它们尚未改变整个 group 的最大动态范围,那么 ,但这些 channel 的 effective step 变成 。
因此 AWQ 可以理解成:重新分配有限 INT4 levels 的预算,让对输出更敏感的 channel 得到更多有效 resolution。
3.3 为什么不能无限放大 salient channel#
如果 太大,被放大的 weight 可能成为整个 quantization group 的新最大值。
例如原本 ,而 。若 :
它会把整个 group 的 quantization range 拉到 2:
这个 channel 自己可能仍获得高精度,但其他没有 scaling 的 weights 全部面对更粗的 grid。
因此存在 trade-off:
AWQ 需要寻找适中的 scaling,而不是无限放大。
4. 缩放搜索与几何解释#
4.1 Activation-aware scaling 与搜索#
一种直观参数化是:
来自 calibration activation statistics, 控制 activation magnitude 对 scaling 的影响程度。
时 ,相当于不进行 activation-aware scaling。随着 增大,salient channels 得到更强保护,但也更可能扩大 weight range。
概念上的 reconstruction objective 可以写成:
这体现了 AWQ 的真正目标:寻找一个对低比特 quantizer 更友好的等价参数化。
4.2 AWQ = diagonal preconditioning#
从数学上看:
可以理解为在量化前改变参数空间的坐标系:
original coordinate system
↓
activation-aware diagonal transform S
↓
quantization-friendly coordinate system
↓
INT4
它与数值计算里的 preconditioning 在思想上相似:不改变原问题本身,而是把问题转换成 numerical method 更容易处理的形式。
严格术语上,AWQ 通常称 activation-aware scaling / reparameterization;“diagonal preconditioning” 更适合作为理解它的 mental model,而不是正式算法分类。
4.3 为什么 选择对角矩阵#
数学上,对于任意可逆矩阵 :
都成立。但对角矩阵位于表达能力与部署成本之间非常有利的位置。
令 hidden dimension 为 。
对角 #
存储:
对单个 token 应用 是逐 channel scaling,计算为 ; 个 token 则为 。更重要的是,这类 scaling 很容易 absorb / fuse 到相邻 LayerNorm、Linear 或其他参数中,因此 runtime overhead 可以很低。
一般 dense 可逆矩阵#
若 ,存储和一般矩阵乘计算都变成:
例如 时,一个 dense 矩阵约有 6700 万个元素,仅 FP16 存储就约 134 MB。
所以 diagonal 不只是“存储少”,还具有:逐 channel、结构规则、计算低、易 fusion,并且不会破坏硬件友好的规则低比特 weight layout。
5. 旋转方法与延伸#
5.1 如果用正交矩阵:从 scaling 到 rotation#
若使用正交矩阵 :
同样有:
但 不再是逐 channel scaling,而是 rotation / basis change:
每个新 channel 都是旧 channels 的线性组合。
Rotation 可以混合坐标方向,但保持 L2 范数,不能实现任意非单位对角缩放。两类变换有不同自由度,并不存在严格的包含关系。
例如:
before rotation:
0.1
0.2
20.0 ← concentrated outlier
0.1
after normalized 4×4 Hadamard:
10.2
9.9
-9.9
-10.0
对角 scaling 只能把 20 → 20/s;rotation 则可能把集中在一个 channel 的大值摊到多个维度。
上面的 Hadamard 例子保持平方范数 ;不能随意写一组较小数字来表示“旋转后”。
但 naive dense rotation 需要 存储和计算,部署成本明显更高。
5.2 Structured rotation:更强表达能力与低成本之间#
正交 rotation 不一定必须显式存一个 dense 矩阵。如果选择有结构的正交变换,例如 Hadamard transform,可以利用快速算法把计算降到近似:
同时避免存储完整 参数。
因此可以看到一条自然的设计谱系:
变换选项(自由度不同,并非严格包含关系)
scalar scaling
↓
diagonal scaling ← AWQ 的核心 mental model
↓
structured orthogonal rotation
↓
dense orthogonal / general basis transform
AWQ 选择 diagonal scaling,是在“足够改变 quantization geometry”与“极低部署开销、易于 fusion”之间取一个很实用的平衡点。Structured rotation 则进一步探索:能否用较低成本获得 rotation 对 outlier distribution 更强的整形能力。
5.3 总结#
AWQ 可以浓缩为下面这条逻辑链:
ΔY = ΔW X
↓
activation magnitude 告诉我们哪些 weight errors 更危险
↓
calibration 找 salient input channels
↓
构造 diagonal S
↓
W → WS, X → S⁻¹X
↓
精确算术下函数等价
↓
但 Q(WS)S⁻¹ ≠ Q(W)
↓
重要 channel 获得更小的 effective quantization step
↓
在保护 salient weights 与扩大 group range 之间搜索平衡
最值得记住的三个式子:
以及一个统一直觉:
AWQ 不改变模型要计算的函数,而是在量化前做一次 activation-aware 的 diagonal preconditioning,让 quantizer 在一个更合适的坐标系里工作。
参考资料#
AWQ 原论文、官方实现。本文的 优化式是概念目标,实际算法在受限参数化上搜索 scale,并可能配合 clipping;不能将其当作任意矩阵的全局最优解。