LLM-Pruner: On the Structural Pruningof Large Language Models

机翻,自己方便对着原文看的

Abstract

大型语言模型(llm)在语言理解和生成方面表现出了显著的能力。然而,这种令人印象深刻的能力通常伴随着相当大的模型大小,这在部署、推理和训练阶段都提出了重大的挑战。由于LLM是一个通用任务求解器,我们以任务不可知的方式探索其压缩,旨在保留原始LLM的多任务求解和语言生成能力。实现这一目标的一个挑战是LLM的训练语料库的巨大规模,这使得数据传输和模型后训练都过于繁重。因此,我们在两个约束的范围内解决llm的压缩问题:任务无关性和对原始训练数据集的依赖最小化。我们的方法被命名为LLM- pruner,采用基于梯度信息选择性去除非关键耦合结构的结构性剪枝,最大限度地保留LLM的大部分功能。为此,可以通过调优技术LoRA在3小时内有效地恢复修剪模型的性能,只需要50K数据。我们在LLaMA、Vicuna和ChatGLM三个llm上验证了LLM-Pruner,结果表明压缩后的模型仍然具有令人满意的零射击分类和生成能力。代码可从https://github.com/horseee/LLM-Pruner获得

 1 Introduction

最近,大型语言模型(Large Language Models, llm)[39, 51, 50, 44, 64, 4,74]在语言理解和生成方面表现出了卓越的能力。随着模型尺寸的增加,它们更有能力处理复杂的任务[3,5,58,60],甚至表现出应急能力[57]。然而,尽管llm具有令人印象深刻的性能,但它在部署和推理方面提出了挑战。它们的广泛规模产生了大量的计算需求,并且所涉及的大量参数可能导致长延迟和其他相关问题。在预训练语言模型(PLM)的背景下,提出了几种技术来解决这些问题,如模型修剪[56,61,72,21],知识蒸馏[46,41,47],量化[1,13]。

虽然以前的方法在参数缩减中有效地保持了模型性能,但它们主要针对特定领域内的压缩或特定任务压缩上下文中的指定任务。例如,在特定的数据集上对PLM进行微调,例如GLUE基准中的一个分类任务[53],然后将这些模型提炼成更小的分类模型[46,18]。尽管这种范式可能被用于LLM压缩,但它损害了LLM作为通用任务求解器的能力,使其只适合于单个任务

因此,我们努力在新的设置中压缩LLM:减少LLM的大小,同时保留其作为通用任务求解器的多种功能,如图1所示。这介绍了llm的任务无关压缩,它提出了两个关键挑战:

LLM培训语料库的规模是巨大的。以前的压缩方法严重依赖于训练语料库。LLM已经将语料库规模升级到1万亿个token或更多[17,51]。大量的存储需求和较长的传输时间使得数据集难以获取。此外,如果数据集是专有的,则训练语料库的获取几乎是不可能的,这是在[74,39]中遇到的情况。

修剪后的LLM培训后的不可接受的长时间。现有的方法需要大量的时间对较小的模型进行后训练[55,28]。例如,TinyBERT中的一般蒸馏大约需要14 GPU天[20]。即使在训练后,特定任务的BERT压缩模型也需要大约33个小时[61,22]。随着llm的模型和语料库的规模迅速增加,这一步必然会消耗更长的时间

图1:LLM-Pruner示意图。(i)特定任务压缩:对模型进行微调,然后对特定任务进行压缩。(ii) TinyBERT:首先在未标记的语料库上提取模型,然后在特定任务上对其进行微调。(iii) LLM-Pruner: 3小时内的任务无关压缩。

为了解决上述与llm的任务无关压缩相关的挑战,我们引入了一种称为LLM-Pruner的新方法。由于我们的目标是压缩llm与减少数据依赖和加速训练后,如何修剪模型与最小的破坏起源是至关重要的。为了实现这一点,我们提出了一种依赖检测算法来识别模型内的所有依赖结构。一旦确定了耦合结构,我们采用一种有效的重要性估计策略,在任务不可知的情况下选择最优的剪枝组,其中考虑了一阶信息和近似的hessian信息。最后,执行快速恢复阶段,对有限数据的剪枝模型进行后训练

贡献。在本文中,我们提出了一个新的框架,LLM-Pruner,用于大型语言模型的任务不可知压缩。据我们所知,LLM-Pruner是第一个为llm的结构化修剪而设计的框架。我们总结了LLMPruner的优点:(i)任务无关压缩,其中压缩的语言模型保留了作为多任务求解器的能力。(ii)减少了对原始训练语料库的需求,压缩只需要50k个公开可用的样本,大大减少了获取训练数据的预算(iii)快速压缩,压缩过程在三个小时内结束。(iv)自动结构修剪框架,其中所有相关结构都分组,无需任何人工设计。​使用9个数据集对压缩模型进行评估,以评估裁剪模型的生成质量和零射击分类性能。实验结果表明,即使去除20%的参数,剪枝后的模型仍能保持原模型94.97%的性能

2 Related Work

语言模型的压缩。语言模型[9,31,25]已经得到了广泛的关注,并且增加了减少参数大小和减少延迟的需求[23,48]。为了压缩语言模型,以前的工作可以分为几类:网络修剪[21,63,32,15],知识蒸馏[46,47,40],量化[68,1,71]和其他技术,如早期退出[62]或动态令牌约简[69]。我们专注于语言模型的修剪,特别是结构修剪b[26]。结构修剪从神经网络中去除整个过滤器,这对硬件更友好。有几种方法可以去除结构,如依赖于11的剪枝[16,72]、一阶重要性估计[18]、基于hessian的估计[21,54]或最优脑外科医生[24,21]。结构剪枝中的剪枝单元,有的采用整层[10]作为最小单位,有的采用多头注意[52]或前馈层[18,36]作为基本结构进行剪枝。CoFi[61]研究了不同粒度的修剪单元。

高效和低资源压缩。随着神经网络模型规模的不断扩大,对高效、低资源压缩的需求也越来越大[67,66,30,29,65]。在高效压缩方面,[22]通过将重构误差定义为线性最小二乘问题来加速后训练。[13,12]提出分层最佳脑外科医生。对于训练语料库可用性的约束,无数据修剪[45,70]提出了几种通过测量神经元相似度来修剪模型的策略。此外,[34,33,42]提出了在不依赖模型训练语料库的情况下提取模型的方法。然而,这些方法太耗时,涉及到通过反向传播预训练模型来合成样本。

3 Methods

在本节中,我们将详细解释LLM-Pruner。继传统模型压缩管道[22]之后,LLM-Pruner包括三个步骤:(1)发现阶段(第3.1节)。这一步的重点是识别llm中相互依赖的结构组。(2)估计阶段(第3.2节)。一旦对耦合结构进行分组,第二步需要估计每组对模型整体性能的贡献,并决定修剪哪一组。(3)恢复阶段(第3.3节)。这一步包括快速的后训练,以减轻由于结构移除而导致的潜在性能下降。

3.1 Discover All Coupled Structure in LLMs

鉴于训练后数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值