BlockPruner: Fine-grained Pruning for Large Language Models¶
会议: ACL 2025 | arXiv: 2406.10594 | 代码: 无 | 领域: 模型压缩 | 关键词: 结构化剪枝, LLM压缩, 块级冗余, 困惑度, 迭代搜索
一句话总结¶
提出 BlockPruner,将 Transformer 层分解为 MHA 和 MLP 两个最小残差块,基于困惑度评估块重要性并通过迭代搜索进行细粒度剪枝,实现比层级剪枝更优的压缩效果。
研究背景与动机¶
1. 领域现状¶
大语言模型(LLM)规模持续增长,部署成本高昂。模型压缩技术(知识蒸馏、量化、剪枝)成为实际部署的重要手段。近期研究发现 LLM 中存在大量冗余层,移除这些层对整体性能影响有限。
2. 现有痛点¶
- 当前层级剪枝方法(如 ShortGPT、LaCo)以整个 Transformer 层为最小剪枝单位,粒度过粗
- 非结构化剪枝虽然能保持较高压缩比下的性能,但需要专用硬件支持,实际加速困难
- 结构化剪枝方法(如 LLM-Pruner、SliceGPT)通常需要剪枝后重新训练模型
3. 核心矛盾¶
层级剪枝忽视了层内部更细粒度的冗余——MHA 和 MLP 块的冗余程度不同,整层移除可能同时丢弃了重要子模块。
4. 本文要解决什么¶
如何在不需要重训练的前提下,以比层级更细的粒度进行 LLM 结构化剪枝?
5. 切入角度¶
利用 Transformer 层的残差结构特性,将每层分解为 MHA 和 MLP 两个最小残差块,分别评估并移除冗余块。
6. 核心 idea 一句话¶
将 Transformer 层拆分为 MHA/MLP 块,用困惑度衡量块重要性,通过迭代贪心搜索逐块移除最不重要的块。
方法详解¶
整体框架¶
BlockPruner 包含三个核心步骤:
- 最小残差块分解:将每个 Transformer 层拆分为 MHA 和 MLP 两个独立残差块
- 块重要性评估:通过困惑度度量每个块的重要性
- 迭代搜索剪枝:逐步移除最不重要的块
关键设计¶
最小残差块(Minimal Residual Block)¶
每个 Transformer 层的计算可分解为两个残差连接:
两个子模块都遵循 \(f(x) + x\) 的残差形式,因此可以独立地被"掩码"掉而不破坏信息流。对于 \(L\) 层的模型,总共有 \(2L\) 个可剪枝的块。
块重要性度量——困惑度¶
与 ShortGPT 使用的 Block Influence(BI)等局部度量不同,BlockPruner 采用全局度量——困惑度:
具体做法:逐一掩码每个块 \(B_i\),在校准数据集上计算掩码后模型的困惑度 \(P_i\)。困惑度越低,说明该块越冗余。
迭代搜索算法¶
不同于一次性移除所有低重要性块,BlockPruner 采用迭代贪心搜索:
- 对所有 \(2L - j + 1\) 个剩余块,分别掩码并计算困惑度
- 移除困惑度最低的块
- 重复直到达到目标剪枝数 \(K\)
这种迭代方式考虑了块之间的交互效应。消融实验表明,去掉迭代搜索后性能严重下降(Baichuan2-7B 下降 30.80%)。
损失函数/训练策略¶
BlockPruner 是 training-free 方法,不需要任何微调或重训练。仅使用 256 个 Alpaca 数据样本作为校准集。
实验关键数据¶
主实验¶
| 模型 | 方法 | 剪枝比 | PPL↓ | Avg Score |
|---|---|---|---|---|
| Llama2-7B | Dense | 0% | 5.47 | 68.96 |
| Llama2-7B | ShortGPT | 21.02% | 18.45 | 58.18 |
| Llama2-7B | SliceGPT | 21.45% | 30.74 | 57.83 |
| Llama2-7B | BlockPruner | 21.99% | 11.51 | 60.17 |
| Llama2-13B | Dense | 0% | 4.89 | 71.72 |
| Llama2-13B | ShortGPT | 24.37% | 20.06 | 62.60 |
| Llama2-13B | BlockPruner | 25.12% | 8.16 | 64.53 |
| Qwen1.5-14B | Dense | 0% | 7.44 | 69.07 |
| Qwen1.5-14B | ShortGPT | 22.25% | 1237.21 | 44.72 |
| Qwen1.5-14B | BlockPruner | 23.72% | 15.67 | 60.45 |
消融实验¶
| 模型 | 方法 | 剪枝比 | Avg Score |
|---|---|---|---|
| Llama2-7B | BlockPruner | 21.99% | 60.17 |
| Llama2-7B | - 迭代搜索 | 20.95% | 55.89 (-7.11%) |
| Llama2-7B | - 块级→层级 | 21.02% | 58.63 (-2.56%) |
| Baichuan2-7B | BlockPruner | 22.45% | 56.08 |
| Baichuan2-7B | - 迭代搜索 | 22.39% | 38.81 (-30.80%) |
| Qwen1.5-14B | BlockPruner | 23.72% | 60.45 |
| Qwen1.5-14B | - 迭代搜索 | 22.98% | 40.80 (-32.51%) |
关键发现¶
- MHA 比 MLP 更冗余:剪枝比 <17% 时,仅剪 MHA 的性能损失更小;随后 MHA 性能急剧下降
- 模型越大,冗余越多:Llama2-13B 比 7B 在相同剪枝比下保持更好性能
- Alpaca 比 Wikitext2 更适合做校准集:指令跟随数据更贴近下游任务分布
- 256 样本即可:增加样本数对剪枝效果无显著提升
- BlockPruner 剪枝后困惑度与下游任务性能正相关
亮点与洞察¶
- 简洁有效的设计:利用 Transformer 的残差结构天然地将层拆分为两个可独立移除的块,无需引入额外结构
- 全局度量 + 迭代搜索的组合:困惑度虽非完美的局部度量,但配合迭代搜索可捕捉块间交互,效果远超一次性剪枝
- MHA/MLP 冗余不对称性:揭示了 MHA 模块存在更多冗余的现象,对模型设计和压缩策略均有启发
- 无需训练:相比需要微调的 LLM-Pruner 等方法,BlockPruner 完全免训练,实用性更强
局限性/可改进方向¶
- 困惑度计算的迭代搜索开销较大——每轮需遍历所有剩余块,时间复杂度为 \(O(K \cdot 2L)\)
- 未探索与量化等其他压缩技术的组合效果
- 实验仅覆盖 7B-14B 模型,更大规模模型(70B+)的表现未知
- 块重要性度量仍有优化空间——困惑度是全局指标,可能存在更精准的块级度量
相关工作与启发¶
- ShortGPT / LaCo:层级剪枝方法,BlockPruner 在其基础上进一步细化粒度
- SliceGPT:通过计算不变性的权重矩阵列/行剪枝,思路不同但互补
- FINERCUT(并行工作):类似的块级剪枝,但使用 logits 相似度而非困惑度作为重要性度量
- 启发:残差连接是实现细粒度剪枝的关键结构特性,未来可探索更细粒度(attention head 级别)的剪枝
评分¶
- 新颖性: ⭐⭐⭐⭐ — 块级剪枝的 idea 直觉清晰,虽非首创但通过困惑度+迭代搜索组合出了有效方案
- 实验充分度: ⭐⭐⭐⭐ — 6 个模型、5 个基准、详尽的消融实验和分析
- 写作质量: ⭐⭐⭐⭐ — 逻辑清晰,从初步实验的观察自然引出方法
- 综合价值: ⭐⭐⭐⭐ — 实用性强,思路简洁,对 LLM 压缩领域有实际参考价值