大型语言模型(LLMs)在语言理解和文本生成方面取得了显著的成功(Brown, Touvron, Lavril, Izacard, Martinet, Lachaux, Lacroix, Rozière, Goyal, Hambro, Azhar等人,Scao, Fan, Akiki, Pavlick, Ili?, Hesslow, Castagné, Luccioni, Yvon等人)。然而,LLMs的出色性能伴随着巨大的模型规模和高计算开销,这限制了它们在许多场景中的部署,尤其是在边缘设备上。模型压缩技术为这个问题提供了解决方案。最近的尝试主要集中在量化或非结构化剪枝上(Chen, Chen, Wang, Dai, Tsang, Liu, 2024a; Frantar, Alistarh, 2023; Frantar, Ashkboos, Hoefler, Alistarh, 2022; Sun, Liu, Bair, & Kolter, Xiao, Lin, Seznec, Wu, Demouth, Han, 2023)。然而,低比特模型引入了额外的量化和反量化开销,需要精心设计的核来加速推理(Lin等人,2024b)。另一方面,具有任意稀疏模式的非结构化剪枝需要极高的稀疏比例和硬件协同设计来加速推理(Shi, Wang, Chu, 2020; Wang, 2020)。相比之下,结构化剪枝以有序的方式从网络中移除某些权重(例如行、列或层),直接减少了计算和内存开销,并使通用设备能够加速(Song等人,2024)。根据训练需求,剪枝方法可以分为无需重新训练和需要重新训练的方法。现有的LLMs无需重新训练的方法通常基于启发式信息进行误差补偿(An等人,2024;Wang等人,2024a)或引入额外参数(Ashkboos等人,2024a),导致结果不佳。另一方面,基于重新训练的LLMs剪枝通常使用LoRA(Hu等人,2021)来微调整个剪枝模型,这通常耗时且数据密集。为了解决这些挑战,我们提出了OOPS,一个基于异常值感知和二次规划的结构性剪枝框架,旨在提高剪枝模型在无需重新训练和需要重新训练场景下的性能。
在进行结构化剪枝时,有两个关键挑战:? 确定适当的剪枝结构。? 实施有效的策略来恢复剪枝后的网络性能。对于第一个方面,受到LLM.int8()(Dettmers等人,2022)的启发,我们关注激活异常值,确保剪枝后保留与异常值对应的权重通道。此外,考虑到注意力(Attention)和前馈网络(FFN)模块的不同重要性,我们采用网格搜索方法在具有分组查询注意力(GQA)(Ainslie等人,2023)的模型中平衡剪枝参数。关于第二个方面,我们提出的方法包括两个组成部分:模块级重建和逐层蒸馏。为了最小化剪枝后的输出误差,我们为每个模块的输出权重制定了一个二次规划(QP)问题。解决这个问题可以在无需重新训练的情况下实现性能恢复。此外,为了进一步最小化输出误差,引入了逐层蒸馏来单独训练剪枝后的层。与现有的基于LoRA的重新训练方法(Guo, Xu, Zhang, & Yang, Ma, Fang, Wang, 2023)相比,OOPS需要的计算资源更少(仅需要80G A800 GPU即可处理70B模型),并且在使用更少数据的情况下实现了相当或更好的结果(52k对比256)。我们方法的概述如图1所示,可以分为两部分:剪枝结构选择(①)和剪枝后网络的性能恢复(②和③)。总结我们工作的贡献:
- •
在确定剪枝结构时,我们关注异常值,确保它们得到保护。我们还引入了网格搜索方法来平衡MHA和FFN模块之间的参数。
- •
在剪枝过程中,我们基于QP优化问题对权重进行剪枝和重建。此外,我们为剪枝后的模型引入了逐层蒸馏,与LoRA重新训练相比,它在更少的资源和数据下实现了更好的性能。
- •
我们通过广泛的实验评估了OOPS的有效性。实验结果表明,OOPS在不同模型和条件下都优于现有方法。