土法炼钢兴趣小组的算法知识备份

【Transformer 与注意力机制】51|量化、蒸馏、剪枝:压缩改变的是三种不同的东西

文章导航

分类入口
transformer
标签入口
#transformer#quantization#distillation#pruning#compression#gptq#awq#kv-cache

Transformer系列导航

按系列顺序继续阅读,而不是停在单篇。

系列目录上一篇:【Transformer 与注意力机制】50|Speculative Decoding:用小模型加速大模型下一篇:【Transformer 与注意力机制】52|可解释性入门:注意力权重真的是“解释”吗

目录

50|Speculative Decoding 讨论的是”少算几步”;这篇讨论的是”每一步算得更省”。量化、蒸馏、剪枝经常被放在同一张 PPT 里,配一句”三种压缩手段各有优劣,按场景选择”,然后列一张对比表。这句话本身没有错,但它掩盖了一个更重要的问题:这三者压缩的根本不是同一个对象。

量化不改变参数数量和计算图,只改变每个数值的编码精度;蒸馏不改变学生模型的结构,只改变训练目标;剪枝直接改变模型的结构本身。三者的误差来源、是否需要重训、失效模式完全不同——把它们当成”三种压缩率不同的选项”来比较,是这篇要纠正的第一个误区。

量化的硬件支持矩阵、数据类型演进(FP8/FP6/FP4/MX 格式)、各推理引擎的量化能力、AutoAWQ/GPTQModel 的具体用法,本站已经在 《量化工程:INT8 / FP8 / FP4 / AWQ / GPTQ》 里详细展开,这里不重复。本篇关心的是更上游的问题:这些方法各自依赖什么假设,假设不成立时会怎样失效,以及蒸馏、剪枝这两个量化之外的压缩路线在假设层面和量化有什么本质差异。

读完这篇,你应该能回答三个问题:

  1. 量化、蒸馏、剪枝分别改变模型的哪个对象,为什么不能互相替代评估;
  2. GPTQ、AWQ、SmoothQuant 的核心假设差在哪,而不是”怎么跑起来”;
  3. 为什么 PPL 不变常常不代表压缩安全,什么场景下压缩本身就是错误决策。

一、压缩改变的是三个不同的对象

先把三条路线放在同一个坐标系里比较,而不是各自介绍一遍再说”各有优劣”。

改变的对象 误差/代价来源 是否需要重训 压缩后的产物
量化 数值编码精度 逐元素舍入噪声 通常不需要(PTQ)或轻量校准 同结构、低精度的近似
蒸馏 训练目标 学生容量 + 目标函数选择 需要完整训练 结构可以完全不同的新模型
剪枝 计算图结构 移除后的能力损失 视方法而定,常需继续训练恢复 更小的新模型(非同结构近似)

量化不碰参数数量,也不碰计算图,它做的事情是把一个连续(或高精度离散)数值 \(w\) 映射到量化格点 \(\hat w = s \cdot \mathrm{round}(w/s)\)。这个映射引入的误差 \(e = w - \hat w\) 在均匀量化下近似服从 \([-\Delta/2, \Delta/2]\) 上的均匀分布,方差

\[ \sigma_e^2 = \frac{\Delta^2}{12} \]

其中 \(\Delta\) 是量化步长。这个误差模型不关心某个数值”语义上重不重要”,只关心它的幅度和步长——这解释了为什么量化对 outlier 格外敏感:只要一个通道里出现一个远大于其余数值的 outlier,步长 \(\Delta\) 就要覆盖到它,其余所有数值的舍入误差都会被这一个 outlier 拖累变大。这条数学性质会在第二节反复出现。

蒸馏完全不是数值近似问题。学生模型的层数、宽度、甚至架构(可以是 RNN 蒸馏 Transformer,也可以是小 Transformer 蒸馏大 Transformer)在训练开始前就已经定死,蒸馏改变的只是”用什么目标训练这个已经定好容量的模型”——用 teacher 的输出分布(或中间行为)替代或补充硬标签。它的失败模式不是”数值偏了多少”,而是”学生的目标函数有没有正确表达我们真正想让它学会的东西”,第五节会看到,这个问题在生成式 LLM 上比看起来复杂得多。

剪枝改变的是计算图本身:移除某些权重、head、层或维度之后,模型不再是原模型”同结构、更粗糙”的近似,而是一个新的、更小的函数类里的成员。这一点很容易被”剪枝率”这种说法掩盖——90% 稀疏度听起来像”保留了 10% 的原模型”,但剪枝之后的网络是一个需要重新审视的新模型,不是原模型打了折的版本。

三条路线可以组合,但组合方式暴露了它们数学根源的亲缘关系。SparseGPT(第六节详细展开)在论文摘要里直接写明”compatible with weight quantization approaches”——因为它和 GPTQ 共享同一套基于 Hessian 的误差补偿框架,Frantar、Singh、Alistarh 在《Optimal Brain Compression》(NeurIPS 2022)里把这一点讲得更明确:剪枝(把权重设为 0)和量化(把权重舍入到格点)在数学上都是”用一个受限的权重集合去最小化重构误差”,只是受限集合的形状不同。Sheared LLaMA(第六节)则展示了剪枝和蒸馏在工程上的另一种交汇——把剪枝当成”初始化”,再用类似继续预训练的方式做能力恢复,本质上是”结构继承 + 目标函数式的再训练”。


二、量化里的假设分野:weight-only、GPTQ、AWQ、SmoothQuant

量化不是一个方法,是一组假设不同的方法家族。先分清 weight-only 和 activation quantization 到底在假设什么,再看 GPTQ、AWQ、SmoothQuant 三者假设的分野——这里只讲数学假设的差异,不讲怎么跑通一个量化脚本,那部分见 量化工程

2.1 weight-only 的假设:瓶颈在读,不在算

weight-only quantization 假设自回归 decode 阶段是 memory-bound——每生成一个 token 都要把全部权重从显存读一遍,量化工程 第一节已经用 roofline 模型推过这个结论,这里直接引用:既然瓶颈在带宽,压缩存储侧的数值精度就能直接降延迟,计算前把低比特权重 dequant 回 BF16/FP16 再做乘法,GEMM 本身仍在高精度里跑。这意味着 weight-only 不需要硬件原生支持低精度 Tensor Core,只需要一个够快的 dequant kernel。

它的误差来源单一:只有权重的舍入误差,没有激活误差。这也是为什么 weight-only 在实践里比激活量化容易做到”几乎无损”——不是算法更聪明,是要压缩的对象本身更”温和”。清华大学 Li 等人在《Evaluating Quantized Large Language Models》(ICML 2024,qllm-eval)里给出了具体数字:以 LLaMA2-7B 为例,权重张量的 Kurtosis(峰度,衡量分布尾部厚度)约为 5,激活张量的 Kurtosis 可以超过 1000——两者相差两个数量级。这和 SmoothQuant 论文(Xiao et al., ICML 2023)的观察一致:权重分布”相当均匀平坦”,容易量化;激活里少数通道的幅值可以是其余通道的约 100 倍,这些 outlier 决定了量化难度。

2.2 activation quantization 的假设:对象是动态的

如果目标是连计算本身也吃低比特(用 INT8/FP8 Tensor Core 换算力,不只是换带宽),激活就必须一起量化。但激活的分布随输入变化——这是和权重量化最根本的假设差异:权重量化压缩的对象对所有输入共享、离线一次性确定;激活量化压缩的对象依赖当前输入的分布,理论上每次前向都可能不同。

Dettmers 等人在 LLM.int8()(NeurIPS 2022)里首次系统报告:6.7B 规模以上的模型,约 0.1% 的激活通道幅值是其余通道的 100 到 1000 倍,这些 outlier 通道在几乎所有层里持续出现,且与具体 token 无关(SmoothQuant 论文称之为”outlier 持续出现在固定通道”)。这类结构化但动态的 outlier,是纯 weight-only 方案完全不用面对、但任何 W8A8/W4A4 方案必须正面处理的问题。

2.3 GPTQ、AWQ、SmoothQuant:三种不同的假设,不是三种教程

GPTQ(Frantar et al., ICLR 2023)是纯 weight-only。它的假设是:用一小批校准数据算出的二阶统计——Hessian \(H = 2XX^\top\)\(X\) 是该层校准激活)——足以代表这一层权重的量化误差对输出的影响。据此把量化问题变成逐层最小二乘:

\[ \min_{\hat W} \| WX - \hat W X \|_F^2, \quad \hat W \in \text{QuantGrid} \]

按列贪心量化,每量化一列就用 \(H^{-1}\) 把误差摊到剩余未量化列上做补偿。这套数学不是 GPTQ 原创——它是 Optimal Brain Quantization(OBQ)对 Optimal Brain Surgeon(OBS,第六节会讲它在剪枝史上的位置)框架的推广,GPTQ 的贡献是用 Cholesky 分解和批量处理把 OBQ 的复杂度从”百万参数级几小时”降到”千亿参数级几小时”。它的假设边界很明确:校准数据分布如果和推理时的真实输入分布差得远(比如用通用语料校准,业务场景是罕见领域或小语种),Hessian 统计的代表性会打折扣——这不是 bug,是这套方法从一开始就依赖”校准分布能代表推理分布”这个前提。

AWQ(Lin et al., MLSys 2024)也是 weight-only,但不计算 Hessian,走的是完全不同的假设路径:权重的重要性可以直接由对应输入激活的幅值读出——被大激活通道乘的权重列更敏感。做法是对每个 in-channel 乘一个缩放 \(s_c\)、对应激活除以同一个 \(s_c\)

\[ Y = (W \cdot \mathrm{diag}(s)) \cdot (\mathrm{diag}(s)^{-1} X) = W' X' \]

