推理与量化 / 量化方法 原理笔记进阶 6 分钟阅读 查看源文件 ↗

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#

线性层:

Y=WXY=WX

量化后令:

Wq=W+ΔWW_q=W+\Delta W

则输出误差:

ΔY=ΔWX\boxed{\Delta Y=\Delta W X}

两个大小相同的 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 计算类似:

ai=E[∣xi∣]a_i=\mathbb{E}[|x_i|]

若某个 channel 的 aia_i 很大,则对应 weight quantization error 更容易通过 Δwixi\Delta w_i x_i 被放大。

所以 calibration 的作用不是重新学习知识,而是让量化算法看到:模型真实运行时,哪些坐标方向对输出更敏感。


2. 对角缩放的机制#

2.1 核心变换:W→WS,  X→S−1XW\to WS,\;X\to S^{-1}X#

令:

S=diag⁡(s1,s2,…,sd)S=\operatorname{diag}(s_1,s_2,\dots,s_d)

则:

Y=WX=(WS)(S−1X)\boxed{Y=WX=(WS)(S^{-1}X)}

要求每个 si>0s_i>0。因为 SS−1=ISS^{-1}=I,这在实数精确算术下是等价重参数化;有限精度下仍可能有舍入差异。

逐 channel 看:

wi′=siwi,xi′=xisiw_i'=s_iw_i,\qquad x_i'=\frac{x_i}{s_i}

因此:

wi′xi′=(siwi)xisi=wixiw_i'x_i'=(s_iw_i)\frac{x_i}{s_i}=w_ix_i

AWQ 对重要 channel 选择合适的 sis_i,让对应 weights 在进入低比特量化器之前获得更有利的数值尺度。


2.2 为什么浮点等价,量化后却不等价#

Quantizer Q(⋅)Q(\cdot) 包含 rounding / clipping,是非线性的。通常:

Q(WS)S−1≠Q(W)\boxed{Q(WS)S^{-1}\neq Q(W)}

一个极简例子:假设量化步长为 1,

Q(0.4)=0Q(0.4)=0

但先放大两倍:

Q(2×0.4)=Q(0.8)=1Q(2\times0.4)=Q(0.8)=1

再除回去得到 0.50.5。因此:

Q(0.4)=0≠0.5=Q(0.8)2Q(0.4)=0\neq0.5=\frac{Q(0.8)}{2}

AWQ 正是在有意识地利用这种非线性:不改变浮点模型,却改变 quantizer 看到模型时的坐标与 rounding 结果。


2.3 Effective quantization step#

均匀量化可粗略写成:

Q(w)=Δ⋅round⁡(wΔ)Q(w)=\Delta\cdot\operatorname{round}\left(\frac{w}{\Delta}\right)

在最近舍入、没有 clipping/溢出的前提下,单个标量的 rounding error 满足:

∣e∣≤Δ2|e|\leq\frac{\Delta}{2}

对单个乘积 wxwx 的贡献:

∣Δy∣≤Δ2∣x∣|\Delta y|\leq\frac{\Delta}{2}|x|

现在使用 s>1s>1:

w′=sw,x′=xsw'=sw,\qquad x'=\frac{x}{s}

若 scaled weights 的 quantization step 为 Δ′\Delta',则:

∣Δy′∣≤Δ′2s∣x∣|\Delta y'|\leq\frac{\Delta'}{2s}|x|

因此从原始 weight 坐标看,这个 channel 的 effective quantization step 是:

Δeff=Δ′s\boxed{\Delta_{\text{eff}}=\frac{\Delta'}{s}}

对完整输出,需要对各 channel 的误差贡献求和(或分析其相关性),不能直接把单项界当作整个线性层的界。单个 channel 的有效分辨率改善条件是:

Δ′s<Δ\boxed{\frac{\Delta'}{s}<\Delta}

也就是说,虽然 scaling 可能让整个 group 的 quantization step 变大,但只要 Δ′\Delta' 增长得没有 ss 那么快,这个重要 channel 的有效分辨率就提高了。


3. 数值例子与分组效应#

3.1 数值例子#

假设某个 quantization group 的最大绝对 weight:

wmax⁡=1.0w_{\max}=1.0

对称 INT4 粗略有:

Δ=17≈0.143\Delta=\frac{1}{7}\approx0.143

其中一个重要 weight:

wi=0.05,xi=10w_i=0.05,\qquad x_i=10

直接量化:

0.05/0.143≈0.35→00.05/0.143\approx0.35\rightarrow0

所以输出误差:

Δyi=−0.05×10=−0.5\Delta y_i=-0.05\times10=-0.5

现在令:

si=4s_i=4

则:

wi′=0.2,xi′=2.5w_i'=0.2,\qquad x_i'=2.5

若 group 最大值仍由其他 weight 的 1.01.0 决定,Δ′≈0.143\Delta'\approx0.143。此时:

0.2/0.143≈1.4→10.2/0.143\approx1.4\rightarrow1

量化值约为 0.1430.143,scaled weight-space error 为:

ei′=0.143−0.2=−0.057e_i'=0.143-0.2=-0.057

它甚至比原来的 0.050.05 更大,但最终输出误差:

Δyi′=−0.057×2.5≈−0.143\Delta y_i'=-0.057\times2.5\approx-0.143

从 −0.5-0.5 降到约 −0.143-0.143。

此时:

Δeff=0.1434≈0.036\Delta_{\text{eff}}=\frac{0.143}{4}\approx0.036

相当于这个重要 channel 获得了一张更细的量化网格。

AWQ 的目标不是让 scaled weights 本身在欧氏距离上最接近原 weight,而是让量化后的 layer output 更接近原模型。


3.2 为什么和 group-wise quantization 强相关#

如果每个 weight 都有独立 quantization scale,那么 w→sww\to sw 往往会让自己的 step 同比例变成:

Δ′≈sΔ\Delta'\approx s\Delta

于是:

Δ′s=Δ\frac{\Delta'}{s}=\Delta

几乎没有收益。

AWQ 能重新分配 quantization resolution,一个重要前提是多个 weights 共享量化参数,例如:

[w₁ w₂ ... w₁₂₈] → one shared quantization scale

如果只放大其中某些重要 channel,而它们尚未改变整个 group 的最大动态范围,那么 Δ′≈Δ\Delta'\approx\Delta,但这些 channel 的 effective step 变成 Δ/s\Delta/s。

因此 AWQ 可以理解成:重新分配有限 INT4 levels 的预算,让对输出更敏感的 channel 得到更多有效 resolution。


3.3 为什么不能无限放大 salient channel#

如果 sis_i 太大,被放大的 weight 可能成为整个 quantization group 的新最大值。

例如原本 wmax⁡=1w_{\max}=1,而 wi=0.05w_i=0.05。若 si=40s_i=40:

wi′=2w_i'=2

它会把整个 group 的 quantization range 拉到 2:

Δ′=27≈0.286\Delta'=\frac{2}{7}\approx0.286

这个 channel 自己可能仍获得高精度,但其他没有 scaling 的 weights 全部面对更粗的 grid。

因此存在 trade-off:

保护 salient channels↔扩大 group range、伤害其他 weights\boxed{\text{保护 salient channels}\leftrightarrow\text{扩大 group range、伤害其他 weights}}

AWQ 需要寻找适中的 scaling,而不是无限放大。


4. 缩放搜索与几何解释#

4.1 Activation-aware scaling 与搜索#

一种直观参数化是:

si=aiαs_i=a_i^\alpha

aia_i 来自 calibration activation statistics,α\alpha 控制 activation magnitude 对 scaling 的影响程度。

α=0\alpha=0 时 si=1s_i=1,相当于不进行 activation-aware scaling。随着 α\alpha 增大,salient channels 得到更强保护,但也更可能扩大 weight range。

概念上的 reconstruction objective 可以写成:

S∗=arg⁡min⁡S∥WX−Q(WS)S−1X∥F2\boxed{S^*=\arg\min_S\left\|WX-Q(WS)S^{-1}X\right\|_F^2}

这体现了 AWQ 的真正目标:寻找一个对低比特 quantizer 更友好的等价参数化。


4.2 AWQ = diagonal preconditioning#

从数学上看:

WX=(WS)(S−1X)WX=(WS)(S^{-1}X)

可以理解为在量化前改变参数空间的坐标系:

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 为什么 SS 选择对角矩阵#

数学上,对于任意可逆矩阵 SS:

WX=(WS)(S−1X)WX=(WS)(S^{-1}X)

都成立。但对角矩阵位于表达能力与部署成本之间非常有利的位置。

令 hidden dimension 为 dd。

对角 SS#

S=diag⁡(s1,…,sd)S=\operatorname{diag}(s_1,\dots,s_d)

存储:

O(d)O(d)

对单个 token 应用 S−1xS^{-1}x 是逐 channel scaling,计算为 O(d)O(d);nn 个 token 则为 O(nd)O(nd)。更重要的是,这类 scaling 很容易 absorb / fuse 到相邻 LayerNorm、Linear 或其他参数中,因此 runtime overhead 可以很低。

一般 dense 可逆矩阵#

若 S∈Rd×dS\in\mathbb{R}^{d\times d},存储和一般矩阵乘计算都变成:

O(d2)O(d^2)

例如 d=8192d=8192 时,一个 dense 8192×81928192\times8192 矩阵约有 6700 万个元素,仅 FP16 存储就约 134 MB。

所以 diagonal SS 不只是“存储少”,还具有:逐 channel、结构规则、计算低、易 fusion,并且不会破坏硬件友好的规则低比特 weight layout。


5. 旋转方法与延伸#

5.1 如果用正交矩阵:从 scaling 到 rotation#

若使用正交矩阵 RR:

RTR=I,R−1=RTR^TR=I,\qquad R^{-1}=R^T

同样有:

WX=(WR)(RTX)\boxed{WX=(WR)(R^TX)}

但 RTXR^TX 不再是逐 channel scaling,而是 rotation / basis change:

xi′=∑jRjixjx_i'=\sum_j R_{ji}x_j

每个新 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 例子保持平方范数 400.06400.06;不能随意写一组较小数字来表示“旋转后”。

但 naive dense rotation 需要 O(d2)O(d^2) 存储和计算,部署成本明显更高。


5.2 Structured rotation:更强表达能力与低成本之间#

正交 rotation 不一定必须显式存一个 dense d×dd\times d 矩阵。如果选择有结构的正交变换,例如 Hadamard transform,可以利用快速算法把计算降到近似:

O(dlog⁡d)O(d\log d)

同时避免存储完整 O(d2)O(d^2) 参数。

因此可以看到一条自然的设计谱系:

变换选项(自由度不同,并非严格包含关系)

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 之间搜索平衡

最值得记住的三个式子:

ΔY=ΔWX\boxed{\Delta Y=\Delta W X}

WX=(WS)(S−1X)\boxed{WX=(WS)(S^{-1}X)}

Δeff=Δ′s\boxed{\Delta_{\text{eff}}=\frac{\Delta'}{s}}

以及一个统一直觉:

AWQ 不改变模型要计算的函数,而是在量化前做一次 activation-aware 的 diagonal preconditioning,让 quantizer 在一个更合适的坐标系里工作。

参考资料#

AWQ 原论文、官方实现。本文的 SS 优化式是概念目标,实际算法在受限参数化上搜索 scale,并可能配合 clipping;不能将其当作任意矩阵的全局最优解。

相关阅读路线

理解低比特推理 ↗