ShortGPT: Layers in Large Language Models are More Redundant Than You Expect
发表:ICLR 2025(已提交)
连接:https://openreview.net/pdf?id=JMNht3SmcG
Abstract
随着大型语言模型(LLMs)性能的不断提升,其规模也显著增长,目前的 LLM 参数量达到数十亿甚至数万亿。在本研究中,我们发现 LLM 的各层之间存在显著的冗余现象,某些层对整体网络功能的贡献非常有限。为了量化这一点,我们引入了一个名为 Block Influence(层影响力,简称 BI) 的指标,该指标通过计算层输入和输出的相似度来衡量每一层的重要性。基于层冗余的观察,我们提出了一种简单的剪枝方法——层移除(layer removal),即根据 BI 分数删除冗余层。
我们的方法称为 ShortGPT,在性能上优于此前的最先进剪枝方法。此外,ShortGPT 与量化等方法是正交的,可以进一步减少模型参数和计算量。通过简单的层移除而非更复杂的剪枝技术实现更好的效果,表明不仅在 Transformer 模型中,在非 Transformer 模型中也存在高度的层冗余。我们希望这项工作能为未来的 LLM 压缩研究贡献力量。
1 Introduction
大型语言模型(LLMs)领域近来发展迅速,LLMs 在多个领域展现出令人印象深刻的性能。受以往研究中缩放定律(Kaplan 等,2020;Hoffmann 等,2022)的指导,当前的 LLM 研究通常通过增加模型参数量来提升性能。因此,现代 LLM 的参数规模从数十亿到数万亿不等,部署时对硬件资源的需求极高,极大地限制了其实际应用。
为缓解大模型对硬件的需求,模型压缩技术成为了关键研究方向(Zhu 等,2023)。这些技术大致可分为量化(Liu 等,2021;Gholami 等,2022;Dettmers 等,2022,2024)和剪枝(LeCun 等,1989;Han 等,2015;Frantar & Alistarh,2023)。量化通过降低模型参数的精度来减少存储和计算开销,但通常需要特定硬件的支持。相比之下,剪枝通过去除冗余参数减小模型规模和计算量,具有更灵活且与硬件无关的优点。然而,许多现有剪枝方法较为复杂,例如一些方法需要梯度信息(Ma 等,2024),这限制了它们的实用性。
本文聚焦于 LLM 的层级冗余问题,提出了一种简化模型的新方法。我们引入了 Block Influence(BI) 指标,用以量化每一层传递后隐藏状态的变化幅度,从而更直接地衡量层的重要性。基于这一指标,我们设计了简单且高效的剪枝方法 ShortGPT,通过识别并移除 BI 分数较低的冗余层,显著减少模型规模,同时性能损失很小。
为了验证我们的方法,我们在多个基准任务上进行了评估。实验结果表明,相较于现有方法,我们的方法在性能下降方面更为温和。例如,在 LLaMA 2-13B 模型(共40层)上移除10层(即25%层数)后,MMLU基准测试(Hendrycks 等,2020)上的成绩仅从55.0降至52.2。我们的发现表明,当前 LLM 存在大量层级冗余,未来通过减少模型内在冗余,有望提升训练和推理效率。
本论文的主要贡献总结如下:
-
我们分析了大型语言模型中的层级冗余,发现层级冗余显著,这启发我们通过简单地移除冗余层来剪枝模型。
-
我们提出了 Block Influence (BI) 作为衡量层重要性的指标。基于 BI,层移除方法在减少约 25% 参数的同时,仍能保持约 90% 的性能,超越了此前最先进的方法。
-
此外,我们证明了层剪枝方法与量化技术是正交的,可以结合使用,从而进一步降低 LLM 的部署开销。
2 Motivation
2.1 Background
当前主流的大型语言模型(LLMs)主要基于 Transformer 架构(Vaswani 等,2017),其中 Pre-Norm 结构是最常采用的配置,例如 LLaMA(Touvron 等,2023)等模型。Pre-Norm 配置指的是在自注意力(self-attention)层和前馈层(feed-forward layer)之前先进行层归一化(layer normalization)。这种设计带来了多种优势,包括更快的收敛速度、更稳定的训练过程以及对更深网络更好的可扩展性(Xiong 等,2020;Liu 等,2020;Wang 等,2024)。由于这些优点,Pre-Norm 结构甚至被应用到了非 Transformer 模型中,如 Mamba(Gu & Dao,2023)和 RWKV(Peng 等,2023)。为了便于描述,我们的分析主要聚焦于 Transformer 架构,但在第 4.4 节中也对非 Transformer 结构进行了实验扩展。
然而,我们观察到,在采用 Pre-Norm 的情况下,Transformer 各层输入和输出之间的相似度往往较高,如图 2 所示。这种高相似度表明某些层对隐藏状态的变化非常有限,暗示它们对模型整体功能的贡献较小。关于这一现象的详细数学解释见附录 A。该解释表明,采用 Pre-Norm 的深层可能并非模型整体功能的关键部分,也就是说大型语言模型中的层冗余可能比预期更严重,这一发现激发了我们基于层移除的剪枝方法,相关内容将在下一节展开讨论。
2.2 Layer redundancy
如前一节所述,我们推测大型语言模型(LLMs)存在层冗余现象。为了验证这一点,我们评估了移除两个流行模型中单层对性能的影响,分别是主要用于英文的 Llama2-7B-Base(Touvron 等,2023)和主要针对中文的 Baichuan2-7B-Base(Yang 等,2023)。图 1 证实了我们的推测,显示部分层对模型的整体表现影响不大,单独移除这些层造成的性能下降很小。此外,这种冗余主要出现在网络的中后层,而初始层和最后一层通常更为关键。
值得注意的是,我们发现最后一层尤其重要,这一点与 LLM Pruner(Ma 等,2024)的发现一致。该观察结果与我们在附录 A 中的数学解释有所矛盾——附录 A 中认为越深的层冗余越多。我们推测,这种差异产生的原因是最后的前馈网络(FFN)实际上在功能上类似于一个 token 分类器,应与语言模型的输出头(language model head)一并考虑。
为了验证我们的假设,我们进行了进一步的分析,详见表 1。结果显示,在最后一层中,FFN 组件至关重要,而注意力模块(Attention)则相对不那么关键。这一发现支持了我们对最后一层重要性的解释。
3 Methodology
在本节中,我们将介绍用于大语言模型(LLMs)层移除的剪枝方法的整体框架,并阐明其背后的基本原理与技术。我们首先提出用于评估每一层隐藏状态变换程度的新指标——Block Influence(BI),然后基于此指标,详细说明我们的层移除方法。
3.1 Layer importance
3.2 Layer Removal
我们的目标是获得一个尽可能接近原始模型的剪枝模型。由于大型语言模型(LLM)本质上是在各层中对隐藏状态(hidden states)进行一系列变换的过程,且我们可以评估每一层的重要性,因此我们提出了一种简单直接的剪枝方法:层移除(layer removal),我们将其称为 ShortGPT。具体地,我们基于 BI 分数删除 LLM 中的重要性较低的部分层。
首先,我们构建一个校准集(calibration set),该集合由一些无标签的文本样本组成,例如 PG19(Rae 等,2019)。然后,我们在这些样本上进行推理,收集模型各层的隐藏状态。接着,我们基于收集到的隐藏状态计算每一层的 BI 分数。最后,我们按照 BI 分数从小到大对各层排序,并删除得分较低的若干层。可以根据需求调整被删除的层数,以在推理速度与模型性能之间进行权衡。
我们关于层移除设置的详细信息见附录 D。
4 Experiments
4.1 Experimental Setup
模型
为了验证我们方法的有效性,我们在多个流行的开源大型语言模型上进行了实验,包括 Llama2-7B(Touvron 等,2023)、Llama2-13B、Baichuan2-7B 和 Baichuan2-13B。这些模型均基于仅解码器(decoder-only)的 Transformer 架构。LLaMA 2 的训练数据量超过 2 万亿个 token。Baichuan 系列主要针对中文训练,其 130 亿参数模型将 RoPE(Su 等,2024)位置编码替换为 ALiBi(Press 等,2021)。
评测基准
为了全面评估大型语言模型剪枝前后的能力变化,我们从五个方面进行了综合评测:
-
推理能力:CMNLI(Li 等,2024)、HellaSwag (HeSw)(Zellers 等,2019)、PIQA(Bisk 等,2020)。
-
语言理解:CHID(Zheng 等,2019)、WSC(Levesque 等,2012)。
-
知识问答:CommonSenseQA(CoQA)(Reddy 等,2019)、BoolQ(Clark 等,2019)。
-
考试题目:MMLU(Hendrycks 等,2020)、CMMLU(Li 等,2024)。
-
理解能力:Race-High/Middle (H/M)(Lai 等,2017)、XSum(Hasan 等,2021)、C3(Sun 等,2020)、PG19(Rae 等,2019)。
更多细节请参见附录 G。
对比方法(基线)
为了评估我们方法的效果,我们对比了几种大型语言模型的结构化剪枝方法,包括:
-
LLMPru(Ma 等,2024):采用基于梯度信息的结构剪枝,有选择地移除非关键的耦合结构,最大程度保留 LLM 的主要功能。LLMPru 会对剪枝后的模型进行后训练,但为公平起见,我们的对比未使用后训练。
-
SliceGPT(Ashkboos 等,2024):一种后训练稀疏化方案,通过用更小的矩阵替代原有权重矩阵来减少嵌入维度。具体做法是对浅层到深层的隐藏表示应用主成分分析(PCA),并将降维矩阵融合进现有网络参数中。
-
LaCo(Yang 等,2024):一种基于层合并的剪枝方法,从深层向浅层逐步合并相似层,并设置阈值以避免过度合并。
在评估过程中,我们使用 PG19 数据集计算层重要性和困惑度。所用模型、基线和评测基准与 LaCo 保持一致。
4.2 Main Results
为了验证我们提出方法的有效性,我们针对大型语言模型评估中常用的基线技术进行了对比实验。鉴于当前结构化剪枝方法一般参数削减不超过30%,我们在实验中选择了约四分之一的参数进行剪枝。实验结果展示于表2中,关于不同参数削减比例的更多实验将在后续章节讨论。
结果表明,我们方法剪枝后的模型性能显著优于基线方法,能够较好地保持大型语言模型的能力。此外,我们注意到,通过减少层数(ShortGPT/LaCo)的方法优于减少嵌入维度(LLMPru./SliceGPT)的方法,这意味着模型在深度方向上的冗余远大于宽度方向的冗余。更多的实验分析将在后续章节呈现。
在表2的实验中,我们完全采用了 LaCo 论文中的基准、模型和剪枝比例。为了更公平地与 LLMprun. 和 SliceGPT 进行比较,我们还采用了它们原论文中的基准、模型和剪枝比例,相关实验结果见附录C。与表2中的发现一致,这些实验进一步证明了现有大型语言模型中存在显著的层冗余,且 ShortGPT 相较于其他剪枝方法表现更佳。
结果显示,粗粒度的剪枝方法(如移除整层)往往优于细粒度方法(如 SliceGPT 或 LLM Pruner)。我们推测原因在于大型语言模型具有极强的鲁棒性,正如图1所示,单独移除任何深层都对最终输出影响甚微,这也表明对更细粒度的模块定义重要性并执行剪枝是非常困难的。
4.3 Varying metric and pruning ratio
我们方法的核心原则是根据层的重要性对其进行排序,然后去除那些较不重要的层。重要性度量的选择对最终效果影响显著。本节中,我们定义并比较了几种不同的重要性度量方法:
-
顺序(Sequential):重要性与层的顺序正相关,较浅的层重要性较低。可通过将层的索引取负值作为其重要性指标来实现。
-
范数/逆序(Norm/Reverse-order):该指标认为重要性与层的顺序成反比,较浅的层得分更高。此方法的排序与通过隐藏状态范数测量的重要性相同,如图4所示。
-
相对幅度(Relative Magnitude):由Samragh等人(2023)提出,该指标认为层的函数
时,层的重要性更高,这里 f表示层的变换函数。
-
BI(Block Influence):我们使用第3.1节中介绍的BI分数作为重要性度量。
图4展示了不同指标的比较。我们观察到,在LLM网络中,较浅的层比较深的层更为关键。图5显示了基于不同指标移除层后的结果,表明我们提出的BI指标优于其他指标。相对幅度指标竞争力也很强,表明相对值在一定程度上能够反映层的重要性。值得注意的是,仅考虑MMLU基准时,隐藏状态范数似乎是个不错的指标,但其困惑度表现相对较差。
作为剪枝方法,我们进一步验证了不同剪枝比例对模型性能的影响。实验在Llama2和Baichuan2模型上进行,观察了困惑度(Perplexity)和MMLU表现。Llama2的结果如图5所示,模型性能随着剪枝比例增加总体呈下降趋势,但我们观察到一个显著现象:MMLU分数在某个特定层出现了骤降。这一突降现象表明网络中存在某些关键层,在维持性能上起着尤为重要的作用。Baichuan2模型也表现出类似的模式,详见附录B。
4.4 Redundancy on non-transformer LLM
为了验证观察到的深度冗余现象是否特定于Transformer架构,我们将研究范围扩展到了两种流行的非Transformer模型,RWKV-7B(Peng 等,2023)和 Mamba-2.8B(Gu & Dao,2023)。实验结果表明,这些模型在移除部分层时同样表现出较强的鲁棒性,性能依然能够保持稳定。该发现表明,冗余现象可能并非Transformer模型所独有,而是当前大型语言模型中的一种普遍特性。
表3展示了我们的方法同样适用于并有效提升了Mamba和RWKV模型的剪枝效果,进一步印证了冗余现象在现有大型语言模型中的普遍性。然而,值得注意的是,RWKV模型的冗余程度似乎低于Mamba和Transformer模型,这一点值得后续深入研究。
4.5 Orthogonal to Quantization
在本节中,我们展示了我们的方法与量化方法是正交的。我们将该方法应用于使用GPTQ算法量化的Llama2-7B模型。表4显示,我们的方法与量化类方法兼容。此外,我们还比较了先进行剪枝后再进行量化的性能表现。表5中的结果进一步表明,量化和ShortGPT剪枝是相互独立且可组合的操作。
4.6 Post training to restore performance
为了减轻因删除层而导致的性能损失,我们借鉴了Chen等人(2024年)提出的后训练策略。我们的方法包括两个关键步骤:
1)替换:用轻量级的多层感知机(MLP)模块替代被移除的层。
2)再训练:随后对修改后的模型进行再训练。
表6的结果展示了后训练在恢复性能损失方面的潜力。训练的详细信息见附录F。
5 Limitation
尽管我们的方法在与现有剪枝方法的比较中表现出较强的竞争力,但仍有一些现象尚未得到解释。我们的实验表明,删除层对生成任务的负面影响比对多项选择任务更为显著。当我们从 Llama2-7B 或 Baichuan2-7B 中删除 25% 的层时,生成任务(如 XSum 和 C3)上的性能几乎降至零,尽管在更大的 13B 模型上性能下降并不那么明显。我们推测,相较于多项选择任务,生成任务更容易出现误差累积的问题,而大型模型比小型模型更具鲁棒性。其背后的具体原因仍需进一步探索。第4.6节讨论的后训练技术有望缓解这一问题,值得进一步研究。
6 Related works
为了降低大型语言模型的推理成本并提升其实用性,近年来有许多关于模型压缩的研究,主要可以分为两类:模型剪枝和量化。此外,还有一些工作专注于研究模型的冗余性,这是实现模型压缩的关键。
模型剪枝:模型剪枝(LeCun 等,1989;Han 等,2015)是一种经典且有效的减少模型冗余模块以压缩模型的方法。剪枝方法主要分为非结构化剪枝和结构化剪枝两种。非结构化剪枝通过移除特定参数简化大型语言模型(LLM),而不考虑其内部结构,如 SparseGPT(Frantar & Alistarh,2023)和 LoRAPrune(Zhang 等,2023)。然而,该方法忽视了整体的模型结构,导致模型呈现不规则的稀疏结构。更为实用的方法是结构化剪枝。比如 GUM(Syed 等,2023)对多种面向解码器结构的 LLM 结构化剪枝方法进行了分析;LLM-Pruner(Ma 等,2024)基于梯度信息有选择地移除非关键结构;ShearedLLaMA(Xia 等,2023)采用了有针对性的结构化剪枝和动态批处理加载;LaCo(Yang 等,2024)通过合并层进行模型压缩。与上述方法相比,我们的方法是一种简单且高效的结构化剪枝方法。
量化:量化(Liu 等,2021;Gholami 等,2022;Dettmers 等,2022,2024)是模型压缩领域广泛采用的技术,能够显著节省深度学习模型的存储和计算成本。传统模型通常以浮点数形式存储,而量化则将其转换为整数或其他离散形式。LUT-GEMM(Park 等,2022)仅对权重进行量化,并使用 BCQ 格式优化 LLM 中的矩阵乘法;SPQR(Dettmers 等,2023)识别并隔离异常权重,对其进行高精度存储,同时将其他权重压缩至 3-4 位。我们的模型剪枝方法与量化方法是正交的,这意味着基于我们剪枝后的模型进行量化可以进一步压缩模型。
模型冗余:研究者们早已注意到非线性模型中存在显著冗余(Catchpole & Morgan,1997)。近年来,Transformer 架构被广泛应用,研究者们也开始关注其冗余性。在 Bian 等(2021)的研究中,分析了注意力机制中的冗余,发现注意力头之间存在明显且相似的冗余模式(簇状结构)。Dalvi 等(2020)分析了两种预训练模型 BERT(Devlin 等,2018)和 XLNet(Yang 等,2019),研究了它们在表示层面和更细粒度的神经元层面上存在的冗余程度。然而,当前基于解码器结构的大型语言模型中的冗余性仍有待深入探索。
7 Conclusion
在本研究中,我们揭示了大型语言模型(LLMs)中显著的按层冗余现象。我们的研究表明,某些层对整体网络功能贡献甚微,可以在不显著影响模型性能的情况下被移除。基于这一观察,我们引入了“块影响力”(Block Influence)指标来量化每一层的重要性,并提出了一种简单直接的剪枝方法——移除部分层。实验结果表明,在减少约 25% 参数量和计算量的同时,仍能保持模型性能约 90%。此外,我们的方法与量化技术是正交的,并且可以通过持续训练进一步提升性能。我们希望这项工作能够为未来的模型压缩技术提供一定的启示。同时,我们的研究也为未来通过减少固有冗余来提升模型训练效率提供了潜在方向。