只量化 \(W'\)\(s_c\) 通过网格搜索最小化量化误差。这个假设比 GPTQ”轻”得多——不需要求逆 Hessian,一次前向校准就够,比 GPTQ 快约 10 倍——但代价是它没有 GPTQ 那种”逐层最优重构”的理论保证,而是依赖一个经验观察:敏感权重集中在少数被大激活通道乘的列。如果某个模型的敏感权重是弥散分布的,不集中在少数通道,AWQ 的收益会打折——这不是假设的证伪,而是假设适用范围的边界。

SmoothQuant(Xiao et al., ICML 2023)针对 W8A8,处理的是权重和激活都要量化时的联合问题。它的假设是:量化难度可以在权重和激活之间无损转移,因为

\[ Y = (X \, \mathrm{diag}(s)^{-1}) \cdot (\mathrm{diag}(s) \, W) = \tilde X \tilde W \]

在数学上和原始 \(XW\) 完全相等,只是重新分配了谁的动态范围大,\(s_c = \max(|X_c|)^\alpha / \max(|W_c|)^{1-\alpha}\)\(\alpha\)(常取 0.5)决定转移多少难度到权重侧。这个假设有一个隐含前提:outlier 通道在权重侧”还有空间”吸收转移过来的难度,而不至于让权重本身变得难压。这个前提在两种情况下会绷不住:

第一,当 outlier 是 Sun 等人(COLM 2024)所称的”massive activation”——幅值可以达到其余值的 \(10^5\) 倍量级,且集中在几个几乎不随输入变化的固定维度上,充当 attention 里的隐式偏置项(第三节详细展开)。这类 outlier 转移到权重侧后,会让原本平坦的权重分布也出现明显的尖峰,SmoothQuant 社区实现里普遍对 FFN 的 down_proj 层单独跳过激活量化或改用逐 token 动态量化,正是因为静态转移在这一层不够用。

第二,当输入是超长上下文或多语言场景时,校准阶段统计到的 outlier 通道分布和真实推理分布不完全重合——这一点和长上下文场景下量化更容易出问题(第七节的实测数字)是同一个假设失效链条上的两端。

一个具体的数字能说明”量化难度不是均匀分布在网络里的”这件事有多极端:qllm-eval 的统计显示,LLaMA2-7B 里 down_proj 输入激活的 Kurtosis 约为 \(1.5 \times 10^5\),而 Q/K/V 投影约为 164,FFN 的 gate/up 投影约为 15——量级差了近三到四个数量级。对应地,同一篇论文报告:对 W4A8 的 LLaMA2-7B,如果对 down_proj 也用静态(离线校准)量化,WikiText PPL 从 FP16 的 11.71 直接崩到 40.78;换成动态(逐 token 在线计算 scale)量化,恢复到 12.51——仅仅调整一个层的量化策略,就能决定整个模型的量化质量是否可用。这不是”调参技巧”,是”量化难度极端集中在少数位置”这个事实的直接体现。


三、同一次压缩,attention、FFN、KV Cache 承受的代价不同

《前馈网络》 已经指出”attention 量化容易、FFN 量化难”,并把原因归结为 FFN 的 \(W_1\) 存在”明星神经元”、对应激活值有长尾。这个观察是对的,但只是故事的一半——上一节的数据已经给出了更精确的定位:真正的极端 outlier 出现在 FFN 的 down_proj 输入,而不是 up/gate 投影;attention 内部权重和激活的敏感位置也不对称。这里把这条线补完。

3.1 参数量的大头在 FFN,敏感位置却不对称

标准 dense Transformer block 里 FFN 约占参数量的三分之二、attention(QKVO)约占三分之一——这是 26-ffn 已经算过的结论。所以 weight-only 量化或剪枝对模型体积的收益主要来自 FFN;但”参数量大”和”量化敏感”是两件不同的事。qllm-eval 对 LLaMA2 家族不同线性层做的统计给出了一个反直觉的结果:attention 输出投影(O)的权重 Kurtosis 在所有线性层里最高(意味着权重侧更需要保留比特),但它的激活 Kurtosis 反而在所有层里最低;FFN 的 down_proj 则完全反过来——权重侧相对平缓,激活侧的 Kurtosis 高出其余层三到四个数量级(上一节的具体数字)。

也就是说,attention 是”权重敏感、激活温和”,FFN(尤其 down_proj)是”权重温和、激活危险”。这解释了为什么 AWQ 类方法(保护敏感权重列)对 attention 更对症,而 SmoothQuant 类方法(转移激活难度)必须对 FFN 的 down_proj 单独处理——两类方法分别在解决两个不同层的问题,不是同一个问题的两种实现。

3.2 massive activation:attention 和 FFN 的量化难点是同一个机制的两次表现

Sun、Chen、Kolter、Liu 在《Massive Activations in Large Language Models》(COLM 2024)里给出了一条更深的解释链:LLM 里存在极少数几乎不随输入变化的”massive activation”,幅值可以比其余激活大 \(10^5\) 倍量级,它们在 attention 计算里起隐式偏置的作用,把注意力概率强行拉向自己对应的 token(这和 17-causal-mask 讨论过的 attention sink 现象紧密相关,massive activation 是 attention sink 的一个更一般的机制解释)。这些几乎恒定的激活沿残差流向下传递,在进入 FFN 的 down_proj 之前被继续放大,成为 down_proj outlier 的直接来源之一。

换句话说,attention 侧的 outlier(拉高注意力集中度)和 FFN 侧的 outlier(拖累 down_proj 量化)不是两个独立问题,是同一个机制——massive activation / attention sink——在残差流不同位置的两次表现。这也是为什么”哪一层该给更高精度”这个问题不能靠直觉猜,需要像 qllm-eval 那样逐层测 Kurtosis。

3.3 剪枝对 attention 和 FFN 的风险不对称

剪枝 FFN 中间维度相对安全——26-ffn 提到的”键值记忆”视角下,\(d_{ff}\) 的每个神经元大致独立地对应一种模式,砍掉一部分接近”缩小字典”,容量平滑下降。剪枝 attention head 的风险更集中:Michel 等人(NeurIPS 2019,Are Sixteen Heads Really Better than One?)已经发现大多数 head 可以在测试时去掉而几乎不影响输出,但少数实现了 induction/copy 一类机制的 head 一旦去掉,影响会显著放大——重要性在 head 之间高度不均匀。这是 Sheared LLaMA 这类结构化剪枝方法必须按打分而不是均匀比例砍 head/层的直接原因,也是52|可解释性入门里”attention weight 不能代表因果贡献”这个结论在压缩场景下的具体后果——你不能只看某个 head 的平均注意力权重高低来决定剪不剪它。

3.4 KV Cache:误差会在自回归链条上累积

KV Cache 不是参数,是运行时状态——每个 token 的 K/V 一旦写入 cache,会被后续所有解码步骤的 attention 反复读取。这带来一个和权重量化本质不同的误差模式:权重量化的误差是每次调用都相同的系统性偏差,不随生成位置累积;KV 量化的误差理论上会在序列变长时被反复引用,越靠前的 token 一旦被污染,影响的解码步数越多(这是一条工程推理,不是某篇论文直接证明的因果链,但和第七节的实测现象方向一致)。

qllm-eval 的实测支持这个方向:多数模型在长文本(≥4k)任务上对 KV Cache 量化的容忍度低于 weight-only 量化,团队据此建议短文本用 W4KV4、长文本换成 W4KV8——KV 精度不能像权重一样一降到底。GQA/MQA 是另一种应对 KV Cache 开销的范式,49|KV Cache 已经讨论过,这里指出它和权重剪枝共享”移除结构而非降低数值精度”的逻辑,作用对象换成了 KV head 数量而不是权重矩阵。


四、4-bit 不等于四分之一延迟

量化工程 第一节用 roofline 模型推出:decode 阶段 memory-bound,权重从 BF16 降到 INT4,理论带宽降到四分之一,延迟理论上也降到四分之一。但同一篇文章的硬件支持矩阵已经指出,实际拿到的通常是 1.5 到 2 倍,不是 4 倍——这里说明断层从哪来,不重复那部分的推导。

第一个断层是 dequant 开销。Ampere、Hopper 上主流的 Tensor Core 路径不支持 INT4 权重和 BF16 激活直接矩阵乘(Blackwell 的 MXFP4 是少数例外),INT4 权重必须先在 kernel 里解压回 BF16/FP16 才能上 Tensor Core——这个 dequant 步骤本身要消耗一部分省下来的带宽收益,这也是为什么”AWQ/GPTQ 在 A100 上拿不到理论 4 倍”是硬件架构层面的限制,不是算法没优化好。

第二个断层是 prefill 阶段是 compute-bound,量化对它的加速有限,甚至如果 dequant kernel 效率不够可能更慢——weight-only 假设本身就是针对 decode 阶段设计的(第二节 2.1),量化收益天然集中在 decode,这一点在选择”要不要量化”时经常被忽略:如果你的业务场景 prefill 占比高(比如长文档一次性摘要,输出很短),量化能拿到的收益会明显小于以”短输入长输出”为主的对话场景。

剪枝有它自己版本的”4bit 不等于四分之一延迟”:50% 非结构化稀疏,在没有对应 sparse kernel 的硬件上等于 0% 实际加速。SparseGPT 论文(Frantar & Alistarh, ICML 2023)摘要明确写道它的方法”generalizes to semi-structured (2:4 and 4:8) patterns”——之所以要专门强调这一点,是因为非结构化剪枝虽然能在更低精度损失下拿到更高稀疏度,但只有 2:4、4:8 这类结构化模式才能吃到 Ampere 起 Sparse Tensor Core 的确定性加速(每 4 个连续权重保证有 2 个零,硬件跳过这些零的乘加)。“剪掉了 50% 的权重”这句话必须先问一句”是不是符合硬件认的稀疏模式”,否则很可能是一个纸面上的数字,推理时这些零仍然被当成普通稠密矩阵参与计算。


五、蒸馏压的是行为:从 forward KL 到 reverse KL 的教训

Hinton、Vinyals、Dean 的经典蒸馏(NeurIPS 2015 workshop)用温度化的 softmax 把 teacher 的输出变成”软标签”,让 student 学习匹配这个软分布。这等价于以 teacher 分布为固定参照、student 为拟合对象,最小化交叉熵——即 forward KL(\(\mathrm{KL}[p_{\text{teacher}} \,\|\, q_{\text{student}}]\) 意义下、以 teacher 为参照分布)。对分类任务这是自然选择:teacher 和 student 面对的都是”一次性给出一个分布”的静态任务,覆盖 teacher 分布的每一部分都是有意义的信号。

生成式 LLM 不是分类。LLM 要自回归地采样很多步,如果直接把分类蒸馏的目标搬过来,forward KL 会逼着 student 尽量覆盖 teacher 分布里的所有众数,包括长尾——具体到生成任务,这意味着 student 会试图学会 teacher 偶尔说出的低概率续写模式,但 student 容量有限,学不好这些长尾,于是在自己实际采样生成时,一旦跑到这些没学好的区域就容易跑偏(exposure bias)。

Gu 等人的 MiniLLM(ICLR 2024)明确指出这个问题,把目标换成 reverse KL:

\[ \theta = \arg\min_\theta \mathrm{KL}[q_\theta \,\|\, p] = \arg\min_\theta -\mathbb{E}_{x \sim p_x,\, y \sim q_\theta}\left[\log \frac{p(y|x)}{q_\theta(y|x)}\right] \]

这里 \(q_\theta\) 是 student、\(p\) 是 teacher,期望是在 student 自己的分布下取的(所以需要 on-policy 的 policy gradient 优化,不能像 forward KL 一样直接在固定数据上算交叉熵)。最小化 reverse KL 会让 \(q_\theta\) 专注 teacher 分布的主要模式、放弃覆盖 teacher 的低概率长尾区域——牺牲多样性换取生成的精确性和校准度,MiniLLM 在 120M 到 13B 的模型规模上验证了这个目标在指令遵循场景下比标准 KD 更稳。

这是一条具体的、可验证的假设—结论链:分类蒸馏隐含”teacher 分布的每一部分都值得学”的假设,生成蒸馏在 student 容量受限时更应该假设”精确覆盖 teacher 的主要模式比覆盖尾部更重要”。搬错目标函数不会在训练时报错——SFT 阶段测出来的 loss 可能一样低——只会在 student 自己生成时才显现问题,这也是为什么直接照搬分类蒸馏脚本训出来的小模型,线下评测正常、线上生成却经常跑偏的一个真实原因。

蒸馏没有改变学生模型的容量假设——它只解决”用什么目标训练一个已经定好大小的模型”,容量上限仍由 student 大小决定。这一点值得和第六节的 Sheared LLaMA 做对照:Sheared LLaMA 走的是”结构从大模型继承(剪枝)+ 少量再训练”,MiniLLM 走的是”结构从零设计 + 蒸馏训练”,两条路线殊途同归,都在用远低于从头训练的算力预算得到一个能打的小模型,只是压缩发生的位置(结构继承 vs 训练目标)不同。

蒸馏的失效模式不止”teacher 的幻觉、偏见会被复制”。当蒸馏链条被拉长——用模型自己生成的数据训练下一代,或者反复用蒸馏出来的模型再去蒸馏更小的模型——Shumailov 等人(Nature 2024, AI models collapse when trained on recursively generated data)证明了一个更一般的现象:递归地用生成模型自己产出的数据训练后续代际,会导致分布尾部(罕见但真实存在的模式)逐渐消失,这个结果在 LLM、变分自编码器、高斯混合模型上都成立。这篇论文证明的是”用生成数据训练生成模型”这个更一般场景下的坍缩,不是专门针对 LLM 蒸馏,但它提示了一个真实的系统性风险:蒸馏链条拉得越长、越依赖模型自产数据,越需要警惕分布尾部悄悄消失,这属于第九节的开放问题之一。


六、剪枝压的是结构:二阶信息是否必要仍是一场争论

6.1 谱系:从 Optimal Brain Damage 到 GPTQ 的同一条数学线

剪枝的数学起点是 LeCun、Denker、Solla 的 Optimal Brain Damage(NeurIPS 1990):用损失函数对权重的二阶导数(Hessian 对角近似)估计”删掉某个权重会让 loss 增加多少”,第一次给了剪枝一个可计算的重要性度量,而不是单纯看权重绝对值大小。Hassibi、Stork、Wolff 的 Optimal Brain Surgeon(IEEE ICNN 1993)把对角近似换成考虑权重间协方差的完整二阶框架——删除一个权重后,用剩余权重的调整去补偿这个删除带来的误差,这套”删除 + 补偿”的逻辑正是第二节 GPTQ 背后 OBQ 框架的直接祖先。这是本文最值得记住的一条谱系:剪枝史上 1990 年代解决”删哪个权重”的数学,2022、2023 年被原样搬去解决”量化到哪个格点”——Frantar、Singh、Alistarh 的《Optimal Brain Compression》(NeurIPS 2022)把这条线挑明:剪枝和量化在数学上是同一个”受限权重集合下最小化重构误差”问题的两个特例。

Han 等人(NeurIPS 2015,Learning both Weights and Connections for Efficient Neural Networks)把剪枝规模化到深度网络,但用的是简单得多的 magnitude pruning + 迭代重训,牺牲了 OBS 式的精确补偿,换取了在大网络上的可行性——“精确二阶补偿”和”规模化可行性”之间的取舍,贯穿了剪枝方法的整个历史,直到 LLM 时代又被重新打开。

6.2 SparseGPT vs Wanda:二阶信息值不值得算,是一场真实的争论

SparseGPT(Frantar & Alistarh, ICML 2023)把 OBS 级别的二阶补偿重新做到 175B 参数规模,把剪枝问题化为大规模稀疏回归,不需要重训就能让 OPT-175B、BLOOM-176B 达到 50% 到 60% 稀疏度,PPL 几乎不变——这是”精确二阶补偿在 LLM 规模上仍然值得做”的证据,论文里的对照也很直接:唯一能扩展到这个规模的一阶基线(magnitude pruning)在超过 10% 稀疏度后精度就开始下降,30% 以上基本崩溃。

Wanda(Sun, Liu, Bair, Kolter, ICLR 2024,全称 Pruning by Weights and Activations)质疑这条路径的必要性:它提出一个不需要 Hessian 的指标——权重幅值乘以对应输入激活的 \(\ell_2\) 范数,单次前向就能算完,不存储、不求逆任何矩阵:

metric = W.abs() * X.norm(p=2, dim=0)

按这个指标逐输出通道排序、砍掉分数最低的一批权重。Wanda 论文在 LLaMA 和 LLaMA-2 系列上报告,这个简单指标在多数常识推理 benchmark 上和 SparseGPT 打平,同时省掉了 Hessian 的存储和求逆,计算成本低一个量级。

这是一个有文献支撑、双方都拿出了实验证据的真实争论:SparseGPT 代表”精确二阶补偿有必要”一派,Wanda 代表”简单激活感知启发式已经够用,二阶信息的边际收益有限”一派。争论没有终结——Wanda 论文主要展示的是中等稀疏度、非结构化场景下的competitive结果;在更苛刻的 2:4、4:8 结构化稀疏,或者更高稀疏度下,SparseGPT 论文本身把这些场景当作重点扩展来讨论,行业内公开的对比也普遍认为在这类更难的场景下精确补偿仍占一定优势。换句话说,“要不要算 Hessian”取决于你要把模型压到多狠,不存在一个通吃所有稀疏度的答案。

6.3 剪枝不是终点,是初始化:Sheared LLaMA 的另一条路

Xia、Gao、Zeng、Chen 的 Sheared LLaMA(ICLR 2024)展示了剪枝的另一种用法:把 LLaMA2-7B 用结构化剪枝(同时砍层、head、FFN 中间维度和 hidden dimension,端到端剪到指定目标形状)压到 1.3B 或 2.7B 之后,不是直接拿去用,而是用动态配比的约 50B token(约为从零训练预算的 3% 到 5%)做继续预训练——数据配比会根据各领域的 loss 下降速度动态调整,避免在已经学得很好的领域上浪费算力。得到的 Sheared-LLaMA 系列在多个下游任务和指令微调评测上超过了同规模从零训练的 Pythia、OpenLLaMA、同期的 TinyLlama。

这条路径的意义是:剪枝提供了一个比随机初始化好得多的起点,“结构继承 + 少量再训练”可能比”从零设计小模型结构 + 蒸馏训练”更省算力——这和第五节 MiniLLM 的路线形成一组有意思的方法论对照,两条路都在解决同一个问题(用更少算力换一个能打的小模型),压缩发生的阶段不同。

6.4 LLM-KICK 给这一节的刹车

Jaiswal 等人的 LLM-KICK(ICLR 2024)系统评测了 SOTA 剪枝和量化方法后指出:所有被测的剪枝方法在知识密集型任务上都出现明显退化,有时在 25% 到 30% 这么低的稀疏度就已经发生,而且 N:M 结构化剪枝在这类任务上普遍表现更差;相对地,量化方法在同等测试里比剪枝更成功。但同一篇论文也给出了一个不该被忽略的正面结果:即便稀疏度达到 50% 以上,剪枝后的 LLM 在 in-context retrieval 和摘要类任务上依然保持稳健。“剪枝安全”高度依赖任务类型,不能一概而论——这个结论会在第七节继续展开。


七、质量评测的陷阱:PPL 不是终点

PPL 衡量的是 next-token 分布相对测试语料的整体拟合优度,对权重扰动敏感,适合当回归测试的初筛信号——这也是为什么几乎每篇量化/剪枝论文都会先报一个 WikiText PPL。但它是所有 token 上的平均,容易被”大多数简单 token 预测正确”掩盖”少数关键 token(实体、数字、格式符、否定词)预测错误”的代价:一个整体 PPL 几乎不变的模型,完全可能在决定答案对错的那几个 token 上系统性变差。

Jaiswal 等人的 LLM-KICK(ICLR 2024)的核心论点正是这个:当前 SOTA 压缩方法能做到 50% 到 60% 稀疏度或 3 到 4 bit、PPL 几乎不变,但这个被广泛质疑的简单指标掩盖了真实能力变化,他们据此提出专门测知识密集型任务、推理、生成、in-context retrieval、摘要的 LLM-KICK 基准(上一节已经引用了它对剪枝的结论,量化方法在同一套测试里普遍比剪枝更鲁棒,但依然不是无损)。

Li 等人的 qllm-eval(ICML 2024)从另一个维度补充:把”涌现能力”拆成 Instruction-Following、In-Context Learning、Multi-Step Reasoning、Self-Calibration 四类分别测,发现数学类多步推理和 self-calibration 对量化的容忍度明显低于前两类,尤其在小于 13B 的模型上。他们进一步把 GSM8K 上的错误归类为四种——逐步逻辑错误(约占 50%)、计算错误(约占 20%)、复制错误、条件遗漏——指出低比特量化主要破坏的是”保持正确推理逻辑”的能力,不是笼统意义上的”变笨”。这类失败在整体准确率上可能只表现为几个百分点的下降,但错误性质完全不同:一个模型是”偶尔算错一步”还是”推理链条本身失去逻辑”,对需要可信推理链的场景(比如金融、法律场景下要求模型给出可核验的推导过程)意味着完全不同的风险。

qllm-eval 还揪出一个更反直觉的现象:在小模型上做 weight-only 量化后,原本会拒答的一些伦理敏感问题反而开始给出具体回答——相当于绕过了对齐训练建立的拒答边界;而对同一批小模型做 KV Cache 量化,模型却变得更倾向于拒答更多问题,输出更受限。量化对拒答/安全行为的影响方向甚至和”压的是权重还是 KV”有关,不是一个简单的”精度越低越不安全”的单调关系。PPL 或常规下游任务指标完全不会捕捉到这种变化——这是”压缩后必须重新走一遍安全评测”最直接的实证依据,不是工程师的经验之谈。

长上下文是另一个 PPL 完全看不见的维度。Mekala 等人(EMNLP 2025)在 Llama-3.1(8B/70B)、Qwen2.5(7B/32B/72B)五个模型、FP8/GPTQ-int8/AWQ-int4/GPTQ-int4/BNB-nf4 五种量化方法、9.7K 条长输入(≥64K token)与长输出测试样本上做的系统评测显示:平均而言,8-bit 量化只掉约 0.8% 精度,4-bit 方法在长上下文输入任务上最高掉点达 59%,且输入语言不是英语时退化会更严重。更关键的是,不同模型对同一量化方法的鲁棒性差异很大——同样用 BNB-nf4,Qwen2.5-72B 依然稳健,Llama-3.1-70B 却掉了 32%。这组数字直接支撑一个结论:没有一套量化配置能通吃所有模型和任务,压缩前必须针对目标场景重新评测,照抄别人报告里的”几乎无损”很可能是在不同的模型、不同的任务分布下测出来的结论。


八、争论:什么时候不该压缩

结合前面的证据,几类场景需要在”要不要压缩”这个问题上格外谨慎,而不是默认”先压了再看”:

需要精确检索/复述的长上下文场景——RAG、法律或医疗文档问答、长文档摘要校对。4-bit 量化在长上下文输入任务上的退化可以到达三位数百分之几十(Mekala et al., EMNLP 2025),而这类场景通常没有”回头核对原文”的兜底机制。至少应该用 8-bit 权重加 8-bit KV 起步,或者先针对目标长度和语言跑一遍专门评测再决定精度,不能照搬短文本场景下验证过的配置。

对齐/安全是产品红线的场景。qllm-eval 的发现说明量化可能以反直觉的方式改变拒答边界,常规 benchmark 不会报警。这类场景压缩后必须专门重新跑一遍 red-team 评测,不能只看 PPL、MMLU 没掉分就上线——“权重变化很小”不等于”行为边界没变”。

依赖涌现能力(复杂数学、多步推理、in-context learning)的场景。无论量化还是剪枝,这类能力都是最先掉的(LLM-KICK 和 qllm-eval 结论一致),如果业务核心依赖模型自己核对计算或做多步推理,压缩前必须专门测这类任务,常识问答类 benchmark 没掉分不能作为证据。

需要频繁再训练或持续微调的基座模型。剪枝后的模型结构固定,继续训练的空间比原模型小;标准 PTQ 量化的模型多数不能直接做梯度更新,需要 QLoRA 一类专门方法。如果业务后续要经常迭代微调,过早压缩会限制后面的迭代空间——这是压缩和”可训练性”之间真实存在的权衡,不是某个方法的实现缺陷。

极端叠加压缩前不做消融。权重 4-bit、激活 4-bit、KV 4-bit、50% 剪枝一次性全部叠上,出问题时几乎无法定位是哪一层压缩造成的。qllm-eval 论文自己的实验设计就是分别控制 Weight、Activation、KV 三个维度逐项评测,不是混在一起测——这个做法值得直接照搬:按权重、KV、激活、结构的顺序逐项加压、逐项在目标任务上评测,而不是一步压满再回头排查。


九、开放问题

训练越久的模型,是否越难压缩? Dettmers、Zettlemoyer 的《The Case for 4-bit Precision》(ICML 2023)在 3.5 万次实验的基础上,确定了 4-bit 是 bit-per-param 意义下的零样本精度 Pareto 最优点——但这个结论建立在 2022、2023 年那批模型的训练 token 量之上。“过训练(训练 token 数远超 Chinchilla 最优配比)的模型是否对 post-training quantization 更敏感”这个问题目前主要停留在预印本层面的讨论,尚未有 peer-reviewed 的系统性结论,这里明确标注为开放问题,不下强结论。如果这个方向被进一步证实,意味着”先把模型训得更久更强、再量化部署”这个当前业界默认的流程需要重新核算——训练阶段省下来的 token,可能要在推理阶段用更差的量化鲁棒性还回去。

压缩预算该怎么在权重、激活、KV Cache、结构之间分配? FP8 权重加 FP8 KV 是目前公认的”最稳默认项”(量化工程 已经总结过),但为什么是这个组合、这个比例,而不是别的分配方式,目前依赖经验和逐个 benchmark,没有一个统一的联合优化理论来回答”给定一个总压缩预算,应该怎么在四个维度间分配”。

压缩安全性的评测标准尚未收敛。 LLM-KICK、qllm-eval 这类工作提出了更细粒度的评测集,但业界报告压缩效果时默认仍是 PPL 加几个通用 benchmark 的组合,还没有一个像 lm-evaluation-harness 默认套件那样被广泛采纳的”压缩安全性”标准协议——不同论文、不同厂商报出的”几乎无损”,可能建立在完全不同、且都不够全面的评测口径上,这也是这篇文章在第七、八节反复强调”重新评测”而不是”信任别人的结论”的根本原因。


十、关键概念回顾


十一、常见误解

11.1 “量化、蒸馏、剪枝是三种压缩率不同的选项”

不是。它们改变的对象(数值精度 / 训练目标 / 结构)不同,误差模式和评估方式也不同,不能只用”压缩比”这一个维度互相比较。

11.2 “4-bit 模型延迟就是原来的四分之一”

不一定。dequant 开销、硬件是否支持低精度原生矩阵乘、prefill 是 compute-bound 而非 memory-bound,都会让实际收益低于理论上界,通常是 1.5 到 2 倍而不是 4 倍。

11.3 “PPL 不变说明压缩无损”

不够。PPL 是所有 token 的平均,会掩盖少数关键 token 上的系统性错误;多步推理、长上下文、对齐/拒答行为都需要专门评测,PPL 对这些维度普遍不敏感。

11.4 “剪枝出很多零就一定快”

非结构化稀疏如果没有对应的 sparse kernel(如 Ampere 起的 2:4 Sparse Tensor Core),零权重仍然会被当成普通稠密矩阵参与计算,剪枝率高不等于实际加速高。

11.5 “蒸馏就是让小模型模仿大模型的输出”

不完整。用什么目标函数拟合 teacher 的输出分布同样重要——分类蒸馏的 forward KL 直接搬到生成任务上会导致 exposure bias,这是 MiniLLM 明确指出并用 reverse KL 修正的问题。


十二、下一步

压缩让模型更容易部署,但每一种压缩都在某个维度上改变了模型的行为,而不只是”变小”。下一篇进入可解释性:52|可解释性入门 会讨论 attention weight 到底能不能算”解释”——这个问题和本篇第三节”attention weight 不能代表因果贡献”是同一条线的延续。


十三、参考文献

奠基与经典

  1. LeCun, Y., Denker, J. S., and Solla, S. A. “Optimal Brain Damage.” NeurIPS 1990.
  2. Hassibi, B., Stork, D. G., and Wolff, G. J. “Optimal Brain Surgeon and General Network Pruning.” IEEE International Conference on Neural Networks, 1993.
  3. Han, S., Pool, J., Tran, J., and Dally, W. J. “Learning both Weights and Connections for Efficient Neural Networks.” NeurIPS 2015.
  4. Hinton, G., Vinyals, O., and Dean, J. “Distilling the Knowledge in a Neural Network.” NeurIPS Deep Learning Workshop, 2015.

量化方法与假设

  1. Dettmers, T. et al. “LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale.” NeurIPS 2022.
  2. Frantar, E. et al. “GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers.” ICLR 2023.
  3. Lin, J. et al. “AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration.” MLSys 2024.
  4. Xiao, G. et al. “SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models.” ICML 2023.
  5. Dettmers, T. and Zettlemoyer, L. “The Case for 4-bit Precision: k-bit Inference Scaling Laws.” ICML 2023.
  6. Frantar, E., Singh, S., and Alistarh, D. “Optimal Brain Compression: A Framework for Accurate Post-Training Quantization and Pruning.” NeurIPS 2022.
  7. Sun, M., Chen, X., Kolter, J. Z., and Liu, Z. “Massive Activations in Large Language Models.” COLM 2024.

剪枝方法与争论

  1. Frantar, E. and Alistarh, D. “SparseGPT: Massive Language Models Can Be Accurately Pruned in One-Shot.” ICML 2023.
  2. Sun, M., Liu, Z., Bair, A., and Kolter, J. Z. “A Simple and Effective Pruning Approach for Large Language Models.” ICLR 2024.
  3. Xia, M., Gao, T., Zeng, Z., and Chen, D. “Sheared LLaMA: Accelerating Language Model Pre-training via Structured Pruning.” ICLR 2024.
  4. Michel, P., Levy, O., and Neubig, G. “Are Sixteen Heads Really Better than One?” NeurIPS 2019.

蒸馏与行为迁移

  1. Gu, Y. et al. “MiniLLM: Knowledge Distillation of Large Language Models.” ICLR 2024.
  2. Shumailov, I. et al. “AI Models Collapse When Trained on Recursively Generated Data.” Nature, 2024.

评测陷阱

  1. Jaiswal, A., Gan, Z., Du, X., Zhang, B., Wang, Z., and Yang, Y. “Compressing LLMs: The Truth Is Rarely Pure and Never Simple.” ICLR 2024.
  2. Li, S. et al. “Evaluating Quantized Large Language Models.” ICML 2024.
  3. Mekala, A., Atmakuru, A., Song, Y., Karpinska, M., and Iyyer, M. “Does Quantization Affect Models’ Performance on Long-Context Tasks?” EMNLP 2025.

← 上一篇:50|Speculative Decoding | 下一篇:52|可解释性入门

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-04-15 · transformer

【Transformer 与注意力机制】49|KV Cache:推理为什么是 O(n) 不是 O(n²)

自回归推理和训练不是同一种程序。本文解释 KV Cache 为什么成立:历史 token 的 Key/Value 一旦算出,在后续 decode 中不会改变;缓存它们可以避免反复重算前缀。文章同时讲清 prefill 与 decode 的差异、cache 显存公式、长上下文为什么受限,以及 PagedAttention、MQA/GQA、cache 量化等方向各自在解决什么。

2026-08-06 · transformer

【Transformer 与注意力机制】40|三大路线之争:为什么大模型几乎都是 Decoder-only

Encoder-only、Encoder-Decoder、Decoder-only 的差异不是谁更聪明,而是谁能看见谁的信息流不变量。本文从可见性图出发,解释这个不变量如何锁死任务接口与训练管线,KV Cache、continuous batching、投机解码为什么默认假设单流 causal Decoder,以及 embedding、rerank、强制双向抽取场景为什么不该硬上生成式大模型。

2026-06-09 · transformer

【Transformer 与注意力机制】59|推理退化:为什么大模型会输出乱码、死循环和无意义文本

大模型推理时偶尔会突然陷入死循环、输出乱码或连续无意义数字,这不是随机 bug,而是注意力机制、Causal Mask、解码策略和数值精度在自回归生成中共同作用的结果。本文从 QKV 计算坍塌出发,解释 Attention Sink、Softmax 马太效应、Causal Mask 的退路切断、FP16 溢出路径和 KV Cache 污染,并给出从架构到运行时的多层防线。

2026-04-15 · transformer

【Transformer 与注意力机制】42|FlashAttention:注意力计算的硬件级重写

FlashAttention 的关键不是近似注意力,也不是把公式改掉,而是重新安排标准 attention 在 GPU 内存层级里的计算路径。本文解释为什么标准 attention 的瓶颈常常是 HBM 读写,FlashAttention 如何用 tiling 和 online softmax 避免物化完整注意力矩阵,以及它为什么省显存、提吞吐,却没有消除 O(n²) 的根本复杂度。


By .