文献解析与总结:LLM-Pruner - 大型语言模型的结构化剪枝
1. 研究背景
大型语言模型(LLM)在理解和生成语言方面表现卓越,但其庞大的模型规模带来了部署、推理和训练上的挑战。现有的压缩方法(剪枝、知识蒸馏、量化等)大多针对特定任务进行优化,而LLM作为通用任务求解器,需要一种任务无关的压缩方案,以尽可能保持其多任务解决能力。
2. 研究目标
LLM-Pruner 旨在在不依赖原始训练数据的前提下,对大型语言模型进行任务无关的结构化剪枝,并在尽可能短的时间内恢复剪枝后的模型性能。
主要挑战:
- 大规模训练数据的不可获得性:传统方法依赖于LLM的原始训练数据,而这些数据往往规模庞大(1万亿tokens以上),难以获取或传输。
- 剪枝后微调时间过长:现有方法的微调通常需要数天至数周,例如TinyBERT的蒸馏需要14个GPU天,而本研究目标是极大减少训练时间。
3. 核心技术
LLM-Pruner 主要由依赖结构检测、剪枝重要性评估和快速恢复三部分组成:
(1) 依赖结构检测
LLM-Pruner 采用依赖图构建算法来识别模型内部的结构依赖关系,以确保剪枝操作不会破坏模型的整体计算逻辑。例如:
- 若某个神经元仅依赖于另一个神经元,则剪枝该神经元时,必须同步剪枝其依赖的神经元。
- 通过遍历模型神经元构建依赖关系图,自动识别所有相互依赖的结构。
(2) 剪枝重要性评估
对已检测出的依赖结构进行重要性评估,决定剪枝哪些结构,以最大程度保持模型的整体功能。
重要性计算方式:
- 向量级重要性:计算某一组权重的梯度变化,并结合近似Hessian矩阵评估剪枝对损失函数的影响。
- 参数级重要性:逐个计算权重参数的影响,并采用Fisher信息矩阵近似Hessian矩阵。
- 分组重要性聚合:包括加和法、最大值法、乘积法和最后执行单元法,确保剪枝后模型仍然能有效工作。
(3) 快速恢复
LLM-Pruner采用低秩近似(LoRA) 进行微调,仅优化少量参数以快速恢复剪枝后的模型性能:
- 在每个线性层的权重更新
ΔW
进行低秩分解 ΔW = PQ
,其中 P, Q
具有较低的维度,从而降低计算量。
- 仅需 3小时 和 50K条公开数据 即可完成微调。
4. 实验结果
LLM-Pruner在LLaMA-7B、Vicuna-7B、ChatGLM-6B 三种LLM上进行了实验,分别评估了零样本分类任务和文本生成能力。
(1) 剪枝后性能
- 剪枝20%参数后,LLM-Pruner能保持**94.97%**的原始性能,而现有的任务特定压缩方法通常会损失更多信息。
- 剪枝50%参数后,性能有所下降,但仍可通过快速恢复减少影响。
(2) 剪枝策略比较
- 块级剪枝(Block Pruning)(剪枝整个MLP层或多头注意力)比 通道剪枝(Channel Pruning)(剪枝某些维度)表现更稳定。
- 全局剪枝(Global Pruning)(在整个模型范围内排序剪枝)略逊于 局部剪枝(Local Pruning)(在各层单独排序剪枝)。
(3) 量化与剪枝的结合
- LLM-Pruner可以与 8-bit 量化(LLM.int8) 结合,在减少内存使用的同时,仍能保持较好的推理速度。
5. 研究贡献
- 首次提出 LLM 的任务无关结构化剪枝,即无需特定任务数据,即可高效剪枝并恢复模型。
- 显著减少训练数据需求,仅需50K条公开数据,而非完整的LLM训练数据集。
- 大幅加速剪枝后恢复,剪枝+恢复仅需 3小时,相比TinyBERT的14 GPU天,效率大幅提升。
- 自动化剪枝框架,可应用于不同的LLM架构,无需手动设计剪枝策略。
6. 未来工作
- 研究高压缩率剪枝(>50%)的优化方法,以减少剪枝后性能损失。
- 探索剪枝后如何增强文本生成质量,避免长文本生成中的重复和无意义句子问题。
- 结合其他压缩技术(如知识蒸馏)进一步提升小模型的有效性。
7. 结论
LLM-Pruner 提供了一种任务无关、低数据需求、快速恢复的结构化剪枝方法,可用于高效压缩LLM并保持其通用任务能力。该方法在多个LLM上实验验证,能够在削减参数的同时,维持较高的推理能力,为LLM的高效部署提供了新的思路。