LaCo: Large Language Model Pruning via Layer Collapse 解读
一、论文基本信息
论文题目:LaCo: Large Language Model Pruning via Layer Collapse
作者:Yifei Yang、Zouying Cao、Hai Zhao
发表:Findings of EMNLP 2024
方法名称:LaCo,Layer Collapse
论文代码:作者公开了官方实现,目前主要以 LLaMA2 和 Baichuan2 的 Jupyter Notebook 为主,仓库也说明代码仍是初步版本,尚未封装成通用剪枝工具。
一句话概括:
LaCo 不直接删除冗余层,也不训练新的小模型,而是先把若干连续后续层的“参数差异”累加到前面的一个层中,再删除这些后续层,以此把多个 Transformer 层折叠成一个层。
它属于:
训练后、层级结构化剪枝、深度压缩、参数融合式剪枝。
二、这篇论文要解决什么问题?
前面看过的几种 LLM 剪枝路线分别是:
SparseGPT、Wanda:删除单个权重,产生非结构化稀疏;
LLM-Pruner、LoRAPrune、Compresso:删除 head、FFN channel、hidden dimensions 等结构;
Sheared LLaMA:同时压缩深度和宽度,再继续预训练;
ShortGPT:根据层输入输出相似性,直接删除完整 Transformer 层。
LaCo 关注的是一个更具体的问题:
如果多个相邻 Transformer 层高度相似,能不能不把它们直接丢掉,而是把它们包含的参数变化合并进一个保留层中?
直接删层虽然简单,但被删除层中学习到的信息也完全消失。LaCo 希望通过层折叠保留一部分被删层的参数信息,同时得到层数更少的标准稠密模型。作者的动机来自两项观察:相邻层对应权重矩阵之间变化较小,而且相邻层输出隐藏状态的余弦相似度通常很高。
三、LaCo 的核心:RDSC Layer Merge
LaCo 首先提出:
Reserving-Differences-while-Seeking-Common Layer Merge,RDSC 层合并。
假设第 l 层参数为,其后有 m 个连续层:
LaCo 先计算每个后续层相对于第 (l) 层的参数差异:
然后把这些差异累加到第 (l) 层:
合并完成后,后面的 m个层被删除,只留下参数更新后的第 l 层。论文分别对 Self-Attention 和 MLP 中形状对应的参数执行该操作。
四、用一个简单例子理解 Layer Collapse
假设要把连续四层:
折叠成一层。
LaCo 计算:
然后删除:
最终四层变成一层。
这里必须注意:LaCo 不是简单平均这四层参数。
它也不是直接保留其中某一层,更不是知识蒸馏。它把第 (l) 层看成多个相邻层之间的“共同基准”,再把其他层相对该基准的差异累积起来。因此作者称其为:
Seeking Common:保留共同的基准层;
Reserving Differences:累加其他层相对基准层的差异。
五、这个参数合并为什么可能有效?
LaCo 的动机有两部分。
1. 相邻层参数相近
论文比较了 LLaMA2-7B 和 Baichuan2-7B 相邻层中 Q、K、V、MLP up/down 矩阵的差异。作者观察到,在数千万参数的大矩阵中,相邻层对应参数整体变化相对有限。
2. 相邻层表示高度相似
作者用 Wikipedia 句子前向推理,计算相邻层输出隐藏状态的余弦相似度。LLaMA2-7B 和 Baichuan2-7B 的第 3 至第 28 层之间,相邻层输出相似度普遍接近 1。
作者还把第 10 至第 19 层按每四层折叠为一层,折叠前后的最终表示余弦相似度最低仍高于0.996。这表明至少在少量校准文本上,参数差异合并可以较好地保持最终隐藏表示。
但这只是经验依据,并不是严格证明。函数复合并不等于参数相加,后面会详细讨论这一局限。
六、LaCo 不是盲目合并,而是边合并边验证
仅凭参数相似就直接折叠大量层风险很高,因此 LaCo 在每次候选合并后都会检查:
折叠模型的最终隐藏表示,是否仍然与原始模型足够相似?
它需要五个主要设置:
| 符号 | 含义 |
|---|---|
| (C) | 每次参与折叠的连续层数 |
| ([L,H]) | 允许执行折叠的层范围 |
| (I) | 两次成功折叠之间的最小层间隔 |
| (D) | 少量校准句子 |
| (T) | 折叠模型与原模型的表示相似度阈值 |
对一个候选折叠模型,LaCo 分别运行原模型和候选模型,取得最后一层输出隐藏状态,计算两者在校准句子上的平均余弦相似度。
相似度 (s>T):接受本次折叠;
相似度 (s\leq T):拒绝本次折叠,换一个位置继续尝试。
这相当于给参数合并加了一道输出层面的安全检查。
七、完整算法流程
LaCo 从较高层向较低层扫描,因为作者希望把后面的层折叠进前面的层。
具体流程如下:
原始模型复制为当前模型 (M^*)。
从允许范围的高层位置开始。
选择当前层 (l),尝试把其后的 (C-1) 层折叠到它里面。
删除被折叠的后续层,形成候选模型 (M_{\text{tmp}})。
用少量校准句子分别运行原模型和候选模型。
比较两个模型最终隐藏状态的平均余弦相似度。
如果超过阈值,接受合并,并向前移动至少 (I) 层。
如果不超过阈值,拒绝合并,只向前移动一层。
重复直到扫描到最低允许层。
LaCo 不需要梯度、Hessian、LoRA 或蒸馏。其最坏情况复杂度主要取决于层数和校准句子数。论文以 40 层的 LLaMA2-13B 和 10 条校准句子为例,最多只需要处理约 400 次句子前向。
八、为什么设置层间隔 (I)?
假如刚把第 20 至第 23 层折叠成一层,接着又立即折叠其相邻层,那么两次参数近似误差可能集中在同一区域。
因此 LaCo 设置最小间隔 (I),避免连续折叠区域过于密集。
它体现了一个重要判断:
即使每次单独折叠都能通过表示相似度检查,多个相邻折叠操作的误差仍可能叠加。
论文主实验通常设置 (I=2),并针对不同模型选择不同的 (C) 和相似度阈值 (T)。
九、相似度阈值如何控制剪枝率?
LaCo 不能像 Wanda 那样直接指定“剪掉 30% 权重”,它通过阈值 (T) 间接控制压缩程度。
阈值高:要求折叠后与原模型非常相似,接受的折叠少;
阈值低:允许更大的表示偏差,接受的折叠多。
在 LLaMA2-7B 上:
| 阈值 (T) | 剩余层数 | 参数剪枝率 |
|---|---|---|
| 0.85 | 29 | 9.0% |
| 0.65 | 23 | 27.1% |
| 0.45 | 16 | 48.0% |
| 0.25 | 12 | 60.1% |
但随着阈值下降,BoolQ、PIQA 和 HellaSwag 都会明显恶化。(arXiv)
所以 LaCo 的实际控制逻辑是:
不是直接要求删多少,而是要求最终表示最多能偏离原模型多少。
这比固定剪枝率更符合“功能保持”的目标,但也使目标压缩率不容易精确控制。论文将其列为主要局限之一。
十、LaCo 剪的到底是什么?
LaCo 剪的是:
完整 Transformer layers。
每次折叠后,多个连续层变成一个层,因此它属于:
Layer-level structured pruning
也可以称为:
Depth compression with parameter fusion
剪枝后:
层数减少;
参数量减少;
KV Cache 对应层数减少;
每个 token 执行的 Transformer block 数减少;
每个保留层内部的 hidden size、head 数和 FFN intermediate size不变;
最终仍然是规则的稠密模型,不需要稀疏算子。
论文所说的“保持模型内部结构”,更准确地理解为:
保留每个 Transformer block 的标准内部维度和算子结构,只减少 block 数量。
它并不是完全不改变网络结构,因为总深度显然发生了变化。
十一、实验设置
论文主要测试四个基础模型:
LLaMA2-7B
LLaMA2-13B
Baichuan2-7B
Baichuan2-13B
其中 LLaMA2 使用 10 条英文 Wikipedia 句子校准;Baichuan2 使用 5 条英文和 5 条中文 Wikipedia 句子。评估覆盖 reasoning、language、knowledge、examination 和 understanding 五类能力,并同时包含基于困惑度和直接生成的任务。
基线主要包括:
LLM-Pruner
SliceGPT
二者都属于结构化压缩方法。
十二、主要实验结果
LLaMA2-7B
| 方法 | 参数剪枝率 / 剩余层数 | 平均分 | 相对性能 |
|---|---|---|---|
| Dense | 0% / 32 | 46.55 | 100% |
| LLM-Pruner | 27.0% / 32 | 32.36 | 67.79% |
| SliceGPT | 26.4% / 32 | 31.87 | 67.37% |
| LaCo | 27.1% / 23 | 37.46 | 80.28% |
LLaMA2-13B
| 方法 | 参数剪枝率 / 剩余层数 | 平均分 | 相对性能 |
|---|---|---|---|
| Dense | 0% / 40 | 55.50 | 100% |
| LLM-Pruner | 24.4% / 40 | 36.19 | 65.87% |
| SliceGPT | 23.6% / 40 | 34.97 | 61.78% |
| LaCo | 24.6% / 30 | 47.55 | 85.21% |
Baichuan2
Baichuan2-7B 在约 24.2% 剪枝下保留73.26%的平均性能;Baichuan2-13B 在约 24.7% 剪枝下保留87.94%。四个模型中,有三个模型在约 25%–30% 压缩后保留了超过 80% 的平均任务性能。
十三、生成任务上的稳定性
论文特别强调了 CHID、XSum 和 WSC generation 等生成式评估。
LLM-Pruner 和 SliceGPT 在部分生成任务中会出现无意义重复,个别结果甚至为 0;LaCo 的生成结果相对稳定。作者认为,这是因为 LaCo 没有直接丢弃所有被删除层的信息,而是把参数差异融入保留层中。
但这并不意味着 LaCo 对生成完全无损。例如 LLaMA2-13B 的 XSum 分数仍从23.56降至14.45,说明层折叠依然会明显损害部分生成能力。
因此更准确的评价是:
LaCo 比直接删除内部结构更不容易生成崩溃,但并不能无损保留生成能力。
十四、困惑度结果并不算接近无损
在 LLaMA2-7B 约 27% 剪枝率下:
| 方法 | PPL |
|---|---|
| Dense | 4.46 |
| LaCo | 13.93 |
| LLM-Pruner | 17.30 |
| SliceGPT | 14.51 |
LaCo 确实优于两个结构化剪枝基线,但与原始模型相比,困惑度仍从4.46 上升到 13.93。
这是理解论文时必须注意的一点:
LaCo 的“保持性能”主要是相对于其他高比例结构化剪枝方法,而不是相对于原模型几乎无损。
它在多个选择题和分类式任务上保持较好,但基础语言建模能力已经发生明显退化。
十五、剪枝速度、显存和推理速度
在单张 A100 上对 LLaMA2-7B 做约 27% 剪枝时,论文报告:
| 方法 | 核心剪枝时间 |
|---|---|
| LaCo | 14.7 秒 |
| LLM-Pruner | 15.9 秒 |
| SliceGPT | 313 秒 |
该时间不包括模型加载、数据加载和模型保存,只统计核心剪枝过程。
在 LLaMA2-13B 上:
| 方法 | 显存占用 | 推理速度 |
|---|---|---|
| Dense | 25,902 MB | 29.98 token/s |
| LLM-Pruner | 19,874 MB | 27.15 token/s |
| SliceGPT | 22,506 MB | 35.16 token/s |
| LaCo | 19,422 MB | 38.65 token/s |
LaCo 相比原模型大约减少四分之一显存,并将吞吐从 29.98 提升到 38.65 token/s。由于它直接减少完整层数,推理仍使用普通 dense kernels,不存在非结构化稀疏无法利用的问题。
十六、剪枝后是否还需要训练?
LaCo 的基本版本是无需训练的。但作者额外研究了 post-training,以验证折叠模型是否真正继承了原模型的参数基础。
作者分别对剪枝后的 LLaMA2-7B 和 Baichuan2-7B 做全参数继续训练:
LLaMA2-7B:约 1B tokens,4 张 A100 80GB,约 28 小时;
Baichuan2-7B:约 1.25B tokens,4 张 A100 80GB,约 35 小时。
两者训练 loss 都很快下降并趋于稳定,说明折叠模型确实继承了一部分原模型能力。
不过任务结果并非都提升:
LLaMA2-7B 平均分由37.46 提升到 40.33;
Baichuan2-7B 平均分反而由41.79 降至 40.46。
作者将后者归因于继续训练数据和 Baichuan2 原始预训练数据分布不匹配。
这说明:
LaCo 可以快速恢复,但恢复效果高度依赖继续训练数据的规模和分布。
十七、不同压缩率下的表现
LaCo 在 LLaMA2-13B 上的结果比较清晰:
| 剪枝率 / 剩余层数 | 平均分 |
|---|---|
| 0% / 40 | 55.50 |
| 14.6% / 34 | 53.89 |
| 24.7% / 30 | 47.55 |
| 49.7% / 20 | 38.27 |
轻度剪枝约 15% 时,性能下降很小;达到 25% 左右后仍然可用;剪掉接近一半参数时,平均性能只保留约 69%。LLaMA2-7B 也表现出类似趋势。
因此 LaCo 比较合理的工作区间是:
约 10%–30% 的层级压缩。
接近 50% 时,模型虽然没有完全崩溃,但语言、知识和推理能力均会明显下降。
十八、LaCo 和 ShortGPT 的核心区别
这两篇论文都做完整层压缩,但机制完全不同。
| 对比项 | ShortGPT | LaCo |
|---|---|---|
| 层重要性依据 | 层输入输出余弦变化 | 候选折叠模型与原模型最终表示相似度 |
| 被删层如何处理 | 直接删除 | 参数差异合并到前一层 |
| 是否保留被删层信息 | 基本不保留 | 尝试通过参数融合保留 |
| 剪枝搜索 | 按 BI 全局排序 | 从高层向低层逐步尝试 |
| 输出模型 | 更浅的 dense 模型 | 更浅的 dense 模型 |
| 是否需要训练 | 否 | 否 |
可以把二者理解为:
ShortGPT:低影响层直接拿掉;
LaCo:把连续层压缩进一个代表层。
因此 LaCo 更接近layer merging / layer fusion,而 ShortGPT 更接近传统layer dropping。
十九、LaCo 和其他 LLM 剪枝方法的区别
与 SparseGPT、Wanda
SparseGPT、Wanda 删除单个权重,矩阵形状和模型深度不变;LaCo 删除完整层,直接缩短模型深度。
因此:
SparseGPT/Wanda:非结构化权重稀疏;
LaCo:层级结构化剪枝。
与 LLM-Pruner、LoRAPrune
LLM-Pruner 和 LoRAPrune 删除 head、FFN channel 等内部结构,保留原始深度;LaCo 保留每层内部宽度,但删除大量完整层。
前者属于宽度剪枝,LaCo 更偏深度压缩。
与 Sheared LLaMA
Sheared LLaMA 会剪 layer、head、hidden dimension、FFN dimension,并继续预训练 50B tokens。LaCo 只折叠层,基本版本无需训练。
Sheared LLaMA 更适合生产高质量小型 base model;LaCo 更适合快速压缩已有模型。
与 Compresso
Compresso 需要 LoRA、可学习 L0 mask、instruction tuning 和提示协同;LaCo 只需要少量句子前向校准。
LaCo 的成本远低,但对复杂能力的恢复能力也更有限。
二十、方法优点
第一,剪枝过程简单、速度快。
只涉及参数减法、参数加法和少量前向相似度评估。
第二,不需要梯度或微调。
基础版本无需训练数据、反向传播或 optimizer。
第三,得到规则的稠密模型。
层数减少后可直接使用普通推理框架,不依赖稀疏硬件。
第四,比直接删层更重视信息保留。
被删除层的参数差异被合并进保留层,而不是完全丢弃。
第五,适用于不同语言模型。
论文在 LLaMA2、Baichuan2 以及附录中的 LLaMA2-70B 上进行了验证。
二十一、方法局限
1. 参数相加不等于函数复合
连续 Transformer 层执行的是:
LaCo 却试图用一个参数合并后的单层近似这段非线性复合。
通常并不存在:
因此 RDSC 缺少严格的函数近似理论。论文也承认目前没有完整理论证明。
2. 参数空间未必天然对齐
两个相邻层即使功能相似,其 attention heads 或 FFN neurons 也可能采用不同的内部表示基底。直接逐元素相减和相加,隐含假设是:
相同索引的参数具有相同语义。
这个假设并不总成立。
3. 最终表示相似可能掩盖能力损失
LaCo 用少量普通句子检查最终隐藏状态平均余弦相似度。即使平均相似度很高,也可能丢失:
数学推理;
长上下文;
代码;
罕见知识;
少数关键 token 的表示。
因此十条 Wikipedia 句子无法覆盖模型的全部能力分布。
4. 不能精确控制剪枝率
LaCo 通过 (C、I、T、[L,H]) 等超参数间接控制结果,需要反复调试才能得到目标层数。
5. 基础语言建模能力下降明显
虽然 LaCo 在任务平均分上优于结构化基线,但 LLaMA2-7B 的 PPL 从 4.46 升至 13.93,说明它并非近乎无损。
6. 官方实现仍较初步
官方仓库目前主要提供两个 Notebook,尚不是适用于任意 Hugging Face 模型的一键式通用框架。(GitHub)
二十二、整体评价
LaCo 最有价值的地方,是把 LLM 层剪枝从“删除层”推进到了“融合后再删除层”。
它的基本判断是:
相邻层既有共同部分,也有不同部分;共同部分可以由一个保留层承担,不同部分则通过参数差异累加保留下来。
这个思路非常简单,甚至有些大胆,因为深层网络的函数复合通常无法通过参数线性叠加精确表达。但实验说明,在相邻层高度相似、压缩率适中的情况下,这种粗糙近似确实能够工作。
从最近几篇 LLM 剪枝论文的脉络看:
SparseGPT:剪单个权重,用二阶重构补偿;
Wanda:剪单个权重,用权重和激活评分;
LLM-Pruner:删除耦合结构组;
LoRAPrune:用 LoRA 梯度指导结构剪枝;
Sheared LLaMA:剪到目标架构后继续预训练;
Compresso:用 LoRA、L0 mask 和提示学习结构;
ShortGPT:直接删除表示变化小的层;
LaCo:先融合连续层的参数差异,再删除后续层。
因此,LaCo 最准确的定位是:
training-free, calibration-based, layer-level structured pruning through parameter fusion。
二十三、一句话总结
《LaCo: Large Language Model Pruning via Layer Collapse》提出一种参数融合式层剪枝方法:对于若干连续 Transformer 层,LaCo 以第一层为基准,计算后续层相对它的参数差异,并把这些差异累加回第一层,然后删除后续层;每次候选折叠后,再用少量校准句子检查折叠模型和原模型最终隐藏状态的余弦相似度,只有超过阈值才接受。LaCo 不需要梯度或微调,在 LLaMA2-13B 上把 40 层压缩到 30 层、剪掉约 24.6% 参数后,仍保留约 85.2% 的平均任务性能,并获得真实显存和吞吐收益。它比 ShortGPT 的直接删层更重视被删层信息保留,但参数线性合并缺乏严格理论,困惑度仍明显上升,且结果依赖校准数据和相似度阈值。