Structured Pruning of Large Language Models 解读

📅 2026/7/21 7:37:15
Structured Pruning of Large Language Models 解读
一、论文基本信息论文题目Structured Pruning of Large Language Models作者Ziheng Wang、Jeremy Wohlwend、Tao Lei发表会议EMNLP 2020方法名称FLOPFactorized Low-rank Pruning官方代码asappresearch/flop仓库说明这是论文提出的factorized L0-based pruning的 PyTorch 实现。(GitHub)这篇论文中的Large Language Models要结合 2020 年语境理解主要指当时的大型预训练语言模型和大规模语言建模模型比如Transformer-XL、RoBERTa、SRU language model等不是今天我们说的 LLaMA、GPT-4 这类超大 decoder-only LLM。二、论文要解决的问题这篇论文关注一个非常核心的问题语言模型越来越大参数多、推理慢、训练贵那么它们真的需要这么大的矩阵和这么高的秩吗传统剪枝方法主要有两类。第一类是非结构化权重剪枝。它把单个权重置零例如 magnitude pruning。这类方法通常能保持不错精度但剪完后矩阵还是原来的形状只是里面有很多零散的 0。论文指出这种不规则稀疏矩阵在普通硬件上很难获得真实训练和推理加速。(ACL Anthology)第二类是结构化剪枝。它删除整行、整列、块或特征维度。这类方法更容易加速但剪枝模式太受限制常常比非结构化剪枝损失更大。论文也提到某些 block sparse 方法还需要特殊线性代数实现或硬件支持。(ACL Anthology)所以这篇论文想解决的是能不能既保持结构化剪枝的真实加速能力又避免普通行列剪枝过于粗糙的问题作者给出的答案是用低秩分解来做结构化剪枝。三、核心思想这篇论文的核心思想是不要直接剪原始权重矩阵而是先把权重矩阵分解成多个 rank-1 components然后剪掉不重要的 rank-1 components。一个普通线性层本来是一个大矩阵。论文把它改写成两个小矩阵的乘积。这个乘积可以理解成很多个 rank-1 组件的和。每个 rank-1 组件都是一个结构化单元。然后模型训练时学习哪些 rank-1 components 应该保留。哪些 rank-1 components 可以删除。删除之后剩下的仍然是两个 dense 矩阵相乘而不是不规则稀疏矩阵。论文明确强调低秩分解可以保留 dense matrix structure因此不需要特殊稀疏矩阵算子或硬件来获得加速。(ACL Anthology)这就是 FLOP 的核心用低秩结构做剪枝对象而不是用单个权重做剪枝对象。四、为什么低秩剪枝比普通结构化剪枝更灵活普通结构化剪枝通常剪的是某一列。某一行。某一个 block。这种剪法很规整但限制也很强。例如剪掉某一列就意味着整个输入特征维度都被删掉剪掉某个 block就意味着这个局部区域全部消失。FLOP 的思路更柔和一个 rank-1 component 可以影响整个矩阵但它本身仍然是一个可删除的结构化单元。它不像单个权重剪枝那么细碎也不像整行整列剪枝那么粗暴。论文也指出input feature pruning 可以看作低秩剪枝的一个特例因此低秩剪枝比普通输入维度剪枝更一般、更灵活。(ACL Anthology)所以 FLOP 的定位可以理解为它是一种介于非结构化剪枝和粗粒度结构化剪枝之间的方法。它剪的是结构单元但这个结构单元是低秩分解中的 rank-1 component。五、FLOP 具体怎么剪FLOP 会给每个 rank-1 component 加一个可学习的 gate。如果 gate 打开这个 rank-1 component 保留。如果 gate 关闭这个 rank-1 component 删除。训练结束后只保留 gate 非零的 rank-1 components。对应到矩阵实现上就是只保留两个低秩矩阵中对应的列和行。论文说明训练后只需要存储非零对角 gate 对应的列和行非零 gate 也可以吸收到其中一个矩阵里最终推理仍然是普通 dense matrix multiplication。(ACL Anthology)这点很关键。它不是得到一个稀疏大矩阵而是得到两个更小的 dense 矩阵。因此它更容易获得真实加速非结构化剪枝大矩阵 零散 0。FLOP小矩阵 × 小矩阵。六、两种剪枝版本FLOP-AGP 和 FLOP-L0论文里主要有两个 FLOP 版本。6.1 FLOP-AGPFLOP-AGP 是比较简单的版本。它对低秩分解中的 gate 做 magnitude-based gradual pruning。也就是说逐步删除 gate 值较小的 rank-1 components。这个版本说明了一个重要事实只要剪枝对象换成低秩组件即使用普通 magnitude gradual pruning也能得到不错结果。论文在摘要和方法里都强调简单 magnitude pruning 已经能取得强结果。(ACL Anthology)6.2 FLOP-L0FLOP-L0 是更完整的版本。它使用Hard Concrete / L0 regularization来学习 gate 是否打开。L0 的目标是鼓励更多 gate 变成 0从而删除更多 rank-1 components。但普通 L0 正则有一个问题很难精确控制最终模型大小。同一个正则系数在不同学习率或训练调度下可能得到完全不同的压缩率。论文因此引入Augmented Lagrangian Method把目标模型大小作为约束让模型更稳定地达到指定压缩比例。(ACL Anthology)简单理解就是FLOP-L0 不只是鼓励稀疏而是尽量让最终模型大小接近用户指定预算。七、为什么它能加速训练和推理这篇论文的一个重要卖点是它不只是减少参数还能加速训练和推理。原因是训练时 gate 在一个 batch 内共享。当某些 rank-1 components 被关闭时当前 batch 可以只计算保留下来的部分执行更小的矩阵乘法。论文明确说batch 内共享 pruning mask 后可以选择当前 batch 活跃的参数执行更小的矩阵乘法因此当 mask 变稀疏时可以获得训练加速。(ACL Anthology)推理时则更直接训练得到固定 mask。删除被关闭的 rank-1 components。把剩余部分编译成小 dense 矩阵。所以 FLOP 不依赖稀疏矩阵库也不要求特殊硬件。这和 Movement Pruning、Magnitude Pruning 很不同。后者参数虽然少但如果矩阵形状不变推理速度不一定明显提升。八、它对 embedding / softmax 也能剪语言模型有一个特殊问题输入 embedding 和输出 softmax 层非常大。尤其是词表很大的语言模型embedding / softmax 可能占据大量参数。论文指出输入和输出层在大语言模型中是特殊挑战因为它们可能占据很大参数比例。(ACL Anthology)FLOP 可以和 adaptive embedding / adaptive softmax 结合。传统 adaptive embedding 会按照词频给不同词簇手工设定不同维度高频词维度大低频词维度小。FLOP 进一步让这个维度自动学习。也就是说不是人工规定低频词用多少维。而是给每个词簇的低秩维度加 gate让模型自己决定保留多少。论文发现FLOP 会更激进地剪掉低频词的 embedding 维度这和人工经验一致低频词不需要占用和高频词一样多的表示容量。(ACL Anthology)这个设计很有价值因为它把 FLOP 从普通线性层扩展到了语言模型中最占参数的 embedding / softmax 层。九、实验设置论文实验覆盖三类模型和任务。第一WikiText-103 word-level language modeling。模型是 12 层 SRU参数量约 100M其中约 50% 参数在 adaptive embedding / softmax 层。(ACL Anthology)第二Enwik8 character-level language modeling。使用 SRU 和 Transformer-XL其中 Transformer-XL 是 12 层、约 41M 参数论文对 self-attention 和 feed-forward 层中的矩阵引入 pruning。(ACL Anthology)第三RoBERTa-base 下游分类任务。论文在 SST-2、MRPC、STS-B、QNLI 上做 fine-tuning 压缩。因为 RoBERTa-base 本身不是低秩分解训练出来的所以作者先对每个矩阵做 SVD再在分解矩阵之间加入 pruning mask。(ACL Anthology)十、主要实验结果10.1 WikiText-10350% 参数压缩只损失 0.8 PPLWikiText-103 上SRU base 模型测试 PPL 是24.5。FLOP-L0 在50% 压缩时得到25.3 PPL只损失0.8 PPL在 70% 压缩时得到 27.7 PPL在 80% 压缩时得到 31.9 PPL。相比 FAC、AGP、NP-L0 等 baselineFLOP 在多个压缩比例下表现更好。(ACL Anthology)这个结果说明低秩组件剪枝在语言建模中非常有效。尤其是 50% 压缩时性能损失很小。10.2 Adaptive embedding低频词被剪得更多论文分析了不同词频簇中的参数使用情况。结果显示FLOP 会对低频词更激进地减少维度。论文明确说FLOP learns to prune the dimension more aggressively for less-frequent words。(ACL Anthology)这说明 FLOP 不只是统一压缩所有模块而是能自动分配容量高频词保留更多表示维度。低频词保留更少表示维度。这比人工指定 adaptive embedding 维度更灵活。10.3 Enwik8SRU 和 Transformer-XL 上都有效在 Enwik8 的 SRU character-level language model 上base 模型 BPC 是1.24。FLOP-L0 在 70% 压缩时得到1.25 BPC几乎接近原模型在 80% 压缩时得到 1.27在 90% 压缩时得到 1.33。(ACL Anthology)在 Transformer-XL 上base 模型 BPC 是1.08。FLOP-L0 在 80% 压缩时得到1.13 BPC在 90% 压缩时得到1.17 BPC。论文指出 FLOP-L0 在这些设置下优于对比方法说明该方法可以应用到 Transformer-XL 这类架构。(ACL Anthology)这个结果说明FLOP 不是只适用于 RNN也能用于 Transformer 的 attention 和 FFN 矩阵。10.4 RoBERTa 下游任务35% 参数压缩保留接近 99% 性能在 RoBERTa-base 下游分类任务中原模型参数量约125M平均分为90.83。压缩到80M也就是约35% 参数减少后平均分为89.48。论文总结说这相当于保留了接近 99% 的性能同时减少 35% 参数。(ACL Anthology)具体任务上SST-292.43 → 92.09MRPC90.9 → 88.61STS-B90.22 → 88.18QNLI89.77 → 89.05这说明 FLOP 可以迁移到预训练模型 fine-tuning 场景但压缩率没有语言建模实验那么激进。一个重要原因是 RoBERTa 的 embedding 层仍然占很大比例而论文这个实验没有像 WikiText-103 那样完整压缩 embedding。论文也指出如果进一步 factorize embedding layer可能获得更高压缩率。(ACL Anthology)十一、它是不是结构化剪枝是的它是结构化剪枝但不是我们通常说的 head pruning 或 layer pruning。它的结构单元是低秩分解中的 rank-1 component。剪掉一个 rank-1 component就等价于同时删掉低秩矩阵中的一列和另一矩阵中的一行。所以它不是非结构化 weight pruning。attention head pruning。Transformer layer pruning。FFN neuron pruning。它更准确的名字是low-rank component pruning。也可以说是基于低秩分解的结构化矩阵剪枝。它的优势是剪完后仍然是 dense computation。缺点是每个原始矩阵需要被低秩分解或重新参数化。十二、和低秩分解有什么区别普通低秩分解方法通常是预先指定一个 rank。把矩阵直接替换成固定低秩矩阵。比如原矩阵 rank 设成 128训练时就一直是 128。FLOP 不一样。它先给矩阵一个较大的分解空间然后通过 gate 学习哪些 rank-1 components 真正需要。也就是说普通低秩分解人工指定 rank。FLOP训练过程中自动学习有效 rank。这就是它比简单 factorized model from scratch 更强的原因。论文对比 FAC也就是固定比例低秩模型从头训练结果显示 FLOP 在多个压缩率下明显更好。(ACL Anthology)十三、和 Movement Pruning / Block Pruning 的区别Movement Pruning剪的是单个权重产生非结构化稀疏。它高稀疏下精度强但普通硬件上不一定快。Block Pruning剪的是矩阵 block 或结构维度更硬件友好但仍然主要围绕稀疏模式组织。FLOP的想法不同它不制造稀疏大矩阵而是直接把矩阵改写成低秩小矩阵。因此 FLOP 的核心不是“哪些权重为 0”而是这个矩阵真正需要多少 rank-1 components。如果从压缩谱系看Movement Pruning权重级稀疏。Block Pruning块级 / 半结构化稀疏。FLOP低秩结构化压缩。十四、和 Head Pruning、CoFi 的区别Head pruning 删除完整 attention head只作用于 MHA 的特定结构。CoFi 删除 MHA layer、FFN layer、attention heads、FFN intermediate dimensions、hidden dimensions是多粒度结构化剪枝。FLOP 更通用只要是矩阵乘法就可以用低秩分解加 rank-1 component pruning。论文也强调 FLOP applies to any matrix multiplication。(ACL Anthology)所以它不是专门为 Transformer head 设计的而是一个通用矩阵压缩方法。但也正因为它通用它没有显式利用 Transformer 的语义结构例如哪个 head 重要。哪一层冗余。哪个 FFN channel 可以删。它关注的是矩阵本身的有效秩。十五、方法优点第一结构化且硬件友好。FLOP 剪完后得到的是小 dense 矩阵而不是不规则稀疏矩阵因此更容易在普通硬件上加速。论文也强调它不需要特殊线性代数 primitive 或硬件。(ACL Anthology)第二比普通行列剪枝更灵活。剪 rank-1 component 比剪输入维度或矩阵列更不受限制因此在相同参数预算下通常性能更好。论文分析中也强调factorization-based pruning 相比 input feature pruning 具有更小性能下降。(ACL Anthology)第三适用范围广。它可以用于 SRU、Transformer-XL、RoBERTa也可以用于 embedding / softmax 层。(ACL Anthology)第四可以自动学习不同模块的容量。尤其在 adaptive embedding 中它能自动给不同词频簇分配不同维度而不是人工指定。第五可以加速训练和推理。因为训练时 batch 内共享 mask 后可以执行更小矩阵乘法推理时也只保留压缩后的 dense factorization。(ACL Anthology)十六、方法局限第一需要低秩重参数化。对于已经训练好的模型如果原来不是低秩分解形式需要先做 SVD 或重新参数化。这会增加实现复杂度。论文在 RoBERTa 实验中就是先对每个矩阵做 SVD再插入 pruning mask。(ACL Anthology)第二不直接剪 Transformer 语义结构。它不会告诉你哪个 attention head 冗余、哪一层冗余、哪个 FFN channel 冗余。它关注的是矩阵低秩组件而不是 Transformer 模块功能。第三压缩率受 embedding 等未处理模块影响。RoBERTa 下游任务只压缩到 35% 参数减少很大原因是 embedding 层占比大而该实验对 embedding 压缩有限。论文也指出进一步 factorizing embedding layer 可能获得更高压缩。(ACL Anthology)第四可能改变原模型结构实现。原来一个 Linear 变成两个 Linear 的乘积。虽然矩阵更小但实际速度是否提升还取决于 batch size、矩阵形状、框架融合能力等。第五对现代 decoder-only LLM 的适用性需要重新验证。这篇论文实验主要是 SRU、Transformer-XL、RoBERTa 和早期语言建模任务不能直接等同于 LLaMA、Mistral、Qwen 这类现代 LLM 的剪枝效果。十七、整体评价这篇论文最重要的贡献是把结构化剪枝从“删行、删列、删块”转向“删低秩组件”。它抓住了一个很关键的问题非结构化剪枝虽然精度好但不快粗粒度结构化剪枝虽然快但容易伤精度。低秩组件剪枝在两者之间提供了一个很好的折中它是结构化的所以能变成小 dense 计算。它又比行列剪枝灵活所以性能损失更小。这篇论文对后续工作有两个启发。第一矩阵有效秩本身就是一种冗余来源。Transformer 的 Q/K/V、FFN、输出投影等矩阵可能不需要完整 rank。第二压缩不一定非要产生稀疏矩阵。把大矩阵改写成低秩小矩阵也是一条很重要的部署路线。如果你后面做 Transformer 剪枝实验这篇论文适合放在low-rank structured pruning这一类而不是 head pruning、layer pruning 或 token pruning。十八、一句话总结《Structured Pruning of Large Language Models》提出 FLOP将语言模型中的权重矩阵低秩分解为多个 rank-1 components并在训练中通过 magnitude pruning 或 L0 gate 自适应删除不重要的低秩组件剪枝后模型仍然执行小 dense 矩阵乘法因此比非结构化稀疏更容易获得真实训练和推理加速。它的核心价值是证明大型语言模型的矩阵有效秩存在明显冗余基于低秩组件的结构化剪枝可以在 WikiText-103、Enwik8、Transformer-XL 和 RoBERTa 下游任务上取得较好的压缩—性能折中。