0%

AWQ:感知激活值的大模型权重量化压缩与加速 — 深度技术评审

1. 背景故事:为什么大模型太大了?

想象一下,你希望在自己的手机上运行 ChatGPT 级别的 AI——完全离线,不需要网络,不需要云服务器,数据完全保留在本地。这个想法很美好,但现实是:现代大型语言模型(LLM,Large Language Model)体积巨大无比

以 GPT-3 为例:它有 1750 亿个参数。每个参数通常用 16 位浮点数(FP16)存储,每个参数占 2 个字节。算下来,GPT-3 的存储需求是:

1750×108×2 字节=350 GB1750 \times 10^8 \times 2 \text{ 字节} = 350 \text{ GB}

而最顶级的消费级显卡(如 NVIDIA RTX 4090)只有 24 GB 显存,你的手机可能只有 8-12 GB 的总内存。显然,这个问题必须解决。

即使是"小一点"的模型,比如 LLaMA-2-7B(70 亿参数),也需要约 14 GB 的 FP16 存储空间,勉强能放进高端 GPU,但对手机来说完全不可能。

模型量化(Model Quantization) 是目前最有希望的解决方案。核心思路是:把每个权重参数从 16 位数字压缩成 4 位整数——这样就能实现 4 倍压缩。LLaMA-2-7B 就从 14 GB 缩小到约 3.5 GB,一下子变得手机可用了。

但有个大问题:简单粗暴地把 16 位权重转换成 4 位整数(学名叫"就近取整",RTN)会让模型精度大幅下降,生成的文字变得语无伦次。本文要介绍的 AWQ(Activation-aware Weight Quantization,感知激活值的权重量化) 就是来优雅地解决这个问题的——它荣获了 MLSys 2024 最佳论文奖


2. 预备知识:从零开始理解

这一节会从头解释所有必要概念。如果你完全没有机器学习基础,请从这里开始认真读。

2.1 神经网络的权重与矩阵乘法

大型语言模型,从数学角度看,本质上是一长串矩阵乘法的组合。最核心的运算是:

y=Wx\mathbf{y} = \mathbf{W}\mathbf{x}

这里:

  • x\mathbf{x}输入向量——一组代表当前处理内容的数字。比如 LLaMA-2-7B 里,每个"词"被表示成 4096 个数字。
  • W\mathbf{W}权重矩阵——一个巨大的数字网格,是模型在训练时"学到"的知识。一个典型的权重矩阵可能是 4096×40964096 \times 4096,包含约 1600 万个数字。
  • y\mathbf{y}输出向量——计算的结果

模型由成千上万个这样的权重矩阵组成。所有矩阵里的数字加在一起,就是模型的"参数量"——LLaMA-2-7B 有 70 亿个这样的数字。

理解量化的关键:我们对模型做的任何压缩,本质上都是用一个压缩版本 W^\hat{\mathbf{W}}(用 4 位整数存储)替换原来的 W\mathbf{W}(用 16 位浮点数存储),同时让 W^x\hat{\mathbf{W}}\mathbf{x} 尽量接近 Wx\mathbf{W}\mathbf{x}

2.2 浮点数:FP32、FP16 是什么?

计算机用浮点数来近似表示实数,类似科学计数法:3.14×102=3143.14 \times 10^2 = 314。浮点数包含三部分:

  • 符号位(正数或负数)
  • 尾数(有效数字,如 3.14)
  • 指数(2 的幂次)

不同精度格式分配不同的比特数:

格式 总位数 可表示的不同值 用途
FP32 32 位 ~43 亿 训练时常用
FP16 16 位 ~65536 推理、部署
INT8 8 位 256 中等量化
INT4 4 位 16 激进量化
INT3 3 位 8 极端量化

注意 INT4 只能表示 16 个不同的值!把一个拥有 65536 种可能值的 FP16 权重压缩进只有 16 种值的 INT4,必然损失信息。量化研究的核心就是最小化这种损失

2.3 什么是量化(Quantization)?

量化就是把连续的(或高精度的)数值映射到一个低精度的离散集合中。

标准的均匀量化公式是:

Q(w)=ΔRound ⁣(wΔ),Δ=max(w)2N1Q(w) = \Delta \cdot \text{Round}\!\left(\frac{w}{\Delta}\right), \quad \Delta = \frac{\max(|w|)}{2^{N-1}}

各符号的含义:

  • ww:原始权重值(FP16)
  • NN:量化比特数(如 N=4N=4 表示 INT4)
  • Δ\Delta量化步长(相邻量化格点之间的间距)
  • Round()\text{Round}(\cdot):四舍五入到最近整数
  • Q(w)Q(w):量化后的近似值

