OmniQuant 想回答一个很尖锐的问题:能不能在 PTQ 的时间和数据开销内,拿到 QAT 的精度?
它的答案是”冻结权重、只学少量量化参数”。具体来说,OmniQuant 不动原始 FP16 权重,而是引入两组可学习参数——可学习权重裁剪(LWC) 调整权重的量化范围,可学习等价变换(LET) 把激活的离群值搬去权重侧——在一个逐块量化误差最小化的框架里用普通 SGD 优化。所有学到的参数最后都能被吸收进权重量化,因此部署时不增加任何算子或参数。
本文基于 arXiv:2308.13137(ICLR 2024 正式版)。作者来自上海 AI Lab OpenGVLab 与香港大学:Wenqi Shao、Mengzhao Chen、Zhaoyang Zhang、Peng Xu、Lirui Zhao、Zhiqian Li、Kaipeng Zhang、Peng Gao、Yu Qiao、Ping Luo(通讯)。代码在 OpenGVLab/OmniQuant。文中数值均标注为论文报告结果。
先给结论
LLM 量化的两个难点是明确的:激活存在离群通道,权重里少数关键值难以低比特表示。OmniQuant 的做法是把这两件事都交给可微优化,而不是手工设计迁移强度或缩放系数:
- LWC 不直接学裁剪阈值,而是学上下界的裁剪强度 ,让权重范围自己收缩到更易量化的区间。
- LET 用逐通道的缩放 和平移 做数学等价变换,把激活的量化难度转移到权重上——而权重侧刚好有 LWC 兜底。
- 两者都放在逐块框架里,冻结权重、只优化极少数参数,所以单张 A100-40G 就能在 1–16 小时内量化 LLaMA-2 全家族(7B–70B),只用 128 条校准样本。
效果上,论文报告在 W4A4 下 LLaMA-1-7B 的六任务平均准确率 52.65%,明显高于 SmoothQuant 的 38.41% 和 Outlier Suppression+ 的 48.43%,甚至比 QAT 方法 LLM-QAT 高 6.22 个点;W2A16 这种极端位宽下,GPTQ 会把 LLaMA-13B 的困惑度炸到 5500,OmniQuant 是 13.21。
框架:冻结权重,逐块做误差最小化
之所以不能照搬 AdaRound/BRECQ,是因为它们要优化的变量太多(每个权重一个舍入决策),在数十亿参数上不可行。OmniQuant 的出发点是:不学权重,只学少数几个量化参数。目标函数是逐块的输出重构:
其中 是一个 transformer block 的映射, 分别是权重、激活量化器, 是 LWC 的参数, 是 LET 的参数。算法按 transformer block 顺序逐个处理:量化完第 块,再用它的量化权重去算第 块的输入。
flowchart TD
A["取一个 transformer block (W, X)"] --> B["用当前 Theta1 做 LWC 裁剪权重"]
B --> C["用当前 Theta2 做 LET 等价变换"]
C --> D["量化权重与激活 -> 前向"]
D --> E["与 FP16 block 输出比较, SGD 更新 Theta1, Theta2"]
E --> F{"该 block 收敛?"}
F -- 否 --> B
F -- 是 --> G["冻结该 block, 处理下一块"]
冻结权重带来的好处是双重的:优化变量极少(只占每层几个通道向量),所以能用最简单的 SGD 收敛;同时因为只调整量化参数,学到的缩放、平移、裁剪强度都能被折叠回原权重,量化后的模型和普通量化模型结构完全一致。
LWC:学的是裁剪强度,不是阈值
权重侧的问题是在极低比特下离群值把动态范围撑大。OmniQuant 的 LWC 写成:
- 是位宽, 是归一化尺度, 是零点;
- 是上界和下界的裁剪强度,用 sigmoid 参数化使其恒在区间内,可学习;
- 时退化成标准 MinMax 量化,所以它是从 MinMax 出发只微调”裁多少”,优化难度低。
这里的设计选择很关键:论文指出直接照搬 PACT、LSQ 那类”学裁剪阈值”的方法效果并不好,改成学裁剪强度(相对 的比例)更容易优化,也更贴近 MinMax 的初始化。
上图把 LWC 画在权重分布上:灰色虚线是原始 ,红色虚线是学习到的 与 ,两端阴影是被截断的离群尾部。因为 可学习,保留范围会自己收缩到让 4-bit 网格更贴合主体分布的位置。
LET:把激活离群搬到权重侧
激活侧的问题是离群值集中在固定通道(systematic outlier)。SmoothQuant 用一个人为设定的迁移强度把难度搬去权重,Outlier Suppression+ 用 grid search 找缩放。OmniQuant 把这类等价变换也做成可学习的。以线性层为例:
是逐通道缩放, 是逐通道平移。变换后对 和 做量化:
它之所以”免费”,是因为 里的缩放和平移可以被吸进前一层的归一化或线性层, 可以融回原始权重, 也可以折进 bias。所以等价变换降低了量化误差,却不引入额外参数或算子。
上图概括 LET 的分工:激活 里少数通道是离群值,等价变换 、 把难度转移到权重 ,而权重侧正好由 LWC 兜底。因为 可折叠进前一层和原始权重,这一步不引入额外参数或算子。
注意力部分同理。为了让 KV cache 也能低比特,论文把 都纳入量化,自注意力亲和矩阵的等价变换写成:
的缩放可以吸进 query、key 投影权重; 的显式变换被省略,因为输出投影的逆变换已经逐通道改变了它。两个实现细节值得记:
- LET 用在所有线性层,但第二层 FFN 除外——因为非线性之后的特征很稀疏,会带来不稳定梯度。
- Softmax 输出保持全精度,因为其长尾分布不适合均匀量化。
实验证据
设置(论文 4.1):校准集是 WikiText2 随机采的 128 条 2048-token 片段;AdamW、零 weight decay;LWC 学习率 5e-3、LET 学习率 1e-2;batch size 1,训练 20 个 epoch(W2A16 用 40);单张 A100-40G。权重默认 INT4/INT3/INT2 per-channel,激活 per-token;g128 表示 group size 128。
权重专用量化(WikiText2 困惑度,越低越好,摘取论文 Table 1):
| 模型 / 配置 | FP16 | RTN | GPTQ | AWQ | OmniQuant |
|---|---|---|---|---|---|
| LLaMA-1-7B, W4A16 | 5.68 | 6.43 | 6.13 | 6.08 | 5.86 |
| LLaMA-1-13B, W2A16 | 5.09 | 6.8e4 | 5.5e3 | — | 13.21 |
| LLaMA-1-7B, W2A16 g128 | 5.68 | — | 44.01 | 2.6e5 | 9.72 |
| LLaMA-2-70B, W4A16 | 3.31 | 3.67 | 3.58 | — | 3.47 |
位宽越低,OmniQuant 相对 GPTQ/AWQ 的优势越大,这是论文反复强调的点,也是 LWC 的用武之地。
权重+激活量化(六任务零样本平均准确率,越接近 FP16 越好,摘取论文 Table 2):
| 模型 | FP16 | SmoothQuant | LLM-QAT | OS+ | OmniQuant |
|---|---|---|---|---|---|
| LLaMA-1-7B, W4A4 | 64.09 | 38.41 | 41.27 | 48.43 | 52.65 |
| LLaMA-1-13B, W4A4 | 66.33 | 49.36 | — | 49.86 | 54.37 |
| LLaMA-1-30B, W4A4 | 67.44 | 44.83 | — | 52.62 | 56.63 |
| LLaMA-1-65B, W4A4 | 71.04 | 47.71 | — | 52.52 | 59.22 |
上图把 7B 的 W4A4 结果并排看:OmniQuant 52.65% 明显高于 SmoothQuant(38.41%)、LLM-QAT(41.27%)和 OS+(48.43%),但仍低于 FP16 的 64.09%。这也是本文主张”在 PTQ 预算内逼近 QAT”而非超过全精度的依据。
论文称 W4A4 下平均准确率比对比方法高 +4.99 到 +11.80 个点;7B 上比 QAT 的 LLM-QAT 高 6.22 个点。W6A6 则已经接近无损(7B:63.17 vs 64.09)。
指令微调模型与真实部署:在 LLaMA-2-chat 上用 Vicuna 基准、W3A16g128,论文报告 7B 对 RTN 的胜率 80.3% vs 69.4%,对 AWQ 约 50%。部署侧用 MLC-LLM 在 A100-80G 上跑:LLaMA-7B 的 W4A16g128 权重显存 3.8G、134.2 token/s,对比 FP16 的 12.6G、69.2 token/s;LLaMA-65B 的 FP16 直接 OOM,W4A16g128 可跑到 33.0G、24.3 token/s。
这些证据支持什么
把论文的证据和论断分开看会更清楚:
- 支持:LWC 与 LET 都是可微的、可联合优化;两者都有增益(论文附录消融显示,对 OPT 的权重专用量化两者都用,对 LLaMA 则 LET 增益可忽略、主要靠 LWC)。这属于”干预实验”,能支撑”这两个模块各自有效”的结论。
- 支持:在相同校准预算(128 样本、单卡)下,OmniQuant 在多个位宽、多个模型族上优于 RTN/GPTQ/AWQ/SmoothQuant/OS+。这是受控对比。
- 需谨慎:论文把结果归因于”可微优化 + 更少手工参数”这一因果说法。消融确实隔离了 LWC/LET 的贡献,但”为什么 LET 对 LLaMA 权重专用量化无用、对 OPT 有用”主要是解释,而非被单独验证的机理。W4A4 相对 FP16 仍有明显差距(例如 LLaMA-1-7B 的 ARC-c 只有 31.14 vs 41.46),说明它显著缩小了差距,但没到无损。
局限
- 校准数据在环。 逐块重构依赖代表性样本,校准集分布会影响结果;论文用的是 WikiText2 片段。
- 逐块局部最优。 每块独立最小化输出误差,不保证端到端最优;误差在块间如何累积没有被单独度量。
- W4A4 仍非无损。 相对 FP16 在部分子任务上差距仍在 5–10 个点,不能当成”W4A4 等价 FP16”。
- 速度不均衡。 论文自述 MLC-LLM 对 INT3/INT2 的支持还不成熟(INT3 尤其慢),部署加速主要验证在 weight-only。
- 硬件支持。 W4A4、W6A6 在当时缺乏开箱即用的硬件支持,论文只在 weight-only 上做了真机部署。
一句话总结:OmniQuant 把 LLM 量化的两处难点都变成”少量可学参数 + 逐块 SGD”,从而在 PTQ 的预算内逼近 QAT 精度,并且参数可折叠、部署零开销。
参考
- Shao, W., Chen, M., Zhang, Z., Xu, P., Zhao, L., Li, Z., Zhang, K., Gao, P., Qiao, Y., Luo, P. OmniQuant: Omnidirectionally Calibrated Quantization for Large Language Models, ICLR 2024。
- 官方代码:OpenGVLab/OmniQuant
- 站内相关:FlexRound:把 PTQ 舍入写成逐元素除法
- 站内相关:SeqMSE 原理:用输出重构误差选择量化 Encoding