AWQ:让大模型 4-bit 量化几乎不掉点的「激活感知」策略
AWQ(Activation-aware Weight Quantization)是大模型权重量化的代表性方法,把权重压到 4-bit 几乎不掉点。 核心洞察:不是所有权重通道都同等重要,激活大的「显著通道」权重量化误差会被放大,必须重点保护。 用 per-channel scaling 把显著通道在量化前放大、反量化时缩回,等效于给重要通道更高精度,实现简单、硬件友好。
一句话结论
AWQ 发现大模型里只有约 1% 的权重通道对精度真正关键(那些激活幅度大的「显著通道」),于是用 per-channel scaling 在量化前把它们放大、反量化时缩回——等效给重要通道更高精度,让 4-bit 量化几乎不掉点,且实现简单、kernel 友好。
背景问题
大模型推理的最大成本是显存。一个 70B 模型 FP16 要 140GB 显存,单卡装不下;即便用更小的模型,KV cache 和权重的显存压力也限制并发和吞吐。
量化是最直接的省显存手段:把权重从 FP16 压到 INT8 甚至 INT4,显存减半再减半。70B INT4 只要 ~35GB,能塞进单卡。
量化分两类:
- 量化感知训练(QAT):训练时就模拟量化,精度最好但要重新训练,成本高。
- 训练后量化(PTQ):拿现成模型直接量化,无需训练,方便。但精度损失大,是工程上的痛点。
朴素 PTQ(round-to-nearest,RTN)的问题:把所有权重一视同仁地量化到 4-bit,显著掉点——尤其是大模型,4-bit RTN 在很多任务上明显劣化。
GPTQ 是早期改进:用二阶信息(Hessian)逐层补偿量化误差,效果好但实现复杂、对校准数据敏感。社区需要一种更简单、更稳、kernel 更友好的 4-bit PTQ 方案。AWQ 就是冲着这个目标来的。
核心思路
AWQ 的起点是一个朴素但关键的观察:不是所有权重通道都同等重要。
在 LLM 的某一层,少数权重通道(约 1%)的「激活幅度」远大于其他通道。这些通道对应的权重如果量化误差大,会被大激活放大,严重影响输出。
换句话说,量化误差的「实际危害」= 误差本身 × 激活幅度。激活大的通道,即使量化误差和别人一样大,危害也被放大。
朴素想法:对显著通道用更高精度(如 FP16),其他通道用 4-bit——混合精度。但这破坏了 tensor 的均匀性,kernel 实现复杂、推理慢。
AWQ 的巧妙转换:用 per-channel scaling 等效实现混合精度,但保持权重量化后的均匀格式。
设某通道权重为 $w$,激活为 $x$。我们想保护这个通道。引入一个 scale $s > 1$:
- 量化前:把 $w$ 乘以 $s$ → $w’ = s \cdot w$。$w’$ 的值域被放大,量化到 4-bit 后相对误差变小。
- 量化:$\hat{w}’ = \text{Quant}(s \cdot w)$。
- 反量化:恢复 $w$ 的等效值 → $\hat{w} = \hat{w}’ / s$。
- 前向:原本 $y = w \cdot x$,现在等效为 $y = \hat{w} \cdot x = (\hat{w}‘/s) \cdot x = \hat{w}’ \cdot (x/s)$。
也就是说:权重侧放大 $s$ 倍、激活侧缩小 $s$ 倍,乘积不变。但权重的量化精度提升了(因为放大后值域更宽、相对量化误差更小),代价是激活侧缩了 $s$ 倍——而激活通常是 FP16 存储,缩小不引入量化误差(只是数值变小,可能有精度损失但不致命)。
这就是 AWQ 的核心:把「保护权重精度」转换成「scale 操作」,权重仍是均匀 4-bit,激活仍是 16-bit,kernel 无需支持混合精度。
剩下的工程问题变成:怎么找到每个通道的 $s$?
AWQ 的做法:
- 用一小批校准数据(如 128 条文本)跑前向,统计每层每个通道的激活幅度。
- 对显著通道(激活大的)选较大的 $s$,对其他通道选较小的 $s$(接近 1)。
- 用网格搜索或解析公式找最优 $s$(平衡权重量化误差和激活精度损失)。
校准数据不需要和训练数据一致,少量通用文本即可,这让 AWQ 的部署门槛很低。
关键技术点
1. 「显著通道」是稀疏的
AWQ 的关键经验发现:大模型里只有约 0.1%~1% 的通道是显著的(激活幅度远超平均)。保护这 1% 就能保住绝大部分精度。这是为什么 AWQ 用很小的代价(少量 scaling)就能拿到接近 FP16 的效果。
2. 为什么不直接「冻结显著通道用 FP16」
理论上可以,但:
- 混合精度 tensor 让 kernel 实现复杂(要分支处理不同精度)。
- 显存访问模式不连续,访存效率下降。
- AWQ 的 scale 方案保持权重统一 4-bit,kernel 简单、访存连续,推理速度反而更快。
这是「等效转换」比「直接实现」更优的典型——保持数据格式均匀,把差异藏进 scale。
3. W4A16:权重 4-bit、激活 16-bit
AWQ 的标准配置是 W4A16(weight 4-bit, activation 16-bit)。原因:
- 权重大、激活小,量化权重收益最大。
- 激活量化(尤其动态激活)误差难控,INT8 激活就容易掉点,更别说 INT4。
- 推理时大模型是 memory-bound,权重从 HBM 搬运的量减半再减半,带宽红利直接转化为吞吐。
W4A16 是当前大模型推理量化的甜点配置,AWQ 是其中最流行的方法之一。
4. 不需要二阶信息,比 GPTQ 简单
GPTQ 要算 Hessian 逆、逐列补偿,实现复杂、对校准数据顺序敏感。AWQ 只需统计激活幅度、找 scale,流程简单、稳定、可复现。这是它能在工程上快速铺开的原因。
5. 配合 group-wise 量化进一步提精度
AWQ 常配合 group-wise 量化(如每 128 个权重一组、共用一个 scale)而非 per-tensor。group-wise 让 scale 更细粒度地匹配权重分布,精度更高,代价是多了少量 scale 元数据。这是 W4A16 在精度上接近 FP16 的关键组合。
效果与局限
效果:
- AWQ 4-bit 在 Llama、Mistral、Vicuna 等模型上,相比 FP16 质量损失通常 < 1%(在标准 benchmark 上),远优于 RTN,与 GPTQ 持平或略优。
- 显存压缩到约 1/4(W4A16 相对 FP16),单卡能装下更大模型或更高并发。
- 推理加速主要来自显存带宽:权重搬运量减 1/4,memory-bound 场景吞吐提升明显(1.5~3 倍,取决于模型和硬件)。
- 已被 vLLM、TensorRT-LLM、llama.cpp、MLC-LLM 等主流推理框架原生支持,部署门槛极低。
局限:
- 只量化权重,激活仍 FP16。在 compute-bound 场景(短序列、大 batch)加速有限;AWQ 的红利主要在 memory-bound 的长上下文、小 batch 推理。
- 校准数据仍有影响。虽然不敏感,但极端不匹配的校准数据会让显著通道识别偏差,影响精度。生产部署建议用领域相关数据校准。
- 4-bit 是甜点,再往下(3-bit、2-bit)掉点加剧。AWQ 在 4-bit 上表现好,更低 bit 需要更复杂方法(如 AQLM、QQQ)。
- 不改变 KV cache。AWQ 量化的是权重,KV cache 仍按原精度存——长上下文场景的 KV cache 压缩要靠 MLA、GQA、KV 量化等独立手段。
- 和量化感知训练仍有差距。追求极致精度(如 4-bit 几乎零损失)时 QAT 仍优于 PTQ,AWQ 是「无需训练」前提下的最优解之一。
谁该关心
- 部署大模型的工程师:AWQ 是把 70B 模型塞进单卡的实用手段,几乎零成本、几乎零损失,是推理部署的默认选项之一。
- 端侧 / 消费级 GPU 部署:4-bit 让 7B~13B 模型能在消费级显卡甚至手机上跑,AWQ 是这条路线的主力。
- 推理框架开发者:W4A16 的 kernel 是基础组件,AWQ 的 scale 格式需要框架原生支持。
- 追求极致成本比的 serving 团队:AWQ + PagedAttention + 投机解码的组合,是把单卡吞吐拉到极限的标准配方。
一个判断:AWQ 不是量化的终点,而是「PTQ 4-bit」这个甜点上目前最稳的解。它的价值在于把 4-bit 量化从「需要调参的玄学」变成「开箱即用的开关」。对绝大多数应用,AWQ 4-bit + 主流推理框架已经是默认起点;只有在对精度极度敏感、或追求 2/3-bit 极限压缩时,才需要往更复杂的方法走。