让我们用一个具体例子来感受。假设 N=4N=4(INT4),有 24=162^4 = 16 个可用值(8-877)。如果权重组的最大绝对值是 max(w)=2.0\max(|w|) = 2.0,那么:

Δ=2.023=2.08=0.25\Delta = \frac{2.0}{2^3} = \frac{2.0}{8} = 0.25

对权重 w=1.7w = 1.7,量化结果是:

Q(1.7)=0.25×Round ⁣(1.70.25)=0.25×Round(6.8)=0.25×7=1.75Q(1.7) = 0.25 \times \text{Round}\!\left(\frac{1.7}{0.25}\right) = 0.25 \times \text{Round}(6.8) = 0.25 \times 7 = 1.75

量化误差 =1.751.70=0.05= |1.75 - 1.70| = 0.05

看起来很小?但这种误差在数十亿个权重中不断叠加,就会导致模型输出质量的显著下降。

2.4 量化误差的本质

通过困惑度(Perplexity,下文详解)来看量化的破坏力:

方法 比特数 OPT-6.7B 困惑度
FP16(全精度) 16 10.86
RTN(就近取整) INT3-g128 23.54
AWQ INT3-g128 11.39

RTN 用 3 比特量化后,困惑度几乎翻倍(从 10.86 到 23.54),意味着模型生成的文字大幅退化。而 AWQ 把困惑度压到 11.39,几乎恢复了 FP16 的水平。

关键在于:量化误差对模型的影响并不均匀。某些权重被量化后会造成灾难性的精度下降,而其他权重则可以被激进量化而基本不影响结果。AWQ 的核心就是找出那些"关键权重"并特别保护它们。

2.5 训练后量化 vs 量化感知训练

量化方法主要分两大类:

量化感知训练(QAT,Quantization-Aware Training):在训练过程中就模拟低精度计算,让模型学会适应量化误差。效果好,但需要完整的训练流程——对 LLaMA-2(在 2 万亿 token 上训练)来说,意味着数周在数千块 GPU 上运行,完全不现实。

训练后量化(PTQ,Post-Training Quantization):对一个已经训练好的模型,用一小批校准数据(通常 128-512 条文本)进行压缩。不需要重新训练。计算成本很低,但技术难度在于如何在不重训的情况下保持精度。

AWQ 是训练后量化方法。它只需要一小批校准数据来测量统计量(每个通道的激活值平均幅度),不需要梯度计算,不需要反向传播。这使得 AWQ 极其快速且泛化能力强。

2.6 仅权重量化 vs 权重+激活量化

另一个重要区别:

W8A8(权重 8 位,激活 8 位):权重和激活值都量化为 INT8,计算也在 INT8 中进行。硬件可以利用快速的 INT8 矩阵乘法单元。代表方法:SmoothQuant。

W4A16(权重 4 位,激活 16 位):只把权重存储为 INT4,激活值保持 FP16。推理时,在矩阵乘法之前把权重即时反量化(dequantize)回 FP16。

为什么 W4A16 有意义?看这个分析:

  • 权重内存:70 亿参数 × 4 位 = 3.5 GB(对比 FP16 的 14 GB)
  • 激活值内存:远小于权重(正比于批大小 × 序列长度 × 隐藏维度)

对批大小为 1 的端侧推理(单个用户),从内存加载权重是主要瓶颈(而不是计算本身)。这叫"内存带宽受限"(Memory-Bandwidth-Bound)。把权重压缩到 4 位,就减少了 4 倍的内存访问量,从而带来接近 4 倍的速度提升。

AWQ 专注于 W4A16 量化——这正是端侧 LLM 部署的最佳选择。

2.7 困惑度:衡量语言模型质量的标准

困惑度(Perplexity) 是评估语言模型质量最常用的指标。直观上,它衡量模型看到真实文字时的"惊讶程度"。

Perplexity=exp ⁣(1Ni=1NlogP(wiw1,,wi1))\text{Perplexity} = \exp\!\left(-\frac{1}{N}\sum_{i=1}^{N}\log P(w_i \mid w_1, \ldots, w_{i-1})\right)

  • 困惑度越低 = 模型越好(模型更自信,更不惊讶)
  • 一个"完美"模型(每次都能猜到下一个词)的困惑度 = 1
  • 在 5 万词汇量里随机猜测的模型,困惑度约 50,000
  • 优秀 LLM 在 WikiText-2 上的困惑度通常在 5-15 之间

把困惑度理解为流畅度的反向指标:困惑度 11 的模型读起来比困惑度 23 的顺畅得多。AWQ 实验的目标就是:在激进的 3 位或 4 位量化后,让困惑度尽量接近 FP16 基准(如 OPT-6.7B 的 10.86)。

2.8 分组量化与逐通道缩放

分组量化(Group Quantization) 把权重矩阵的每一行分成若干小组(如每组 128 个权重),每组独立量化,有自己的缩放系数 Δ\Delta。记法"INT3-g128"表示 3 位量化、分组大小 128。分组越小,精度越高,但需要存储更多缩放系数。

逐通道缩放(Per-Channel Scaling) 是相关概念:对权重矩阵的每个输出通道(每行)用单独的缩放系数,比全局缩放更精细。AWQ 更进一步,对每个输入通道用独立的缩放因子 ss,在量化前把权重缩放,实现激活感知的精细调节。


3. AWQ 的核心思想:大局观

AWQ 基于一个简洁优美的观察,并围绕它构建了整个系统:

LLM 中不是所有权重都同等重要。只需要保护其中约 1% 的"关键权重",就能大幅减少量化误差。更关键的是:识别这些关键权重,不该看权重本身的大小,而该看流经这些权重的激活值的大小。

最直接的保护方法是:把关键权重保留在 FP16,其余量化为 INT4——这就是"混合精度"量化。这确实有效(OPT-6.7B 的 INT3 困惑度从 23.54 降至 13.00),但有致命缺点:硬件讨厌混合精度。真实的 GPU 和 NPU 都针对统一数据类型优化。一个矩阵中 99% 是 INT4、1% 是 FP16,不仅麻烦而且无法获得实际速度提升。

AWQ 的解法:不把关键权重保留在 FP16,而是在量化前对它们进行缩放,再对对应的激活值做相反的缩放。这是一种数学等价变换,它:

  1. 减小关键权重的量化误差
  2. 所有权重保持 INT4(没有混合精度)
  3. 推理时零额外计算开销

缩放因子通过在小型校准集上对激活统计量进行简单的格点搜索来确定——不需要反向传播。


4. 关键洞察:不是所有权重都同样重要

实验验证

作者对 OPT 模型做了以下实验:用 INT3-g128 量化,但保留一小部分权重通道在 FP16,看看有什么效果。

选择方式 保留 FP16 比例 OPT-6.7B 困惑度
全部量化(RTN) 0% 23.54
权重幅度 1% 22.37
激活幅度 1% 11.39
随机选 1% 23.54

三个惊人发现:

  1. 激活幅度选出 1% 的通道保留 FP16:困惑度从 23.54 降至 11.39,几乎恢复 FP16 水平(10.86)
  2. 权重幅度选(直觉上的选法):几乎没什么帮助(22.37)
  3. 随机选:完全无效(23.54)

为什么激活幅度能识别重要权重?

权重矩阵 W\mathbf{W} 中,权重 wijw_{ij} 连接输入通道 jj 和输出通道 ii。这个权重的"重要性"不只取决于 wijw_{ij} 本身,还取决于输入 xjx_j 通常有多大。如果 xjx_j 通常很大,那么 wijw_{ij} 哪怕有一点量化误差,也会被放大:输出误差 =Δwij×xj= \Delta w_{ij} \times x_j,随 xjx_j 的增大而增大。

因此,我们应该通过输入通道 jj 的激活值幅度 xj|x_j| 来判断该通道权重的重要性。对应大激活值的权重通道更"关键"——它们的量化误差对输出的影响更大。

这就是 AWQ 中"激活感知"的含义:用输入激活统计量来指导权重量化决策。


5. AWQ 方法详解

5.1 量化误差的数学分析

AWQ 从严格的数学分析出发。对于仅权重量化的场景,线性层计算:

y=Wx\mathbf{y} = \mathbf{W}\mathbf{x}

量化后,权重变为 Q(w)Q(\mathbf{w}),输出变为 Q(w)xQ(\mathbf{w}) \cdot \mathbf{x}

量化函数:

Q(w)=ΔRound ⁣(wΔ),Δ=max(w)2N1Q(w) = \Delta \cdot \text{Round}\!\left(\frac{w}{\Delta}\right), \quad \Delta = \frac{\max(|w|)}{2^{N-1}}

单个元素的量化误差

Err(Q(w)x)=ΔRoundErr ⁣(wΔ)x(公式 3)\text{Err}(Q(w) \cdot x) = \Delta \cdot \text{RoundErr}\!\left(\frac{w}{\Delta}\right) \cdot x \tag{公式 3}

