NeurIPS 2024 | 突破性全局剪枝技术SparseLLM:大语言模型稀疏化革命

fee69b617126890106b6931b9c47051d.gif

©作者 | 白光霁

单位 | 埃默里大学博士生

来源 | 机器之心

ad6b0e5f8532ddfb0861bb29bd4e479d.png

论文标题:

SparseLLM: Towards Global Pruning of Pre-trained Language Models

论文链接:

https://arxiv.org/abs/2402.17946

代码链接:

https://github.com/BaiTheBest/SparseLLM

7a1323320e244ab3eaa2ad8623ea0482.png

情景导入

随着大型语言模型(LLMs)如 GPT 和 LLaMA 在自然语言处理领域的突破,现如今的模型能够在各种复杂的语言任务中表现优异。然而,这些模型往往包含数十亿参数,导致计算资源的需求极为庞大。为了让 LLMs 在更多的实际应用中变得可行,研究人员进行了大量的模型压缩工作,其中包括剪枝、量化、知识蒸馏和低秩分解等方法。

剪枝作为一种重要的压缩策略,通过引入稀疏性提升了内存和计算效率。尽管剪枝的有效性已在视觉任务和较小规模的语言模型中得到验证,但全局剪枝由于需要将整个模型加载到同一个 GPU 中,对于如今的大规模 LLMs 而言是不现实的。

因此,近年来出现了局部剪枝方法比如 SparseGPT 和 Wanda,尽管这些方法简单粗暴地局部化每个 layer 的剪枝,从而在效率上有了提升,但局部剪枝带来的效果往往是次优 (suboptimal) 的。

我们提出的 SparseLLM 框架,通过将全局剪枝问题分解为更易管理的子问题,从而在高稀疏度下也能实现高效的优化和优异的性能。SparseLLM 在实现了内存和计算效率的同时,超越了当前最先进的剪枝方法,为 LLMs 的压缩和应用树立了新的标杆。

76543d3be308734d34ed1ea91618ca66.png

▲ Figure 1: 此图展示了全局剪枝、局部剪枝与我们提出的 SparseLLM 框架的对比。全局剪枝(左):由于需要将整个模型加载到同一GPU中,内存消耗过大,难以适用于大规模LLMs。局部剪枝(中):只考虑每一层的局部误差,尽管内存需求较低,但会导致次优的全局性能。SparseLLM(右):通过引入辅助输入和输出,将全局剪枝问题分解为可管理的子问题,实现低内存开销下的全局剪枝,保持全局最优性能。

2d9ee2337e1fb225d4e6655f5d40976d.png

现有方法及其缺陷

在模型剪枝中,剪枝方法主要分为两大类:全局剪枝(Global Pruning)和局部剪枝(Local Pruning)。


全局剪枝

全局剪枝旨在对整个模型应用统一的稀疏化掩码(sparsity mask),以最小化未压缩模型与压缩模型之间的全局损失。虽然理论上全局剪枝可以为模型提供最优的性能,尤其是在高稀疏度情况下,但它的主要缺点在于其内存开销巨大。为了实现全局剪枝,整个模型必须被加载到同一个 GPU 中,这对于如今规模巨大的 LLMs(如 GPT 和 LLaMA)来说是不现实的。

局部剪枝

为了规避全局剪枝的内存瓶颈,局部剪枝通过将模型压缩分解为每一层的子问题来减少内存消耗。局部剪枝的方法通常会对每一层的输出进行独立的稀疏化,并构造局部损失来衡量未压缩和压缩层之间的差异。虽然局部剪枝方法在资源使用方面更加高效,但由于它只关注每一层的局部最优解,导致了全局上次优的模型性能,尤其是在高稀疏度下表现尤为显著。

方法缺陷


局部剪枝的局限性在于它无法很好地捕捉模型层之间的相互依赖关系,只针对各层的稀疏化进行优化。这种过度约束每层激活值的行为,容易导致全局性能的下降。因此,尽管局部剪枝在某些情况下能带来效率提升,但它往往无法达到全局剪枝所能带来的最优性能。

ea05c95251f2402f02dbd2b3f05201d4.png

技术方法

在 SparseLLM 框架中,我们的目标是实现全局剪枝。SparseLLM 通过将全局剪枝目标分解为多个子问题,每个子问题可以使用较少的资源解决,并且可以协同实现全局剪枝目标。SparseLLM 的优势在于它能够在内存消耗较低的情况下实现全局剪枝。

动机

SparseLLM 的开发基于以下观察:LLMs 可以被表述为一个复合函数,后一个模块的输出是下一个模块的输入。这使得可以通过辅助变量将全局剪枝目标重新表述为等价形式,从而将其分解为多个子问题。然后,开发了一种高效的算法,通过交替优化每个子问题来实现全局最优解。

剪枝问题的重新表述

我们通过对模型的稠密线性部分和非线性部分进行解耦,重新表述了剪枝问题。将每一层的输出存储为一个新变量 ,非线性层的输出则表示为激活值 。接着,我们优化以下目标函数:

其中约束条件为:

这里 表示模型的总层数, 表示需要剪枝的层集合, 和 分别代表原始预训练模型的中间变量值。 是模型的最终输出结果 。

Remark:

这个公式具有高度的通用性和灵活性。当 时,解决该问题等同于全局剪枝。而当 时,问题简化为局部剪枝,独立地考虑每一层。通过调节 的大小,我们可以在全局和局部剪枝之间无缝切换。

SparseLLM优化过程

原始的全局剪枝问题包含全局约束条件,为了避免直接求解带约束的目标函数,我们引入了辅助变量和惩罚函数。通过引入 惩罚项,原始的全局目标函数被转化为无约束问题,具体表达如下:

896cecc77e39e0f1dab34c4ccde14665.png

其中, 和 是超参数。这样,我们将每一层的剪枝问题解耦为局部子问题,同时保留了层之间的依赖性。

SparseLLM 算法的关键在于上面公式中的 的灵活性,目的是在完全全局剪枝(会导致内存瓶颈)和完全局部剪枝(会导致次优性能)之间找到更好的折中。粗暴地对所有层进行全局剪枝是不现实的。

最近的研究表明,前馈网络 (FFN) 模块在每个解码器层中的参数占 LLM 总参数的三分之二以上。因此,SparseLLM 优先对 FFN 模块进行全局剪枝,同时仍然遵循对多头注意力模块 (MHA) 的局部剪枝策略(见 Figure 2)。这种策略在剪枝大规模模型的计算可行性与剪枝过程的有效性之间取得了平衡,并遵循了现有 LLM 剪枝框架的限制和实践。

具体而言,SparseLLM 将 设置为 ,其中 表示每个解码器层 FFN 模块中线性层的索引集(具体数学细节详见论文)。也就是说,同一个 FFN 模块中的线性层被全局剪枝,而剩下的线性层仍按照局部剪枝。对于每一层的 FFN 模块,我们的目标是最小化以下无约束的目标函数:

5928f64be495bca205ebdadbe9877462.png

此时,每一层的剪枝问题被表述为线性投影模块(上投影和下投影)的优化问题,并且可以针对每一个子问题进行交替优化。这一过程通过引入辅助变量和惩罚函数,使得我们能够在不消耗过多内存的前提下,求解全局最优解。

accad11e9a7fac961f61bbe2c1c226d4.png

▲ Figure 2: 该图展示了 SparseLLM 框架在不同LLM架构中的工作原理。左侧描绘了在 OPT模型中的剪枝流程。SparseLLM通过引入辅助变量,将全局剪枝问题分解为可管理的子问题,利用线性层的上下投影模块(Up Proj 和 Down Proj)以及ReLU激活函数来实现模型压缩。右侧描绘了在 LLaMA模型 中的剪枝流程。此处,SparseLLM除了使用线性层的上下投影外,还利用了SiLU激活函数与Gate Proj模块来实现更复杂的剪枝操作。图中标注了剪枝层(蓝色)、辅助变量(绿色)和预训练模型的固定输入/输出(粉色),以帮助理解各模块在剪枝过程中的相互关系与作用。

OPT模型中的子问题求解

在 OPT 模型中,我们的目标是对每一层的FFN模块进行全局剪枝。根据公式5,我们首先考虑交替优化子问题,对于每一个子问题的闭式解,我们分以下步骤进行:

剪枝权重的优化:首先,我们固定其他变量,优化权重 和 。具体来说,优化目标是最小化以下表达式:

为了求解该问题,我们首先对 进行分解:,其中 ( 表示伪逆)。通过将分解后的 带入原始损失函数中,可以得到权重剪枝问题的闭式解,类似于 SparseGPT 等剪枝方法。

激活值的更新:对于激活值 的优化,这是一个类似于权重剪枝的简单最小二乘问题。激活值 的更新可以通过如下公式求解:

09ed71db16208539ce87b44b56221817.png

输出 的更新:对于输出 ,我们最小化以下非凸的损失函数:

1aaec636fa469975ee81d78189e8ed7b.png

由于 ReLU 函数的逐元素操作,问题可以通过简单的 if-then 逻辑分为两种情况:

5b01b85ba2c2bb6cc4de0380ee1312fb.png

LLaMA 模型中的子问题求解

在 LLaMA 模型中,我们的剪枝过程与 OPT 模型类似,唯一不同的是 LLaMA 模型中包含额外的门控投影层,并使用了 SiLU 激活函数。我们针对 LLaMA 的各层子问题进行如下求解:

剪枝权重的优化:对于 LLaMA 模型中的FFN模块,权重剪枝的优化过程与 OPT 模型类似。我们通过最小化以下表达式来优化权重:

并使用类似于 OPT 模型的分解方法求解。

激活值 的更新:在 LLaMA 模型中,我们使用 SiLU 激活函数,因此激活值的更新公式如下:

dd636de3ee4633d4658366b69cb3946a.png

输出 的更新:对于 LLaMA 模型中的输出 ,我们最小化以下损失函数:

fe05948c3d4ceacab7a4bbce4ec73aa2.png

通过类似的数学操作,我们可以求得 的解析解为:

486996827110287cc5c3378528c647ae.png

门控投影输出 的更新:对于门控投影层的 ,我们通过最小化以下表达式来更新:

34e165e6ba14644afeabf6475dfc1bfe.png

由于 SiLU 函数的非凸特性,问题可以通过查找预先计算好的解决方案的查找表来快速求解。

通过上述过程,SparseLLM 能够在 LLaMA 和 OPT 两种模型架构中实现高效的全局剪枝,最大化压缩效果的同时,保持模型的全局性能。

e94c5fac65b2f39bd079c95adf71ec2b.png

实验部分

实验设置

为了验证 SparseLLM 框架的有效性,我们在多个大规模语言模型上进行了广泛的实验。我们使用了 PyTorch 框架并结合 HuggingFace 的 Transformers 库来处理模型和数据集。所有剪枝实验均在 NVIDIA A100 GPU 上执行,以确保实验结果具备较好的可扩展性和适用性。

实验的数据集选取了 WikiText2 (WT2)、PTB(Penn Treebank),以及 C4 的验证集。这些数据集是语言模型压缩任务中的标准基准集,确保了结果的广泛适用性。为了保持公平性,我们在所有实验中使用了相同的数据子集,并确保剪枝过程为零样本设置,即不引入额外的训练数据,仅依赖于模型的预训练权重进行剪枝。

我们采用了模型的困惑度(Perplexity)作为评估指标,这是一种常用的衡量语言模型生成能力的指标。困惑度越低,模型的表现越好。所有剪枝后的模型均通过困惑度指标评估其在不同数据集上的性能,比较剪枝前后的性能变化以及不同稀疏度下的性能差异。

模型与剪枝策略

实验中,我们选择了两类主流的预训练语言模型进行剪枝实验:

  • OPT 模型:我们针对不同规模的 OPT 模型(如 OPT-1.3b、OPT-2.7b 等)进行全局剪枝,评估 SparseLLM 在不同大小的模型上的效果。

  • LLaMA 模型:我们也对 LLaMA 系列模型进行了实验,特别是 LLaMA-2 13b 模型,考察其在使用 SparseLLM 框架下的剪枝效果。

对于每一个模型,我们使用了不同的稀疏度设定,从 70% 到 90% 的非结构化稀疏度,以及 3:4 的半结构化稀疏度。在每个稀疏度水平下,我们测试了模型在各个基准数据集上的性能表现,以验证 SparseLLM 在不同稀疏度条件下的剪枝效果。

比较基线方法

为了全面评估 SparseLLM 的效果,我们与现有的几种剪枝方法进行了对比:

  • 局部幅度剪枝:一种传统的剪枝方法,逐层根据权重幅度进行独立的局部剪枝,不考虑层间的依赖性。

  • SparseGPT:一种最新的局部剪枝方法,专门针对预训练语言模型进行高效的权重剪枝,能够在高稀疏度条件下维持较好的性能。

  • Wanda:另一种基于局部剪枝的方法,通过最小化剪枝后的模型输出误差,达到较好的压缩效果。

我们分别在不同稀疏度条件下与上述方法进行了对比,详细记录了各模型在不同数据集上的困惑度结果。

结果分析

剪枝效果分析

在不同稀疏度条件下,SparseLLM 在大多数情况下能够显著超过基线方法,特别是在高稀疏度(≥ 70%)的情况下,SparseLLM 能够维持较低的困惑度,甚至在一些任务中超越了未剪枝的模型。相比之下,局部幅度剪枝方法和 SparseGPT 的性能在稀疏度较高时下降明显,证明了全局剪枝方法在模型压缩中的优势。

此外,我们还分析了模型剪枝后的参数分布情况。SparseLLM 的剪枝策略能够有效地保持模型重要参数的位置不变,减少了剪枝过程中重要信息的丢失,这也解释了其在高稀疏度下性能优越的原因。

c20506eac94c41cb3f0f7fb464bd483f.png

模型大小与性能权衡

我们进一步分析了不同大小模型在使用 SparseLLM 剪枝时的表现。实验表明,较大规模的模型在剪枝后的性能更为稳定,尤其是 LLaMA 13b 等大规模模型,即使在90%稀疏度下,困惑度的增幅也非常有限。这一结果表明,随着模型规模的增加,SparseLLM 能够更有效地在剪枝中找到最优的权重保留策略,降低剪枝对模型性能的负面影响。

fe8e799852c7e5c42d5382843c756327.png

▲ Figure 3: Fast convergence of SparseLLM. Training loss per epoch for pruning layer 3 of OPT-125m at 80% sparsity (Left) and layer 6 of LlaMA-2 13b at 70% sparsity (Right).

收敛速度分析

除了剪枝性能,我们还对 SparseLLM 的收敛速度进行了分析。在实际训练过程中,SparseLLM 在最初的几个 epoch 内即可快速达到较低的训练损失,表明其剪枝过程非常高效。相比之下,其他局部剪枝方法在稀疏度较高时,需要更多的训练步骤才能收敛到类似的性能水平。这进一步证明了全局剪枝策略在保持模型性能的同时,能够有效减少训练时间和资源消耗。

不同任务的通用性

为了验证 SparseLLM 在零样本设置下的通用性,我们在多个零样本任务上测试了剪枝后的模型性能。实验结果表明,SparseLLM 在大多数任务上保持了优异的性能,特别是在涉及推理和生成任务时,SparseLLM 剪枝后的模型仍然能够生成高质量的文本输出,而其他基线方法的性能在高稀疏度下显著下降。


b4a273cdafe8502258f11c08aa565766.png

实验小结

实验结果表明,SparseLLM 框架能够在不同规模的预训练语言模型上实现高效的全局剪枝,同时保持良好的模型性能。无论是在较小的 OPT 模型上,还是在更大规模的 LLaMA 模型上,SparseLLM 均表现出色,特别是在高稀疏度的条件下表现尤为突出。此外,SparseLLM 的收敛速度和剪枝后的通用性也为其在实际应用中的高效性和适用性提供了强有力的支持。

759ebe2386afa1e3c9333e8f926ffd61.png

结论

在本研究中,我们提出了 SparseLLM,一个针对大规模预训练语言模型的全局剪枝框架。通过引入辅助变量和局部子问题,我们成功解决了全局剪枝在计算和内存方面的瓶颈。

实验结果表明,SparseLLM 能够在保持模型性能的同时,在高稀疏度下有效地压缩模型。与现有的剪枝方法相比,SparseLLM 在困惑度、稀疏度和通用性方面展现出了显著的优势,特别是在处理大型模型(如 LLaMA 和 OPT 系列)时,SparseLLM 的全局剪枝策略展现了更好的性能保持能力。

通过本研究,我们证明了全局剪枝在大规模语言模型中的潜力,不仅能够显著降低模型的计算和存储成本,还能在高稀疏度下维持优异的性能。这为实际应用中对资源敏感的任务提供了一个有效的解决方案。

未来研究方向

虽然 SparseLLM 取得了优异的结果,但仍有若干值得深入研究的方向:

动态剪枝策略的研究:当前的 SparseLLM 是基于静态的全局剪枝策略,即在训练前决定剪枝的层和稀疏度。未来可以探索动态剪枝策略,结合任务需求和模型训练过程,实时调整剪枝比例和剪枝区域,以进一步提升模型压缩效率。

稀疏性与硬件加速的结合:尽管 SparseLLM 能够大幅减少模型的计算和存储开销,但在实际部署中如何高效利用硬件加速器(如GPU、TPU)的稀疏性支持仍是一个开放问题。未来的工作可以研究如何更好地结合稀疏矩阵乘法和硬件加速技术,以实现更大的性能提升。

剪枝后的模型微调:尽管我们的实验已经展示了 SparseLLM 在高稀疏度下的性能保持能力,但剪枝后的模型是否可以通过微调进一步提升性能仍然值得探索。未来的研究可以结合剪枝和微调技术,探讨如何在稀疏化后进一步优化模型性能。

通过探索这些方向,SparseLLM 有望在大规模语言模型的压缩与高效推理中发挥更加广泛的作用,为各类 NLP 应用提供更多的支持与创新。

更多阅读

e2cdd8a66f667e8237bd26e1d7553474.png

b893d1bbf932f55277d5a505215459db.png

b46491f8c65f03e7470d0d7bd617636e.png

717a3eb69ea358a09e6bdecbc78c7c28.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

fa8e586d79da697214eb7c55ec4b16ee.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

·

·

b375c94adb7fc05ff1e70c1da113516f.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值