一句话定义
AWQ(Activation-aware Weight AI 词典:Quantization">Quantization,激活感知权重量化)是一种把大模型权重压到 4 位整数的训练后量化方法,核心思路是:先看哪些权重通道真正重要,再单独照顾它们。
为什么不能一视同仁
模型每一层的权重是一个矩阵,量化就是把里面的数值从 16 位浮点塞进 4 位整数——只有十几个档位可用。如果所有值平分这些档位,本来差距细微的权重会被粗糙地压扁。
但权重并非同等重要。数据流过一层时会产生激活值(activation)。如果某个输入通道的激活值普遍很大,那么它对应的那几列权重只要偏一点点,误差就会被这个巨大的激活放大,最终明显影响输出。反过来,激活很小的通道,权重压得糙一些也无所谓。
具体做法
AWQ 先用一小批校准数据(calibration set)跑一遍模型,统计每个输入通道的激活幅度,挑出最重要的那一小撮通道(通常只占百分之几),给它们的权重乘上一个大于 1 的缩放因子 s,同时在激活侧除以 s。这一步在数学上完全等价,但缩放之后,这些重要权重在量化格子里"站得更开",被压扁时的相对误差更小。量化完成后再把缩放还原回去。
打个比方:全班成绩要压成"优/良/中/差"四档,多数人无所谓,但有几个同学靠 0.5 分决定排名。于是先把这几个人分数整体放大十倍再归档,还原时再缩回去——档位还是那么粗,关键差距却保住了。
和邻居的区别
| 方法 | 处理什么 | 怎么找重点 | 需要重训 |
|---|---|---|---|
| AWQ | 权重压 4 位,激活保持 16 位 | 看激活幅度,缩放保护 | 否 |
| GPTQ | 权重压 4 位 | 用二阶信息逐列补偿误差 | 否 |
| SmoothQuant | 主要把激活也压到 8 位 | 把激活的量化难度迁移给权重 | 否 |
| QAT | 任意位宽 | 在训练中让模型自己适应 | 是 |
其中 AWQ 与 GPTQ 最常被拿来比较:两者都是 4 位权重、都不需要重训,差别在于"找重点"的方式——GPTQ 逐列量化并补偿误差,AWQ 则相信激活统计比权重本身更能说明谁重要。
对实际工作的意义
最直接的收益是显存:4 位权重让模型体积大约是 FP16 的四分之一,同一张卡能装下更大的模型,或者同样的模型能跑更多并发。由于激活仍是 16 位,加速主要来自"少读权重"带来的访存节省,而不是算术本身变快。
工程上,AWQ 已经是主流部署格式之一,在 vLLM、TensorRT-LLM 等推理引擎以及 Hugging Face 上都能找到现成的量化模型和开源工具链,基本属于"下载即用"。
需要留意的是,量化终究有损。长上下文、代码、数学推理这类任务上可能出现掉点,上线前最好用自己业务的评测集跑一遍再决定。具体支持哪些模型和硬件,以官方文档为准。
