跳至内容
返回

【ICLR 2024】OmniQuant: Omnidirectionally Calibrated Quantization for Large Language Models

2,467 字12 分钟

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 不直接学裁剪阈值,而是学上下界的裁剪强度 γ,β\gamma,\beta,让权重范围自己收缩到更易量化的区间。
  • LET 用逐通道的缩放 ss 和平移 δ\delta 做数学等价变换,把激活的量化难度转移到权重上——而权重侧刚好有 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 的出发点是:不学权重,只学少数几个量化参数。目标函数是逐块的输出重构:

min⁡Θ1,Θ2  ∥F(W,X)−F(Qw(W;Θ1,Θ2), Qa(X;Θ2))∥\min_{\Theta_1,\Theta_2} \; \big\lVert \mathcal{F}(\bm{W},\bm{X}) - \mathcal{F}\big(Q_w(\bm{W};\Theta_1,\Theta_2),\, Q_a(\bm{X};\Theta_2)\big) \big\rVert

其中 F\mathcal{F} 是一个 transformer block 的映射,Qw,QaQ_w,Q_a 分别是权重、激活量化器,Θ1={γ,β}\Theta_1=\{\gamma,\beta\} 是 LWC 的参数,Θ2={δ,s,sa}\Theta_2=\{\delta,s,s_a\} 是 LET 的参数。算法按 transformer block 顺序逐个处理:量化完第 kk 块,再用它的量化权重去算第 k+1k+1 块的输入。

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 写成:

Wq=clamp ⁣(⌊Wh⌉+z,  0,  2N−1),h=γmax⁡(W)−βmin⁡(W)2N−1,z=−⌊βmin⁡(W)h⌉\bm{W}_q = \mathrm{clamp}\!\Big(\Big\lfloor \frac{\bm{W}}{h} \Big\rceil + z,\; 0,\; 2^N - 1\Big), \qquad h = \frac{\gamma \max(\bm{W}) - \beta \min(\bm{W})}{2^N - 1}, \qquad z = -\Big\lfloor \frac{\beta \min(\bm{W})}{h} \Big\rceil
  • NN 是位宽,hh 是归一化尺度,zz 是零点;
  • γ,β∈[0,1]\gamma,\beta \in [0,1] 是上界和下界的裁剪强度,用 sigmoid 参数化使其恒在区间内,可学习;
  • γ=β=1\gamma=\beta=1 时退化成标准 MinMax 量化,所以它是从 MinMax 出发只微调”裁多少”,优化难度低。

这里的设计选择很关键:论文指出直接照搬 PACT、LSQ 那类”学裁剪阈值”的方法效果并不好,改成学裁剪强度(相对 [min⁡,max⁡][\min,\max] 的比例)更容易优化,也更贴近 MinMax 的初始化。

LWC 通过可学习裁剪强度 γ、β 收窄权重范围

上图把 LWC 画在权重分布上:灰色虚线是原始 min⁡(W)/max⁡(W)\min(W)/\max(W),红色虚线是学习到的 βmin⁡(W)\beta\min(W) 与 γmax⁡(W)\gamma\max(W),两端阴影是被截断的离群尾部。因为 γ,β\gamma,\beta 可学习,保留范围会自己收缩到让 4-bit 网格更贴合主体分布的位置。

LET:把激活离群搬到权重侧

激活侧的问题是离群值集中在固定通道(systematic outlier)。SmoothQuant 用一个人为设定的迁移强度把难度搬去权重,Outlier Suppression+ 用 grid search 找缩放。OmniQuant 把这类等价变换也做成可学习的。以线性层为例:

Y=XW+B=[(X−δ)⊘s]⏟X~⋅[s⊙W]⏟W~+[B+δW]⏟B~\bm{Y} = \bm{X}\bm{W} + \bm{B} = \underbrace{\big[(\bm{X}-\delta) \oslash s\big]}_{\widetilde{\bm{X}}} \cdot \underbrace{\big[s \odot \bm{W}\big]}_{\widetilde{\bm{W}}} + \underbrace{\big[\bm{B} + \delta\bm{W}\big]}_{\widetilde{\bm{B}}}

s∈R1×Cins \in \mathbb{R}^{1\times C_{in}} 是逐通道缩放,δ∈R1×Cin\delta \in \mathbb{R}^{1\times C_{in}} 是逐通道平移。变换后对 X~\widetilde{\bm{X}} 和 W~\widetilde{\bm{W}} 做量化:

Y=Qa(X~) Qw(W~)+B~\bm{Y} = Q_a(\widetilde{\bm{X}})\, Q_w(\widetilde{\bm{W}}) + \widetilde{\bm{B}}

它之所以”免费”,是因为 (X−δ)⊘s(\bm{X}-\delta)\oslash s 里的缩放和平移可以被吸进前一层的归一化或线性层,s⊙Ws\odot\bm{W} 可以融回原始权重,B~\widetilde{\bm{B}} 也可以折进 bias。所以等价变换降低了量化误差,却不引入额外参数或算子。

LET 把激活的量化难度搬到权重侧

上图概括 LET 的分工:激活 XX 里少数通道是离群值,等价变换 (X−δ)⊘s(X-\delta)\oslash s、s⊙Ws\odot W 把难度转移到权重 W~\widetilde{W},而权重侧正好由 LWC 兜底。因为 s,δs,\delta 可折叠进前一层和原始权重,这一步不引入额外参数或算子。

注意力部分同理。为了让 KV cache 也能低比特,论文把 Q/K/V\bm{Q}/\bm{K}/\bm{V} 都纳入量化,自注意力亲和矩阵的等价变换写成:

P=Softmax(QKT)=Softmax((Q⊘sa⏟Q~) (sa⊙KT⏟K~T))\bm{P} = \mathrm{Softmax}(\bm{Q}\bm{K}^T) = \mathrm{Softmax}\Big( (\underbrace{\bm{Q}\oslash s_a}_{\widetilde{\bm{Q}}})\, (\underbrace{s_a \odot \bm{K}^T}_{\widetilde{\bm{K}}^T}) \Big)

Q/K\bm{Q}/\bm{K} 的缩放可以吸进 query、key 投影权重;V\bm{V} 的显式变换被省略,因为输出投影的逆变换已经逐通道改变了它。两个实现细节值得记:

  • 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):

模型 / 配置FP16RTNGPTQAWQOmniQuant
LLaMA-1-7B, W4A165.686.436.136.085.86
LLaMA-1-13B, W2A165.096.8e45.5e3—13.21
LLaMA-1-7B, W2A16 g1285.68—44.012.6e59.72
LLaMA-2-70B, W4A163.313.673.58—3.47

位宽越低,OmniQuant 相对 GPTQ/AWQ 的优势越大,这是论文反复强调的点,也是 LWC 的用武之地。

权重+激活量化(六任务零样本平均准确率,越接近 FP16 越好,摘取论文 Table 2):

模型FP16SmoothQuantLLM-QATOS+OmniQuant
LLaMA-1-7B, W4A464.0938.4141.2748.4352.65
LLaMA-1-13B, W4A466.3349.36—49.8654.37
LLaMA-1-30B, W4A467.4444.83—52.6256.63
LLaMA-1-65B, W4A471.0447.71—52.5259.22

LLaMA-1-7B 在 W4A4 下各方法的六任务平均准确率

上图把 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 精度,并且参数可折叠、部署零开销。

参考


分享: