
一、论文基本信息论文题目Compresso: Structured Pruning with Collaborative Prompting Learns Compact Large Language Models作者Song Guo、Jiahang Xu、Li Lyna Zhang、Mao Yang论文版本arXiv 2023方法名称为Compresso。官方代码在 Microsoft 的Moonlit/Compresso目录中代码说明包括 pruning、finetuning 和 evaluation 流程。(arXiv) (GitHub)一句话先概括Compresso 是一种面向 LLM 的训练式结构化剪枝方法。它不是 SparseGPT / Wanda 那种非结构化权重置零而是在 instruction tuning 过程中用 LoRA L0 正则学习哪些 attention heads、FFN intermediate dimensions 和 hidden dimensions 应该保留或删除同时提出 collaborative prompt让模型“知道自己正在被剪枝”从而提升剪枝后性能。二、它要解决什么问题前面你已经看了几类 LLM 剪枝方法SparseGPT / Wanda非结构化权重剪枝剪单个权重通常不改变模型结构。LLM-Pruner / LoRAPrune / Sheared LLaMA结构化剪枝删除 head、channel、layer、hidden dimension 等结构。Compresso 主要针对的是结构化剪枝中的两个难点。第一one-shot 结构化剪枝容易掉性能。论文指出当时 LLM pruning 主要采用低成本 one-shot 方法但在 structured pruning 设置下性能下降明显而结构化剪枝虽然更容易带来真实推理收益但比非结构化剪枝更难因为它要删除一整组相关参数。(arXiv)第二训练式剪枝成本太高。传统训练式剪枝需要保存模型参数、梯度、mask、activation 和 optimizer states。论文举例说如果用 Adam 优化器剪 LLaMA-13B至少需要约 260GB GPU 显存相当于 4 张 A100。(arXiv)所以 Compresso 要解决的问题是能不能把训练式结构化剪枝重新用于 LLM但又避免全参数训练的显存成本并且让剪枝后的 LLM 仍保留较好的 zero-shot / few-shot 泛化能力三、核心思想Compresso 的核心思想有两部分第一用 LoRA 降低训练式结构化剪枝成本。原始 LLM 权重冻结只训练 LoRA 模块和剪枝 mask。这样不用保存完整预训练权重的梯度和 optimizer states同时还能在 instruction tuning 中学习剪枝决策。论文明确说Compresso 将 LoRA 引入正则化剪枝过程用 learnable binary masks 决定是否保留 heads、FFN intermediate dimensions 和 hidden dimensions。(arXiv)第二用 collaborative prompt 让 LLM 参与剪枝过程。Compresso 不把 LLM 当成被动压缩对象而是给它一个专门的 pruning prompt告诉它正在被剪枝、解释剪枝目的并鼓励它配合剪枝算法。这个 prompt 在 pruning 和 inference 阶段都会使用。(arXiv)所以 Compresso 的独特之处不是单纯“LoRA mask”而是提出了一个比较新颖的视角剪枝算法和被剪的 LLM 通过 prompt 协作一起学习更好的剪枝决策。四、Compresso 剪的是什么Compresso 是明确的结构化剪枝。它剪三类结构attention heads。FFN intermediate dimensions。hidden dimensions。论文方法部分明确说Compresso 允许剪 attention heads、FFN intermediate dimensions 和 hidden dimensions其中 hidden dimension 的 mask 因为 residual connection需要跨层共享。(arXiv)它不是非结构化权重剪枝。N:M 半结构化稀疏。token pruning。KV cache pruning。纯 layer dropping。所以和 SparseGPT / Wanda 的区别非常清楚SparseGPT / Wanda矩阵形状不变部分权重变 0。Compresso删除 head / FFN 维度 / hidden 维度让模型结构变小。这也是为什么 Compresso 更适合归类为training-based structured pruning for LLMs。五、为什么用 LoRA如果直接训练完整 LLaMA 进行剪枝显存成本太高。Compresso 的处理方式是冻结原始 LLM。插入 LoRA。只训练 LoRA 参数和结构 mask。论文说LoRA 用两个低秩矩阵约束参数更新从而显著降低训练成本Compresso 将这些 LoRA 更新与 mask 学习结合起来。(arXiv)这样做有三个好处。第一训练成本低。不需要全参数梯度和优化器状态。第二剪枝不是 one-shot。mask 是在 instruction tuning 过程中逐渐学习出来的比固定重要性指标一次性排序更灵活。第三能学习 layer-wise sparsity。论文强调one-shot 方法通常采用 uniform sparsity ratio而 Compresso 可以自动学习更好的逐层稀疏比例。(arXiv)这点很重要。LLM 各层冗余并不一样所有层统一剪相同比例通常不是最优。六、L0 正则和 hard concrete maskCompresso 使用可学习 mask 来表示某个结构是否保留。但 mask 如果直接是 0/1不可导。因此它采用hard concrete distribution来近似二值 mask。训练时 mask 可以通过反向传播学习最终趋向 0 或 1。论文写到hard concrete 的参数决定 mask 值并且这些 mask 可以和 LoRA 模块一起优化。(arXiv)同时为了达到目标稀疏率Compresso 使用 Lagrangian multiplier 做约束优化。整体目标是语言建模损失 稀疏率约束损失。直观理解就是模型要继续学会生成正确 token。同时 mask 要逐渐把模型压到目标大小。所以 Compresso 不是先训练完再剪而是在训练中让模型自己学习哪些结构可以删除。七、Collaborative Prompt 是什么这是 Compresso 最有特色的部分。论文认为以往剪枝方法中LLM 是被动对象剪枝算法决定删哪里LLM 只被评估性能。Compresso 则希望让 LLM 成为剪枝过程中的“协作者”。(arXiv)collaborative prompt 遵循三个原则告诉 LLM 它正在被剪枝。解释剪枝是什么以及为什么要剪枝。鼓励 LLM 和剪枝算法协作。论文中还说这个 prompt 由 GPT-4 辅助设计并且在 pruning 训练和最终 inference 阶段都使用训练时不对 prompt 部分计算 next-token loss。(arXiv)这个设计很有意思。它不是传统意义上的结构重要性指标而是把 prompt engineering 引入剪枝通过提示改变模型在剪枝训练中的行为使它更好适应结构损失。八、为什么 instruction tuning 数据有用结构化剪枝需要训练数据。理想情况下剪枝数据应该接近预训练数据分布。但 LLM 的原始预训练语料通常不可得。论文指出很多压缩方法用 C4 子集做 calibration但 C4 和原始预训练分布仍然有差异而且可能导致 zero-shot 任务表现较差。(arXiv)Compresso 选择使用GPT4-Alpacainstruction tuning dataset。论文说明该数据集包含约 52K 条 GPT-4 生成的英文 instruction-following 数据。(arXiv)消融实验也显示GPT4-Alpaca 明显优于 C4 subset 和 LLM-QAT 数据。比如剪 LLaMA-7B 到 5.4B 时C4 subsetcommonsense 56.41reading 52.78MMLU 22.91BBH 28.69。GPT4-Alpacacommonsense 60.09reading 60.35MMLU 31.90BBH 31.47。(arXiv)这说明对于训练式 LLM 剪枝数据选择非常关键。Compresso 的结论是instruction tuning 数据比简单 C4 calibration 更适合保持下游泛化能力。九、训练流程Compresso 的训练流程大致是第一阶段instruction tuning不剪枝。第 1 个 epoch 只做 fine-tuning不执行 pruning。第二阶段逐步增加稀疏率。第 2 到第 5 个 epoch 使用 cubic sparsity schedule从 0 逐渐增加到目标稀疏率。第三阶段固定目标稀疏率继续优化 mask。最后 2 个 epoch 固定 sparsity继续优化 mask。第四阶段额外 fine-tuning。剪枝完成后论文还按照 LLM-Pruner 的设置对剪枝模型再 fine-tune 2 个 epoch。(arXiv)实验中使用 AdamW初始学习率 5e-5batch size 8所有实验在 4 张 Nvidia V100 上进行。(arXiv)官方代码中的训练命令也显示Compresso 使用structured_headsstructured_mlphidden作为 pruning typetarget sparsity 可设为 0.3并启用 LoRA rank 8。(GitHub)十、实验模型和任务论文主要在LLaMA-7B上做实验把它剪到三个规模5.4B。5.0B。4.5B。评估任务覆盖三类能力zero-shot commonsense reasoningStoryCloze、PIQA、HellaSwag、WinoGrande、ARC-e、ARC-c、OpenBookQA。zero-shot reading comprehensionBoolQ、RACE-High。few-shot aggregated benchmarksMMLU 5-shot 和 BBH 3-shot。(arXiv)这个评估范围比只看 perplexity 更全面因为 LLM 剪枝最怕的是困惑度还可以但推理、阅读、few-shot 泛化能力损坏。十一、主要结果commonsense reasoningLLaMA-7B 原始 commonsense 平均分是62.19。Compresso 剪枝后5.4B60.09。5.0B57.05。4.5B55.94。对应 LLM-Pruner5.4B59.14。5.0B56.37。4.5B53.73。(arXiv)论文总结说Compresso 在 5.4B、5.0B、4.5B 时分别保留了原始 LLaMA-7B 约96%、92%、90%的 commonsense reasoning 能力。(arXiv)这说明 Compresso 在常识推理上比 LLM-Pruner 更稳尤其压到 4.5B 时优势更明显。十二、主要结果reading comprehension阅读理解结果是 Compresso 最亮眼的地方。LLaMA-7B 原始BoolQ75.17。RACE-High40.29。平均57.73。Compresso-5.4BBoolQ79.08。RACE-High41.63。平均60.35。也就是说Compresso-5.4B 的阅读理解平均分甚至超过原始 LLaMA-7B。对应的 LLM-Pruner-5.4B 只有48.92。(arXiv)论文也明确指出5.4B Compresso 在 BoolQ 和 RACE-High 上分别比原始 LLaMA-7B 高3.91%和1.34%说明 LLaMA 在 reading comprehension 上存在明显冗余。(arXiv)这个结果非常重要结构化剪枝并不一定只是损失性能有时会带来类似正则化 / instruction tuning 的收益。十三、主要结果MMLU 和 BBH在 MMLU 5-shot 上LLaMA-7B36.80。LLM-Pruner-5.4B24.86。Compresso-5.4B31.90。在 BBH 3-shot 上LLaMA-7B32.34。LLM-Pruner-5.4B28.97。Compresso-5.4B31.47。(arXiv)论文总结说Compresso 在 MMLU 和 BBH 上相对 LLM-Pruner 的提升最高分别达到7.04%和4.81%。(arXiv)这说明 Compresso 相比 one-shot 结构化剪枝能更好保留 in-context learning 能力。不过也要注意即使是 Compresso-5.4BMMLU 仍从 36.80 降到 31.90说明结构化剪枝仍会损失一部分复杂知识和多任务推理能力。十四、Collaborative Prompt 真的有用吗论文做了一个很直接的消融去掉 collaborative prompt。结果显示去掉 prompt 会明显下降尤其是 commonsense 和 reading comprehension。例如 5.4B 模型不在训练中使用 promptcommonsense 下降 5.68reading 下降 7.64MMLU 下降 5.06。只在 inference 中去掉 promptcommonsense 下降 4.02reading 下降 3.83。(arXiv)这说明 collaborative prompt 不只是一个装饰而确实影响剪枝效果。它可能起到两个作用训练时让模型在“被剪枝”的上下文下适应结构损失。推理时让模型继续沿用剪枝训练期间学到的行为模式。不过这也带来一个问题Compresso 的最终模型在推理时依赖这个 prompt会增加输入长度并且部署时需要固定使用这个额外提示。十五、剪出来的结构有什么规律Compresso 不是每层统一剪相同比例而是自动学习 layer-wise sparsity。论文可视化发现attention heads更倾向于保留前层和中间层最终层剪得更多。FFN intermediate size各层剪掉的参数数量相近但保留比例呈现类似 “W” 的模式。作者认为这说明 LLM 的中间层对剪枝后性能保持也很重要。(arXiv)这和 LLM-Pruner 的差别很明显。LLM-Pruner 更接近 uniform sparsity 或预设规则Compresso 通过训练式 mask 学习更细的层间稀疏分布。十六、它和 LLM-Pruner 的区别LLM-Pruner 和 Compresso 都是结构化剪枝但路线不同。LLM-Prunerone-shot / 低成本剪枝。基于 dependency group 和 Taylor / 梯度重要性估计。剪完后依赖 LoRA post-training 恢复。Compressotraining-based structured pruning。用 hard concrete mask L0/Lagrangian 正则学习剪枝决策。用 LoRA 降低训练成本。用 collaborative prompt 让模型配合剪枝过程。最核心区别是LLM-Pruner 是先估计重要性再剪。Compresso 是在 instruction tuning 中学习 mask让剪枝决策和模型适配同步发生。所以 Compresso 相比 LLM-Pruner 更像 CoFi 在 LLM 上的扩展但加上了 LoRA 和 prompt 协作。十七、它和 LoRAPrune 的区别两者都把 LoRA 和结构化剪枝结合但目的和机制不同。LoRAPrune主要利用 LoRA 的权重和梯度来近似原始权重重要性低显存地做结构化剪枝。重点是LoRA-guided criterion。Compresso主要用 LoRA 降低训练式 L0 mask 优化的成本。重点是LoRA L0 regularization collaborative prompt。也就是说LoRAPrune 用 LoRA 来估计重要性。Compresso 用 LoRA 来承载训练更新同时学习结构 mask。Compresso 的剪枝决策更像可学习 mask 优化LoRAPrune 更像基于 LoRA 梯度的结构重要性排序。十八、它和 SparseGPT / Wanda 的区别SparseGPT 和 Wanda 都是非结构化剪枝。SparseGPT剪单个权重用二阶重构补偿。Wanda剪单个权重用权重 × 激活范数打分。Compresso 是结构化剪枝。它删除attention head。FFN intermediate dimension。hidden dimension。所以它能更直接减少模型计算和显存而不是依赖 sparse kernel。但是代价也更大SparseGPT / Wanda 基本是 post-training one-shot。Compresso 需要 instruction tuning、mask 优化、LoRA、prompt 和额外 fine-tuning。所以 Compresso 的成本明显高于 Wanda / SparseGPT但它得到的是更硬件友好的小 dense 结构。十九、它和 Sheared LLaMA 的区别两者都是结构化剪枝但目标不同。Sheared LLaMA目标是从 LLaMA2-7B 生产强小型 base model剪成 1.3B / 2.7B 目标结构后继续预训练 50B tokens。Compresso目标是用 instruction tuning LoRA collaborative prompt把 LLaMA-7B 剪到 5.4B / 5B / 4.5B并保留 zero-shot / few-shot 泛化。所以Sheared LLaMA 是 pretraining-oriented model resizing。Compresso 是 instruction-tuning-based structured pruning。Sheared LLaMA 更适合有 continued pre-training 预算、想生产小 base model 的场景Compresso 更适合在有限训练资源下压缩已有 LLaMA。二十、Compresso 是不是结构化剪枝是的Compresso 是结构化剪枝。更准确地说Compresso 是 LoRA-assisted、L0-regularized、prompt-collaborative structured pruning for LLMs。它不是非结构化剪枝。N:M 半结构化剪枝。token pruning。KV cache pruning。它的核心剪枝对象是heads、FFN intermediate dimensions、hidden dimensions。二十一、方法优点第一结构化剪枝部署更友好。相比 SparseGPT / Wanda 的非结构化稀疏Compresso 得到的是更小结构更容易在普通硬件上减少计算和显存。第二比 one-shot 结构化剪枝更强。Compresso 在 commonsense、reading comprehension、MMLU、BBH 上都明显超过 LLM-Pruner尤其 reading comprehension 和 few-shot 任务差距很大。(arXiv)第三LoRA 降低训练式剪枝成本。冻结原始 LLM只训练 LoRA 和 mask使训练式剪枝在 LLM 上变得可行。(arXiv)第四自动学习逐层稀疏率。它不是统一比例剪所有层而是学习不同层、不同结构的保留比例。(arXiv)第五collaborative prompt 提升明显。去掉 prompt 会在 commonsense、reading、MMLU、BBH 等任务上产生明显下降说明该 prompt 对剪枝过程有实质帮助。(arXiv)二十二、方法局限第一不是 training-free。Compresso 需要 7 个 epoch 的 pruning training再额外 fine-tuning 2 个 epoch。虽然 LoRA 降低了成本但它仍然比 Wanda / SparseGPT 这类 one-shot 方法重很多。(arXiv)第二依赖 instruction tuning 数据。消融显示 GPT4-Alpaca 明显优于 C4 和 LLM-QAT 数据这意味着数据选择对结果非常敏感。(arXiv)第三推理时依赖 collaborative prompt。prompt 在 inference 阶段也使用。这样虽然提升性能但会增加输入长度并且部署时需要保持固定 prompt 格式。(arXiv)第四主要验证 LLaMA-7B。论文主实验是把 LLaMA-7B 剪到 5.4B、5B、4.5B。对 LLaMA2、13B、70B、Mistral、Qwen 等架构是否同样有效需要额外验证。(arXiv)第五高压缩率仍然会损失能力。比如 MMLU 从 LLaMA-7B 的 36.80 降到 Compresso-4.5B 的 25.92说明复杂知识类任务仍然比较敏感。(arXiv)二十三、整体评价Compresso 是 LLM 结构化剪枝方向中很有特色的一篇论文。它的价值不在于提出一个新的重要性打分公式而在于提出了一个新的剪枝范式剪枝算法不再只是外部工具。LLM 不再只是被动对象。二者通过 instruction tuning 和 collaborative prompt 一起学习剪枝决策。从方法脉络看它连接了几条线CoFi / L0 pruning可学习结构 mask。LoRA低成本训练和参数更新。Instruction tuning用指令数据保持泛化能力。Prompting让模型在剪枝语境下适应结构变化。如果放到你最近看的 LLM 剪枝方法里SparseGPT非结构化二阶重构one-shot。Wanda非结构化权重 × 激活one-shot。LLM-Pruner结构化dependency TaylorLoRA 恢复。LoRAPrune结构化LoRA-guided criterion。Sheared LLaMA结构化targeted pruning continued pretraining。Compresso结构化LoRA L0 mask 学习 collaborative prompt。所以它最准确的位置是training-based collaborative structured pruning for LLMs。二十四、一句话总结《Compresso: Structured Pruning with Collaborative Prompting Learns Compact Large Language Models》提出一种训练式 LLM 结构化剪枝框架它在 instruction tuning 过程中冻结原始 LLM用 LoRA 承载参数更新并通过 hard concrete / L0 正则学习 attention heads、FFN intermediate dimensions 和 hidden dimensions 的结构 mask同时设计 collaborative prompt告诉模型它正在被剪枝并鼓励它配合剪枝算法。Compresso 将 LLaMA-7B 压缩到 5.4B / 5B / 4.5B在 commonsense、reading comprehension、MMLU 和 BBH 上整体优于 LLM-Pruner说明训练式结构化剪枝在 LoRA 和 prompt 协作下仍然可以用于 LLM但它不是 one-shot 方法依赖 instruction tuning 数据和推理时 prompt因此成本和部署复杂度也高于 Wanda / SparseGPT。