模型部署与推理优化

AWQ:激活感知的权重量化

kp-008核心20 分钟02-量化压缩

一句话定义

AWQ 观察到约 1% 对应大激活的"显著权重"决定了大部分量化精度,它不改混合精度,而是通过每通道缩放把显著权重"平移进量化网格的密处",实现 4-bit 近无损。

为什么重要

AWQ 提供了与 GPTQ 互补的思路:不追求逐权重的误差最优解,而是找到并保护少数关键权重。它无需反传、对校准集不敏感、量化速度快,已成为 vLLM 等引擎开箱即用的默认选项之一,也是理解"激活分布决定量化难度"这一核心事实的最佳案例。

前置知识

  • kp-005、kp-006(量化噪声、分组、离群值问题)。

核心概念

  • 显著权重(salient weight):对应激活幅度大的输入通道的权重列。跳过它们(留 FP16)可大幅降误差,但混合精度破坏了 kernel 效率。
  • 等效缩放变换:对激活按通道乘 s、对权重按通道除 s,数学上输出不变:Y = X·diag(s)·diag(s)⁻¹·Wᵀ = XWᵀ。缩放后量化的是"被除过的 W",显著权重被压小,落入 4-bit 网格误差更小的区域。
  • s 的求解:不用反传,对每组候选 s 做 grid search,最小化量化后输出与原输出的差距(可用一两层代表性数据)。
  • 与剪枝无关:AWQ 不丢弃任何权重,只是缩放——这一点常被误读。

原理与机制

AWQ 把"保护重要权重"从存储侧(混合精度)搬到数值侧:利用 X·diag(s)·diag(s)⁻¹W = XW 的等价变换,用激活统计出的 s 把显著权重缩进量化误差小的区域,s⁻¹ 则在反量化时折算进 scale,运行时零额外开销。于是既不需要混合精度 kernel,也不需要反传,一次 grid search 即可完成——代价是 s 只能近似最优。

公式与模型

优化目标:

s^* = arg mins ‖ Q(W · diag(s)) · diag(s)-1 X - WX ‖

直觉:Q(·) 引入的量化噪声方差 ≈ s²/12(相对被缩放后的权重分布),缩放使大权重相对变小、量化相对误差下降,而 diag(s)⁻¹ 在推理期被折进反量化里不占额外计算。

直观类比

网格刻度固定时,把最重的货物先拆分成两件中等重量再过秤,读数误差就小得多——总重量(模型输出)没变,秤(量化网格)也不用换。

实例或案例

实践对比(W4-G128,7B):AWQ 与 GPTQ 的困惑度通常同档接近;AWQ 量化一次仅需数分钟且换校准集结果稳定,GPTQ 在精心调校(act-order 等)后可略优。生产选择建议:求稳、求快、通用分发选 AWQ;追求极限精度且有校准经验选 GPTQ。

常见误区

  • "AWQ 是按激活大小做剪枝":不是剪枝,是缩放;权重一个不少。
  • "AWQ 量化的是激活":名字里的 activation-aware 指"感知激活分布",实际被量化的仍是权重(W4A16)。
  • "有了 AWQ 就不用管分组粒度":g=128 分组、scale 存储、反量化 kernel 这些机制(kp-006)AWQ 完全继承。

自测题

  1. AWQ 保护显著权重的方式是什么?为什么不用混合精度?

要点:每通道缩放把它们移入量化误差小的区域;混合精度破坏 kernel 统一性与访存效率。

  1. 写出 AWQ 的等效变换,并说明为什么输出不变。

要点:X·diag(s) 与 diag(s)⁻¹W 相乘时 s 与 s⁻¹ 抵消。

  1. AWQ 与 GPTQ 的核心机制差异?

要点:AWQ 改变"被量化对象"的分布(缩放),GPTQ 保持分布但做误差反馈。

与其他知识点的关系

kp-007 是同题另解;kp-009 的选型表会用到本页对比结论;kp-022 演示 vLLM 加载 AWQ 模型的参数。

延伸阅读

《AWQ》(Lin 等,2023)第 3 节的"为什么 1% 显著权重就够了"统计实验值得复现一遍。

#AWQ#激活感知#per-channel scaling#离群值