其中 RoundErr()=Round()()\text{RoundErr}(\cdot) = \text{Round}(\cdot) - (\cdot) 是取整误差,大致均匀分布在 [0.5,0.5][-0.5, 0.5],期望绝对值约为 0.25。

注意两点:

  1. 误差正比于 xx——激活值越大,量化误差越被放大
  2. 误差正比于 Δ\Delta——步长越大,误差越大

这直接解释了为什么大激活值对应的权重通道更关键!

5.2 激活感知缩放技巧

现在假设我们在量化前把权重 ww 乘以一个缩放因子 s>1s > 1,同时把激活值 xx 除以 ss 来补偿:

Q(ws)xsQ(w \cdot s) \cdot \frac{x}{s}

这个变换在没有量化误差时数学上等价于 Q(w)xQ(w) \cdot x,但在量化时行为不同。新的步长变为:

Δ=max(ws)2N1sΔ\Delta' = \frac{\max(|w \cdot s|)}{2^{N-1}} \approx s \cdot \Delta

(近似成立,前提是乘以 ss 不改变哪个元素是最大值)

含缩放的量化误差为:

Err ⁣(Q(ws)xs)=ΔRoundErr ⁣(wsΔ)x1s(公式 3b)\text{Err}\!\left(Q(w \cdot s) \cdot \frac{x}{s}\right) = \Delta' \cdot \text{RoundErr}\!\left(\frac{ws}{\Delta'}\right) \cdot x \cdot \frac{1}{s} \tag{公式 3b}

与公式 3 相比,新误差与旧误差的比值是:

ΔΔ1ssΔΔ1s=1\frac{\Delta'}{\Delta} \cdot \frac{1}{s} \approx \frac{s\Delta}{\Delta} \cdot \frac{1}{s} = 1

乍一看两者相同?但这里忽略了一个关键:RoundErr(ws/Δ)\text{RoundErr}(ws/\Delta')RoundErr(w/Δ)\text{RoundErr}(w/\Delta) 的值是不同的。放大后的权重 wsws 在新的量化格点上的位置不同,可能会更靠近格点,从而减小取整误差。

实验验证(表 2,OPT-6.7B,INT3-g128):

缩放因子 ss WikiText-2 困惑度
s=1s=1(无缩放,RTN) 23.54
s=1.25s=1.25 12.87
s=1.5s=1.5 12.48
s=2s=2 11.92
s=4s=4 12.36(变差了)

s=2s=2 时困惑度从 23.54 降到 11.92,接近混合精度 FP16 的 11.39!

为什么 s=4s=4 反而变差了?

ss 太大时,Δ\Delta 增大,量化变得更粗糙,非关键通道也受到损害。统计显示:s=4s=4 时,21.2% 的权重改变了量化桶(取整到不同的整数),这增大了非关键通道的误差,总体变差。最优的 s=2s=2 在保护关键通道和不损害非关键通道之间取得了平衡。

5.3 自动搜索最优缩放因子

与其为每个通道手动调整缩放因子,AWQ 定义了一个自动搜索流程。

优化目标:找到逐通道缩放向量 s\mathbf{s},最小化量化后的输出重建误差:

s=argminsL(s),L(s)=Q(Wdiag(s))(diag(s)1X)WX(公式 4)\mathbf{s}^* = \arg\min_{\mathbf{s}} \mathcal{L}(\mathbf{s}), \quad \mathcal{L}(\mathbf{s}) = \|Q(\mathbf{W} \cdot \text{diag}(\mathbf{s}))(\text{diag}(\mathbf{s})^{-1} \cdot \mathbf{X}) - \mathbf{W}\mathbf{X}\| \tag{公式 4}

其中:

  • W\mathbf{W}:FP16 原始权重矩阵
  • Q()Q(\cdot):量化函数(INT3 或 INT4)
  • X\mathbf{X}:从校准集收集到的一小批输入激活值
  • diag(s)\text{diag}(\mathbf{s}):逐通道缩放系数构成的对角矩阵
  • 缩放系数作用于权重的列(输入维度),其倒数作用于激活值的行

由于 Q()Q(\cdot) 不可微(包含取整操作),梯度优化不稳定。AWQ 采用简单的格点搜索,在一个紧凑的 1 维搜索空间内寻找最优值。

搜索空间设计:关键通道由大激活幅度标识,AWQ 用每个输入通道的平均激活幅度 sX\mathbf{s}_\mathbf{X} 作为参考基准,搜索最优幂次 α\alpha

s=sXα,α=argminαL(sXα)(公式 5)\mathbf{s} = \mathbf{s}_\mathbf{X}^\alpha, \quad \alpha^* = \arg\min_\alpha \mathcal{L}(\mathbf{s}_\mathbf{X}^\alpha) \tag{公式 5}

直观解释:

  • α=0\alpha = 0:所有通道缩放系数都是 1(不缩放),等同于 RTN
  • α=1\alpha = 1:缩放系数正比于激活幅度,最激进地保护关键通道
  • 最优 α\alpha 通常约为 0.5,在保护关键通道和不损害非关键通道之间取得平衡

α[0,1]\alpha \in [0, 1] 上进行步长 0.05 的格点搜索(共 20 次评估),极其快速——只需要对量化层做正向传播,不需要反向传播。这就是为什么 AWQ 不需要任何训练基础设施就能运行。

推理时如何消除缩放开销?

推理时,应该乘以激活值的 s1\mathbf{s}^{-1}融入到前一层的操作中。比如,如果前一层有偏置项或层归一化,可以把缩放系数吸收进去。这样推理时的额外开销为——量化权重就是带着缩放系数一起存储的。

这个等价变换是 AWQ 对硬件友好的关键:所有权重保持 INT4,没有混合精度,没有额外运算。


6. TinyChat:把 AWQ 搬上真实设备

有了压缩算法只是成功的一半,另一半是如何在真实硬件上跑出实际速度。论文还介绍了 TinyChat,一个专门为 W4A16 量化设计的推理系统,把理论上的内存节省转化为实际速度提升。

为什么内存节省不自动等于速度提升?

W4A16 量化减少了内存(权重只占原来的 1/4),但不自动带来 4 倍速度,原因是现代硬件不直接支持"INT4 权重乘以 FP16 激活"的计算。需要:

  1. 从内存加载 INT4 权重(快,因为只有 4 位)
  2. 即时反量化为 FP16
  3. FP16 权重乘以 FP16 激活

反量化步骤如果做法天真会很耗时。TinyChat 用两个关键技术解决这个问题:

内核融合的即时权重反量化

TinyChat 不把反量化的权重写回 DRAM(那样就把内存节省的好处抵消了),而是把反量化过程直接融入矩阵乘法内核。内核从内存读入 INT4 权重,转为 FP16 寄存器,立即做乘加运算——全程不碰 DRAM 存储反量化后的权重。

在 GPU 上用 CUDA/PTX 实现;在 ARM CPU 上(手机、树莓派、Apple Silicon)用 NEON SIMD 指令实现。

SIMD 感知的权重打包(ARM NEON)

ARM NEON 有 128 位寄存器,可以并行处理多个值。挑战是:4 位权重不按字节对齐,需要特殊处理。

TinyChat 的解法(图 4):

  • 每个 128 位 NEON 寄存器存放 32 个 4 位权重
  • 离线重排:把权重按特定顺序排列,使得一次 128 位 AND 操作加上移位就能解包全部 32 个权重
  • 只需 3 条 SIMD 指令解包 32 个权重(而朴素方案每个权重需要 3 条标量指令)
  • 带来约 1.2 倍的解包速度提升

内核融合(Kernel Fusion)

TinyChat 把多个操作融合进单个 CUDA/NEON 内核:

  • 层归一化:乘法、除法和平方根融合成一个内核
  • 注意力层:QKV 投影和位置编码融合;KV 缓存在注意力内核内直接预分配和更新
  • 好处:减少内核启动开销和中间 DRAM 访问

7. 实验结果

7.1 实验设置与基线

量化设置:仅权重分组量化(INT4 和 INT3,分组大小 128)。记为 W4A16 或 W3A16。

测试模型

  • LLaMA 系列:7B、13B、30B、65B
  • Llama-2 系列:7B、13B、70B
  • OPT 系列:1.3B、2.7B、6.7B、13B、30B
  • Mistral-7B、Mixtral-8x7B(专家混合模型)
  • 指令微调模型:Vicuna-7B、Vicuna-13B
  • 多模态模型:OpenFlamingo-9B、LLaVA-13B、VILA-7B、VILA-13B

基线方法

  • RTN(就近取整):最简单的基线
  • GPTQ:使用二阶 Hessian 信息纠正误差的最强基线
  • GPTQ-R:加了重排序(Reorder)技巧的 GPTQ 增强版

校准数据:Pile 数据集,α\alpha 搜索的格点大小为 20。

评估指标:WikiText-2 困惑度(语言建模任务);GPT-4 评分(指令跟随任务);各专项数据集准确率(多模态、代码、数学)。

7.2 语言模型结果(LLaMA、OPT)

表 4:Llama-2 和 LLaMA 的 WikiText-2 困惑度

模型 FP16 RTN(INT3) GPTQ(INT3) AWQ(INT3)
Llama-2-7B 5.47 6.66 6.43 6.24
Llama-2-13B 4.88 5.52 5.48 5.32
Llama-2-70B 3.32 3.98 3.88 3.74
LLaMA-7B 5.68 7.01 8.81 6.35
LLaMA-13B 5.09 5.88 5.66 5.52
LLaMA-30B 4.10 4.88 4.88 4.61
LLaMA-65B 3.53 4.24 4.17 3.95

关键发现

  1. AWQ 在所有模型和所有规模上一致超越 RTN 和 GPTQ
  2. 在 INT4 量化时,差距较小(所有方法在 4 位时都还不错),但 AWQ 仍最优
  3. 对 LLaMA-7B 使用 INT3 时,GPTQ 表现很差(8.81 困惑度),而 AWQ 达到 6.35——这是因为 GPTQ 过拟合了校准集,泛化能力受损

OPT 模型 展示了类似规律。AWQ 在 INT3-g128 下:

  • OPT-1.3B:16.32(对比 FP16 的 14.62,RTN 的 119.47)
  • OPT-6.7B:11.39(对比 FP16 的 10.86,RTN 的 23.54)
  • OPT-13B:10.56(对比 FP16 的 10.13,RTN 的 46.04)

7.3 指令微调模型(Vicuna)

指令微调模型(fine-tuned 以遵循用户指令)更难量化,因为微调改变了权重分布。作者用 GPT-4 作为评判者,对 80 个问题评分。

Vicuna-7B(INT3-g128,GPT-4 评判)

  • AWQ 在 23 道题上胜出(比 FP16 版本的量化后模型更好),打平 5 题,输 52
  • 相比 RTN:AWQ 多赢 6 题
  • 相比 GPTQ:AWQ 多赢 11 题

"赢"意味着量化后的模型比 FP16 对应版本给出了更好的答案(量化有时可以作为轻微的正则化)。更重要的是,AWQ 相比 RTN 和 GPTQ 输的更少

7.4 多模态模型(OpenFlamingo、LLaVA、VILA)

这是 LLM 量化研究中的首次:把 W4A16 量化应用到视觉-语言模型上。

OpenFlamingo-9B 在 COCO 图像描述数据集上(CIDEr↑,32-shot)

方法 INT4-g128 INT3-g128
FP16 81.70 -
RTN 77.13 64.79
GPTQ 74.98 64.77
AWQ 80.53 74.47

INT4 量化下,AWQ 将精度损失从 4.57 压缩到 仅 1.17 CIDEr 分——实现了 4 倍模型压缩,几乎无损!

VILA-7B 和 VILA-13B 在 11 个视觉语言基准上(表 7):AWQ 在包括 VQAv2、GQA、VizWiz、SQA、POPE、MME、MMB、SEED、LLaVA-bench 和 MM-Vet 在内的所有 11 个基准上一致显示出无损或接近无损的量化效果。

多模态模型的成功表明 AWQ 基于激活值的关键权重检测跨模态泛化——无论模型处理文本还是图像,同一套校准策略都有效。

7.5 代码与数学推理基准

CodeLlama-7b-Instruct 在 MBPP(编程)和 Llama-2 在 GSM8K(数学)上,INT4-g128

模型/基准 FP16 RTN GPTQ AWQ
MBPP pass@1 38.53 37.51 31.97 40.64
MBPP pass@10 49.77 48.49 44.75 49.25
Llama-2-7B GSM8K 13.87 11.07 12.13 13.57
Llama-2-13B GSM8K 26.16 21.23 24.26 25.12
Llama-2-70B GSM8K 56.41 53.98 56.03 56.40

惊人的是,AWQ 在 MBPP 上超越了 FP16 的表现(40.64 vs. 38.53 pass@1)——量化有时可以作为轻微的正则化来提升特定任务性能。对 GSM8K,AWQ 在所有模型规模上几乎匹配 FP16 性能。

7.6 推理加速结果(TinyChat)

RTX 4090(台式 GPU)——token/秒

模型 FP16 (Huggingface) AWQ + TinyChat 加速比
Llama-2-7B 62 194 3.1×
Llama-2-13B 52 110 2.1×
MPT-7B 85 158 1.9×
MPT-30B OOM 49
Falcon-7B 53 53 1.0×

Jetson Orin(移动 GPU)——token/秒

模型 FP16 AWQ + TinyChat 加速比
Llama-2-7B 12 39 3.3×
Llama-2-13B 9 25 2.8×
MPT-30B OOM 12
Falcon-7B 12 38 3.2×

核心成果

  • 在台式和移动 GPU 上一致实现 3-4 倍加速
  • 原本因内存不足无法运行的模型(MPT-30B 在 FP16 下 OOM)现在可以流畅运行
  • Llama-2-70B:可以在单块 NVIDIA Jetson Orin(64GB 内存)上部署,实现了 70B 模型的移动端民主化

VILA 视觉语言模型在多平台上(表 10):

  • VILA-7B:RTX 4090 上达到 155.3 token/秒(FP16 为 81.6),1.9 倍加速
  • VILA-13B:RTX 4090 上达到 102.1 token/秒(FP16 OOM)

8. 局限性与开放问题

AWQ 是一个出色的方法,但有几个值得深入理解的局限性:

8.1 仍需校准数据

AWQ 需要小批量校准数据来测量每个通道的平均激活幅度。虽然数据集很小(16 条 2048 token 的序列,比 GPTQ 的 192 条少 10 倍),但仍然:

  • 需要获取目标领域的代表性数据
  • 对校准分布有轻微依赖

论文图 8(b) 表明 AWQ 对校准分布不匹配的鲁棒性远高于 GPTQ(困惑度增加 0.5-0.6 vs. GPTQ 的 2.3-4.9),但这是程度上的优势,而非彻底消除依赖。

8.2 搜索空间简化

缩放搜索只用单一参数 α\alpha,即 s=sXα\mathbf{s} = \mathbf{s}_\mathbf{X}^\alpha。这把搜索限制在所有可能逐通道缩放向量空间中的一条曲线上。更丰富的搜索空间可能找到更优的缩放,但计算代价更高。

8.3 极低比特量化(INT2)效果有限

在极激进的 2 位量化(INT2)下,AWQ 单独使用效果明显下降,而 GPTQ 基于重建的方法在此有优势。论文表 9 表明,AWQ + GPTQ 组合在 INT2 下取得最佳效果——两者互补,而非竞争。

8.4 生成任务 vs 判别任务

AWQ 主要在生成任务(文本生成、图像描述)上评估。对于分类或嵌入任务,激活幅度启发式的有效性可能不同。

8.5 无正式收敛保证

公式 5 中的搜索是启发式格点搜索。没有理论保证找到的 α\alpha^* 是全局最优的。该搜索在实验上有效,但更严格的理论分析会增强方法的可信度。

8.6 对特殊架构的适用性

某些架构(如使用特殊归一化策略的注意力层)可能有不同的激活分布模式。虽然论文在 Mistral 和 Mixtral(专家混合)上验证了泛化性,但对更奇异的架构,缩放启发式理论上可能失效。


9. 可重现性与代码

AWQ 是实际影响力最大的量化方法之一,有极好的开源支持。

官方实现https://github.com/mit-han-lab/llm-awq

TinyChat:在同一仓库中,支持 CUDA、ARM NEON 和 Apple Metal 后端。

生态系统集成:AWQ 已被几乎所有主流 LLM 服务框架集成:

  • HuggingFace Transformers(AutoAWQForCausalLM
  • NVIDIA TensorRT-LLM
  • Microsoft DirectML
  • Google Vertex AI
  • Intel Neural Compressor
  • Amazon SageMaker
  • vLLM、LMDeploy、FastChat

复现核心实验(论文表 3,OPT-6.7B INT3-g128):

1
2
3
4
5
6
7
pip install awq
python -m awq.quantize \
--model facebook/opt-6.7b \
--bits 3 \
--group-size 128 \
--calib-data pile \
--output opt-6.7b-awq-int3

预期结果:WikiText-2 困惑度约 11.39(RTN 为 23.54,FP16 为 10.86)

核心 AWQ 缩放搜索伪代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def awq_quantize_layer(W, X, bits=4, group_size=128, grid_size=20):
# W: 权重矩阵 [out_features, in_features]
# X: 校准激活值 [in_features, num_samples]

# 计算每个输入通道的激活幅度均值
s_X = X.abs().mean(dim=1) # [in_features]

best_alpha = 0.0
best_loss = float('inf')

# 在 [0, 1] 上格点搜索 alpha
for alpha in [i / grid_size for i in range(grid_size + 1)]:
s = s_X.pow(alpha) # 逐通道缩放 [in_features]

# 缩放权重和激活值
W_scaled = W * s.unsqueeze(0) # [out, in] * [in] → [out, in]
X_scaled = X / s.unsqueeze(1) # [in, samples] / [in, 1]

# 量化缩放后的权重
W_q = quantize(W_scaled, bits, group_size)

# 计算重建误差
loss = (W_q @ X_scaled - W @ X).norm()

if loss < best_loss:
best_loss = loss
best_alpha = alpha

# 应用最优缩放
s_opt = s_X.pow(best_alpha)
W_awq = quantize(W * s_opt.unsqueeze(0), bits, group_size)

# s_opt^{-1} 被吸收进前一层的偏置/缩放中
return W_awq, s_opt

10. 与更大图景的联系:压缩方法全景

AWQ 处于 LLM 压缩方法全景中,与针对不同维度的方法并列存在。

10.1 与 GPTQ 的关系

AWQ 和 GPTQ 都是训练后量化方法,目标相同。主要区别:

方面 AWQ GPTQ
核心原理 激活感知缩放 Hessian 矩阵误差校正
校准数据量 16 条序列 192 条序列
反向传播 不需要 不需要(但用 Hessian)
过拟合风险 较高(见表 4,LLaMA-7B INT3)
是否可组合

两者正交可以组合:论文表 9 显示 AWQ + GPTQ 组合在极低 INT2 量化时优于各自单独使用。

10.2 与 SVD 低秩分解的关系

AWQ 是权重空间压缩方法,通过减少精度来压缩。另一种思路是通过 SVD(奇异值分解)做低秩分解

给定权重矩阵 WRm×n\mathbf{W} \in \mathbb{R}^{m \times n},计算:

WUkΣkVkT\mathbf{W} \approx \mathbf{U}_k \mathbf{\Sigma}_k \mathbf{V}_k^T

其中 kmin(m,n)k \ll \min(m, n) 只保留主要奇异值。方法如 AdaLoRA、ASVD(激活感知 SVD)使用这一原理。

与 AWQ 的联系:ASVD 使用激活统计量的方式和 AWQ 类似——在做 SVD 之前,用激活幅度对 WW 的行列进行缩放,使分解把压缩预算集中在激活幅度较小的方向上。这是同样的"激活感知"原理,应用于不同的压缩基本操作(秩降低 vs. 精度降低)。

核心区别:量化保留矩阵的精确结构但降低精度;SVD 改变矩阵结构(变成两个小矩阵的乘积)但保留精度。对大型模型,量化通常在相同精度下能达到更高的压缩比。

10.3 LLM 压缩方法全景

1
2
3
4
5
6
7
8
9
10
11
12
13
14
LLM 压缩方法
├── 量化(Quantization)
│ ├── AWQ(本文)—— 激活感知权重量化
│ ├── GPTQ —— Hessian 误差校正量化
│ ├── BitNet —— 训练时 1-bit 量化
│ └── SmoothQuant —— W8A8 平滑激活分布
├── 剪枝(Pruning)
│ ├── SparseGPT —— 非结构化稀疏
│ └── Wanda —— 激活权重乘积剪枝
├── 低秩分解(Low-Rank)
│ ├── LoRA/AdaLoRA —— 低秩适配
│ └── ASVD —— 激活感知 SVD
└── 知识蒸馏(Distillation)
└── 训练小模型模仿大模型

AWQ 专注于量化,与剪枝和蒸馏正交——理论上可以组合使用全部三种方法。


11. 总结

AWQ(感知激活值的权重量化)是端侧 LLM 部署领域的标志性贡献。让我们回顾它的核心贡献:

智识洞察:LLM 中权重的重要性由流经它们的激活值决定,而非权重本身。约 1% 的"关键"权重通道——那些对应大幅激活值的通道——承担了量化引起的精度损失的绝大部分。

技术解法:不使用硬件不友好的混合精度,而是应用一种数学等价的逐通道缩放,在均匀 INT4 格式内保护关键权重。缩放因子通过对激活统计量的快速格点搜索确定,无需反向传播。

系统贡献:TinyChat 通过精心设计的内核融合、SIMD 感知的权重打包和平台专属优化,把理论上 4 倍的内存节省转化为现实中 3-4 倍的推理加速。

实际影响:AWQ 现已成为生产系统中 4 位 LLM 量化的事实标准。它让 Llama-2-70B 这个曾经需要 8 块高端 GPU 才能运行的模型,可以在单块移动 GPU(NVIDIA Jetson Orin,64GB 内存)上运行。让 13B 模型可以在 8GB 显存的笔记本 GPU(RTX 4070)上交互式运行。

这篇论文的问题很简单——"哪些权重最重要?"——答案也很简单:看激活值。这就是"激活感知"的精髓,这一原理很可能在未来多年继续引导压缩研究。


评审作者:Zhongzhu Zhou,2026-04-03 论文:AWQ: Activation-aware Weight Quantization for On-Device LLM Compression and Acceleration arXiv: 2306.00978 | MLSys 2024 最佳论文奖