本篇工作已被NeurIPS(2024 Conference on Neural Information Processing Systems)会议接收,文章第一作者为美国埃默里大学的博士生白光霁,通讯作者为赵亮教授,来自埃默里大学计算机系。共同作者包括美国阿贡国家实验室的Yijiang Li和Kibaek Kim,以及埃默里大学的博士生凌辰。该研究主要探讨了大语言模型的全局剪枝方法,旨在提高预训练语言模型的效率。该成果的发表为大模型的剪枝与优化研究提供了新的视角,并在相关领域具有重要的应用潜力。
论文标题:SparseLLM: Towards Global Pruning of Pre-trained Language Models
论文链接:https://arxiv.org/abs/2402.17946
代码:https://github.com/BaiTheBest/SparseLLM
随着大型语言模型(LLMs)如 GPT 和 LLaMA 在自然语言处理领域的突破,现如今的模型能够在各种复杂的语言任务中表现优异。然而,这些模型往往包含数十亿参数,导致计算资源的需求极为庞大。为了让LLMs在更多的实际应用中变得可行,研究人员进行了大量的模型压缩工作,其中包括剪枝、量化、知识蒸馏和低秩分解等方法。
剪枝作为一种重要的压缩策略,通过引入稀疏性提升了内存和计算效率。尽管剪枝的有效性已在视觉任务和较小规模的语言模型中得到验证,但全局剪枝由于需要将整个模型加载到同一个GPU中,对于如今的大规模LLMs而言是不现实的。因此,近年来出现了局部剪枝方法比如SparseGPT和Wanda,尽管这些方法简单粗暴地局部化每个layer的剪枝,从而在效率上有了提升,但局部剪枝带来的效果往往是次优 (suboptimal) 的。
我们提出的 SparseLLM 框架,通过将全局剪枝问题分解为更易管理的子问题,从而在高稀疏度下也能实现高效的优化和优异的性能。SparseLLM 在实现了内存和计算效率的同时,超越了当前最先进的剪枝方法,为LLMs的压缩和应用树立了新的标杆。
Figure 1: 此图展示了全局剪枝、局部剪枝与我们提出的 SparseLLM 框架的对比。全局剪枝(左):由于需要将整个模型加载到同一GPU中,内存消耗过大,难以适用于大规模LLMs。局部剪枝(中):只考虑每一层的局部误差,尽管内存需求较低,但会导致次优的全局性能。SparseLLM(右):通过引入辅助输入和输出,将全局剪枝问题分解为可管理的子问题,实现低内存开销下的全局剪枝,保持全局最优性能。
在模型剪枝中,剪枝方法主要分为两大类:全局剪枝(Global Pruning)和局部剪枝(Local Pruning)。
全局剪枝旨在对整个模型应用统一的稀疏化掩码(sparsity mask),以最小化未压缩模型与压缩模型之间的全局损失。虽然理论上全局剪枝可以为模型提供最优的性能,尤其是在高稀疏度情况下,但它的主要缺点在于其内存开销巨大。为了实现全局剪枝,整个模型必须被加载到同一个GPU中,这对于如今规模巨大的LLMs(如GPT和LLaMA)来说是不现实的。
为了规避全局剪枝的内存瓶颈,局部剪枝通过将模型压缩分解为每一层的子问题来减少内存消耗。局部剪枝的方法通常会对每一层的输出进行独立的稀疏化,并构造局部损失来衡量未压缩和压缩层之间的差异。虽然局部剪枝方法在资源使用方面更加高效,但由于它只关注每一层的局部最优解,导致了全局上次优的模型性能,尤其是在高稀疏度下表现尤为显著。
局部剪枝的局限性在于它无法很好地捕捉模型层之间的相互依赖关系,只针对各层的稀疏化进行优化。这种过度约束每层激活值的行为,容易导致全局性能的下降。因此,尽管局部剪枝在某些情况下能带来效率提升,但它往往无法达到全局剪枝所能带来的最优性能。
在SparseLLM框架中,我们的目标是实现全局剪枝。SparseLLM通过将全局剪枝目标分解为多个子问题,每个子问题可以使用较少的资源解决,并且可以协同实现全局剪枝目标。SparseLLM的优势在于它能够在内存消耗较低的情况下实现全局剪枝。
SparseLLM的开发基于以下观察:LLMs可以被表述为一个复合函数,后一个模块的输出是下一个模块的输入。这使得可以通过辅助变量将全局剪枝目标重新表述为等价形式,从而将其分解为多个子问题。然后,开发了一种高效的算法,通过交替优化每个子问题来实现全局最优解。
Figure 2: 该图展示了 SparseLLM 框架在不同LLM架构中的工作原理。左侧描绘了在 OPT模型中的剪枝流程。SparseLLM通过引入辅助变量,将全局剪枝问题分解为可管理的子问题,利用线性层的上下投影模块(Up Proj 和 Down Proj)以及ReLU激活函数来实现模型压缩。右侧描绘了在 LLaMA模型 中的剪枝流程。此处,SparseLLM除了使用线性层的上下投影外,还利用了SiLU激活函数与Gate Proj模块来实现更复杂的剪枝操作。图中标注了剪枝层(蓝色)、辅助变量(绿色)和预训练模型的固定输入/输出(粉色),以帮助理解各模块在剪枝过程中的相互关系与作用。
为了验证 SparseLLM 框架的有效性,我们在多个大规模语言模型上进行了广泛的实验。我们使用了 PyTorch 框架并结合 HuggingFace 的 Transformers 库来处理模型和数据集。所有剪枝实验均在 NVIDIA A100 GPU 上执行,以确保实验结果具备较好的可扩展性和适用性。
实验的数据集选取了 WikiText2 (WT2)、PTB(Penn Treebank),以及 C4 的验证集。这些数据集是语言模型压缩任务中的标准基准集,确保了结果的广泛适用性。为了保持公平性,我们在所有实验中使用了相同的数据子集,并确保剪枝过程为零样本设置,即不引入额外的训练数据,仅依赖于模型的预训练权重进行剪枝。
我们采用了模型的 困惑度(Perplexity) 作为评估指标,这是一种常用的衡量语言模型生成能力的指标。困惑度越低,模型的表现越好。所有剪枝后的模型均通过困惑度指标评估其在不同数据集上的性能,比较剪枝前后的性能变化以及不同稀疏度下的性能差异。
实验中,我们选择了两类主流的预训练语言模型进行剪枝实验:
对于每一个模型,我们使用了不同的稀疏度设定,从 70% 到 90% 的非结构化稀疏度,以及 3:4 的半结构化稀疏度。在每个稀疏度水平下,我们测试了模型在各个基准数据集上的性能表现,以验证 SparseLLM 在不同稀疏度条件下的剪枝效果。
为了全面评估 SparseLLM 的效果,我们与现有的几种剪枝方法进行了对比:
我们分别在不同稀疏度条件下与上述方法进行了对比,详细记录了各模型在不同数据集上的困惑度结果。
在不同稀疏度条件下,SparseLLM 在大多数情况下能够显著超过基线方法,特别是在高稀疏度(≥ 70%)的情况下,SparseLLM 能够维持较低的困惑度,甚至在一些任务中超越了未剪枝的模型。相比之下,局部幅度剪枝方法和 SparseGPT 的性能在稀疏度较高时下降明显,证明了全局剪枝方法在模型压缩中的优势。
此外,我们还分析了模型剪枝后的参数分布情况。SparseLLM 的剪枝策略能够有效地保持模型重要参数的位置不变,减少了剪枝过程中重要信息的丢失,这也解释了其在高稀疏度下性能优越的原因。
我们进一步分析了不同大小模型在使用 SparseLLM 剪枝时的表现。实验表明,较大规模的模型在剪枝后的性能更为稳定,尤其是 LLaMA 13b 等大规模模型,即使在90%稀疏度下,困惑度的增幅也非常有限。这一结果表明,随着模型规模的增加,SparseLLM 能够更有效地在剪枝中找到最优的权重保留策略,降低剪枝对模型性能的负面影响。
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 剪枝后的模型仍然能够生成高质量的文本输出,而其他基线方法的性能在高稀疏度下显著下降。
实验结果表明,SparseLLM 框架能够在不同规模的预训练语言模型上实现高效的全局剪枝,同时保持良好的模型性能。无论是在较小的 OPT 模型上,还是在更大规模的 LLaMA 模型上,SparseLLM 均表现出色,特别是在高稀疏度的条件下表现尤为突出。此外,SparseLLM 的收敛速度和剪枝后的通用性也为其在实际应用中的高效性和适用性提供了强有力的支持。
在本研究中,我们提出了 SparseLLM,一个针对大规模预训练语言模型的全局剪枝框架。通过引入辅助变量和局部子问题,我们成功解决了全局剪枝在计算和内存方面的瓶颈。实验结果表明,SparseLLM 能够在保持模型性能的同时,在高稀疏度下有效地压缩模型。与现有的剪枝方法相比,SparseLLM 在困惑度、稀疏度和通用性方面展现出了显著的优势,特别是在处理大型模型(如 LLaMA 和 OPT 系列)时,SparseLLM 的全局剪枝策略展现了更好的性能保持能力。
通过本研究,我们证明了全局剪枝在大规模语言模型中的潜力,不仅能够显著降低模型的计算和存储成本,还能在高稀疏度下维持优异的性能。这为实际应用中对资源敏感的任务提供了一个有效的解决方案。
虽然 SparseLLM 取得了优异的结果,但仍有若干值得深入研究的方向:
2.稀疏性与硬件加速的结合:尽管 SparseLLM 能够大幅减少模型的计算和存储开销,但在实际部署中如何高效利用硬件加速器(如GPU、TPU)的稀疏性支持仍是一个开放问题。未来的工作可以研究如何更好地结合稀疏矩阵乘法和硬件加速技术,以实现更大的性能提升。
3.剪枝后的模型微调:尽管我们的实验已经展示了 SparseLLM 在高稀疏度下的性能保持能力,但剪枝后的模型是否可以通过微调进一步提升性能仍然值得探索。未来的研究可以结合剪枝和微调技术,探讨如何在稀疏化后进一步优化模型性能。
通过探索这些方向,SparseLLM 有望在大规模语言模型的压缩与高效推理中发挥更加广泛的作用,为各类NLP应用提供更多的支持与创新。
文章来自于微信公众号“机器之心”
【开源免费】MindSearch是一个模仿人类思考方式的AI搜索引擎框架,其性能可与 Perplexity和ChatGPT-Web相媲美。
项目地址:https://github.com/InternLM/MindSearch
在线使用:https://mindsearch.openxlab.org.cn/
【开源免费】Morphic是一个由AI驱动的搜索引擎。该项目开源免费,搜索结果包含文本,图片,视频等各种AI搜索所需要的必备功能。相对于其他开源AI搜索项目,测试搜索结果最好。
项目地址:https://github.com/miurla/morphic/tree/main
在线使用:https://www.morphic.sh/
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner