Loading...

基本信息

标题: Light-PEFT: Lightening Parameter-Efficient Fine-Tuning via Early Pruning

作者: Naibin Gu, Peng Fu, Xiyu Liu, Bowen Shen, Zheng Lin, Weiping Wang

所属机构:

  1. 中国科学院信息工程研究所,北京,中国
  2. 中国科学院大学网络安全学院,北京,中国

会议:Findings of ACL 2024(ACL的Findings机制是指有些论文虽然没有被主会所接收,但工作也有一定的质量和创新性,因而被接收为Findings论文)
关键词: 参数高效微调, 基础模型, 掩码早期剪枝, 多粒度剪枝, 微调效率
DOIhttps://arxiv.org/pdf/2406.03792
代码: Light-PEFT代码

论文二十问

1. 论文试图解决什么问题?

论文试图解决现有参数高效微调(PEFT)方法在大规模语言模型训练中的效率不足问题,特别是由于基础模型和PEFT模块中的冗余参数导致的训练和推理开销过大。

2. 这是否是一个新的问题?

这不是一个全新的问题,但作者提出的解决方案是新的。提高大规模语言模型训练效率一直是研究的热点,但通过早期剪枝来提升PEFT效率的方法尚属首次提出。

3. 这篇文章要验证一个什么科学假设?

论文要验证的科学假设是:通过在训练初期估计并剪枝基础模型和PEFT模块中的冗余参数,可以显著提升参数高效微调的训练和推理效率,同时保持模型性能不显著下降。

4. 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?

相关研究可以归类为以下几类:

  1. 参数高效微调(PEFT): 包括冻结大部分基础模型参数,只微调少量参数的技术(Houlsby et al., 2019; Li and Liang, 2021; Hu et al., 2022)。
  2. 模型量化: 如QLoRA,旨在通过低位量化参数来减少内存使用(Dettmers et al., 2023; Kim et al., 2023)。
  3. 模型剪枝: 特别是结构化剪枝,通过剪除模型中的冗余部分来提升效率(Hedegaard et al., 2022; Zhao et al., 2023)。
  4. 动态秩分配方法: 例如AdaLoRA,通过动态调整模块参数分配来提高效率(Zhang et al., 2023; Valipour et al., 2023)。

值得关注的研究员包括Neil Houlsby, Percy Liang, Edward J. Hu, Tim Dettmers等。

5. 论文中提到的解决方案之关键是什么?

论文提出的关键解决方案是Light-PEFT框架,通过以下两种方法来实现:

  1. 基础模型的掩蔽早期剪枝: 在训练初期引入可训练的标量掩码,识别并剪枝基础模型中的冗余参数。
  2. PEFT的多粒度早期剪枝: 包括模块剪枝和秩剪枝,删除PEFT模块中的冗余参数。

6. 论文中的实验是如何设计的?

实验设计包括:

  1. 数据集选择: 选择了GLUE, SuperGLUE和多个问答任务(QA tasks)的数据集进行验证。
  2. 模型选择: 使用RoBERTa-Large, OPT-1.3B和OPT-6.7B作为基础模型。
  3. 基准对比: 将提出的方法与多种基准方法(如Full-FT, Adapter, LoRA等)进行对比。
  4. 性能指标: 通过评估训练速度、推理速度、内存使用及模型性能来验证方法的有效性。

7. 用于定量评估的数据集是什么?代码有没有开源?

用于定量评估的数据集包括GLUE (MNLI, QNLI, QQP, SST-2), SuperGLUE (ReCord, WiC, BoolQ, MultiRC)以及问答任务(OpenBookQA, PIQA, ARC-Easy, ARC-Challenge, SciQ, WebQuestions)。代码已经开源,链接为:GitHub

8. 论文中的实验及结果有没有很好地支持需要验证的科学假设?

是的,论文中的实验结果很好地支持了科学假设。Light-PEFT框架在保持模型性能的同时,显著提升了训练和推理效率,并减少了内存使用。

9. 这篇论文到底有什么贡献?

论文的主要贡献包括:

  1. 提出了Light-PEFT框架,通过早期剪枝显著提高PEFT方法的效率。
  2. 验证了在训练初期剪枝基础模型和PEFT模块中的冗余参数可以提升效率且不显著影响性能。
  3. 实验结果表明,Light-PEFT在多个基准测试中表现优异,代码已开源以便于社区使用和验证。

10. 下一步呢?有什么工作可以继续深入?

下一步工作可以包括:

  1. 多任务学习场景: 探索在多任务学习场景下的冗余参数估计和早期剪枝,以实现跨多个任务的高效微调。
  2. 进一步优化剪枝策略: 研究更智能的剪枝策略,进一步提升训练和推理效率。
  3. 扩大应用范围: 将Light-PEFT应用于更多类型的基础模型和任务,验证其通用性和适应性。

11. 要了解深入,一个模型为什么好?

模型之所以好,主要体现在以下几个方面:

  • 效率提升:Light-PEFT框架通过早期剪枝技术显著提高了训练和推理效率,减少了计算和内存开销。
  • 性能稳定:尽管剪枝了大量参数,模型在多个基准测试中的表现依然与原PEFT方法相当,证明了其有效性。
  • 可移植性:Light-PEFT保留了PEFT方法的即插即用特性,方便在不同任务和模型间切换。

12. 以前的模型为什么不好?

以前的PEFT方法存在以下问题:

  • 冗余参数:在训练过程中,基础模型和PEFT模块中的冗余参数导致了大量的计算浪费。
  • 效率不足:现有PEFT方法虽然减少了训练的计算资源需求,但仍然需要处理大量不必要的参数,导致训练和推理效率不高。
  • 不可调性:以前的方法通常需要手动调节参数,缺乏自动化的剪枝和优化机制。

13. 哪个关键点对性能提升最大?

性能提升的关键点是早期剪枝技术,包括:

  • 掩蔽早期剪枝:在训练初期引入可训练的标量掩码,自动识别并剪除基础模型中的冗余参数。
  • 多粒度早期剪枝:结合模块剪枝和秩剪枝,删除PEFT模块中的冗余参数,从而大幅提升训练和推理效率。

14. 编程怎么实现?

编程实现主要包括以下步骤:

  1. 引入掩码:在模型的注意力头和中间层引入可训练的标量掩码。
  2. 掩码训练:在训练初期联合训练掩码和PEFT模块参数,通过L1正则化来稀疏化掩码。
  3. 剪枝操作:根据掩码的大小进行剪枝,删除不重要的注意力头和中间层维度。
  4. 多粒度剪枝:对PEFT模块进行模块级和秩级剪枝,保留重要的模块和秩。

15. 论文源代码和paper匹配度怎么样、都覆盖了吗?

论文中的源代码匹配度高,已覆盖主要实验和方法。代码开源在GitHub上,提供了详细的实现细节和实验设置,便于社区验证和使用。

16. 哪些数学运算是关键的?

关键的数学运算包括:

  • L1正则化:用于训练掩码,通过L1正则化来稀疏化掩码,识别并剪除冗余参数。
  • Taylor展开:用于估计PEFT模块中各个秩的重要性,从而进行秩剪枝。
  • 重要性比率计算:用于评估PEFT模块的相对重要性,决定模块的剪枝顺序。

17. 整个全流程是怎么走的?

全流程如下:

  1. 初始化模型和掩码:引入基础模型和PEFT模块,设置初始掩码为1。
  2. 早期训练和估计:在训练初期阶段(约占总训练时间的5-10%)联合训练掩码和PEFT模块,估计冗余参数。
  3. 剪枝操作:根据掩码值和重要性比率进行剪枝,删除不重要的参数和模块。
  4. 正式训练:使用剪枝后的模型进行正式训练,进一步优化参数。
  5. 评估和验证:在验证集和测试集上评估模型性能,确保剪枝后的模型仍能保持高性能。

18. 数据是怎样流动的?其中是怎样变换的?各个变换有什么实际意义?

数据流动及变换如下:

  1. 输入数据:输入数据经过基础模型的嵌入层,生成初始特征表示。
  2. 掩码作用:在注意力头和中间层中,掩码根据L1正则化训练结果调整各层的激活值,剪除不重要的部分。
  3. PEFT模块:根据剪枝策略,调整各PEFT模块的结构,保留重要的模块和秩。
  4. 输出结果:经过剪枝和优化后的模型生成最终输出,用于下游任务的预测。

各个变换的实际意义在于:

  • 提高效率:通过剪枝减少不必要的计算,提高训练和推理效率。
  • 保持性能:通过智能剪枝策略,确保在减少参数的同时,模型性能不显著下降。

19. 既要关注具体实现思路、也要关注上层抽象意义。作者灵感从何而来?

作者灵感来自于对大规模语言模型训练效率不足问题的观察,以及对现有剪枝和PEFT方法的局限性分析。他们结合了早期剪枝和PEFT的优势,提出了在训练初期进行冗余参数估计和剪枝的创新方法。

20. 作者思考路线如何?

作者的思考路线如下:

  1. 问题分析:识别出现有PEFT方法在大规模语言模型训练中的效率瓶颈。
  2. 方法设计:提出早期剪枝和多粒度剪枝的方法,减少训练和推理的计算开销。
  3. 实验验证:设计实验验证方法的有效性,确保在多个基准测试中实现性能和效率的提升。
  4. 开源共享:提供开源代码,便于社区验证和使用,推动研究的进一步发展。

Abstract

参数高效微调(PEFT)已成为大规模语言模型时代的主要微调技术。然而,现有的PEFT方法在训练效率方面仍然不足。首先,在训练过程中使用大规模基础模型对于某些微调任务来说过于冗余。其次,随着模型规模的增大,经验性添加的PEFT模块中可训练参数的增长变得不可忽视且冗余,导致效率低下。为了实现任务特定的高效微调,我们提出了Light-PEFT框架,该框架包括两种方法:基础模型的掩蔽早期剪枝和PEFT的多粒度早期剪枝。Light-PEFT框架允许在训练初期同时估计基础模型和PEFT模块中的冗余参数,然后对这些参数进行剪枝以实现更高效的微调。我们在GLUE、SuperGLUE、QA任务和各种模型上验证了我们的方法。使用Light-PEFT,基础模型的参数可以剪枝超过40%,而可训练参数仅为原PEFT方法的25%。与直接使用PEFT方法相比,Light-PEFT实现了训练和推理的加速,减少了内存使用,并保持了相当的性能和PEFT的即插即用特性。

1. Introduction

大规模预训练语言模型在各种自然语言处理领域表现出了卓越的性能(Liu et al., 2019; Brown et al., 2020; Touvron et al., 2023; OpenAI, 2023)。随着性能的提升,模型参数的规模也不断增长,使得微调模型的成本越来越高。此外,在传统微调过程中为每个任务维护一个单独的大模型副本会产生巨大的存储成本

为了解决这些挑战,提出了参数高效微调(PEFT)方法:冻结基础模型的大部分参数,仅微调少量参数(Houlsby et al., 2019; Li and Liang, 2021; Liu et al., 2022a; Hu et al., 2022),从而减少训练期间的计算资源需求,并实现几乎全参数微调。此外,这种技术消除了为每个任务保存整个模型副本的需要。在推理过程中,可以通过直接切换到特定任务的参数高效模块来获得任务特定模型。

然而,现有PEFT方法的训练效率仍需改进。第一个问题在于在特定任务的微调过程中使用大规模基础模型的冗余,导致了大量计算开销。一个典型的策略是将PEFT与量化结合(Dettmers et al., 2023; Kim et al., 2023)。然而,这些方法仅在内存中将参数量化为低位,但并没有减少参数数量,并且在训练期间仍需将其反量化为高位,导致训练时间浪费。另一种更直接的减少参数的方法是模型结构化剪枝(Hedegaard et al., 2022; Zhao et al., 2023)。然而,大多数方法主要关注模型的推理效率,这意味着它们可能会导致更高的训练成本。

第二个问题是随着基础模型规模的增加,添加的可训练模块中的参数数量也显著增加。这引入了大量冗余的可训练参数,导致微调效率低下。例如,常用的LoRA(Hu et al., 2022)和QLoRA(Dettmers et al., 2023)方法经验性地将低秩模块插入到固定权重上。然而,没有必要为微调每个任务将相同秩的可训练模块均匀地添加到所有权重上。改进的方法是动态秩分配方法(Zhang et al., 2023; Valipour et al., 2023; Ding et al., 2023),通过在训练期间逐步计算秩的重要性,自适应地分配模块参数。然而,这些方法需要在训练期间进行持续估计,对实际训练效率的提升有限。

本文介绍了一种名为Light-PEFT的新框架,旨在提高PEFT技术在微调过程中的效率。该框架由两种方法组成:基础模型的掩蔽早期剪枝PEFT的多粒度早期剪枝。在训练初期阶段,Light-PEFT同时估计基础模型(注意力头和中间维度)和PEFT模块(模块重要性和秩重要性)中的冗余参数。通过结构化剪枝来消除这些冗余,从而得到一个更轻量的基础模型和PEFT模块,以实现更高效的微调。

为了验证Light-PEFT框架的有效性,我们对各种基础模型(RoBERTa, OPT-1.3B, OPT-6.7B)、不同的PEFT结构(LoRA, Adapter)和不同的基准测试(GLUE, SuperGLUE和问答任务)进行了广泛评估。实验结果表明,提出的Light-PEFT框架在性能上优于其他基准方法。它显著提高了训练效率,减少了39%的训练内存使用,并将训练速度提高到1.6倍。此外,Light-PEFT框架还提高了推理效率,减少了48%的推理内存使用,并将推理速度提高到1.6倍。

2 相关工作

2.1 参数高效微调

参数高效微调(PEFT)已被提出以减少微调整个模型参数的计算成本(Houlsby et al., 2019; Li and Liang, 2021; Hu et al., 2022)。随后的研究旨在进一步提高PEFT的效率。对PEFT模块的改进。这类方法的动机在于,先前的工作通常经验性地插入可训练模块,导致所有插入模块的秩统一,参数效率低下。AdaLoRA(Zhang et al., 2023)提出通过在训练过程中迭代剪枝来获得每个模块的最佳秩。DyLoRA(Valipour et al., 2023)通过动态训练不同的秩来实现这一目标。AutoPEFT(Zhou et al., 2023)通过贝叶斯优化自动选择PEFT配置。最近,SoRA(Ding et al., 2023)引入了秩上的掩码,并逐步使每个模块稀疏化。然而,所有这些方法在训练过程中逐步计算秩分配,未能提高微调的实际训练效率。我们的方法在训练初期估计每个模块的秩分配,并利用剪枝后的参数高效模块提高微调过程中的训练效率。


为了提高训练效率,一个思路是进一步减少训练期间的内存占用。QLoRA(Dettmers et al., 2023)和PEQA(Kim et al., 2023)通过量化基础模型来减少内存使用,而LST(Sung et al., 2022)和MEFT(Liao et al., 2023)分别通过梯子侧调和可逆结构的方法减轻基础模型中间激活的内存占用。我们的方法在内存方面与这些方法是正交的,可以与它们结合使用。我们探索基础模型的早期剪枝以减少内存使用。此外,我们的方法可以降低计算成本,加快训练速度,并提高推理效率。

将PEFT与剪枝结合,大多数工作集中在提高推理效率。PST(Li et al., 2022)和DSEE(Chen et al., 2023)提出结合非结构化剪枝和PEFT,但在实际硬件上几乎无法实现加速。SPAs(Hedegaard et al., 2022)将基础模型的结构化剪枝与PEFT结合,而CPET(Zhao et al., 2023)提出在剪枝的同时将知识蒸馏到PEFT模块中以减少性能下降。与我们的工作同时进行,APT(Zhao et al., 2024)降低了CPET方法的训练成本,提供了更高效的蒸馏和剪枝。然而,这些方法,包括APT,与原PEFT方法相比,仍然需要更高的训练时间和内存成本。我们的方法旨在通过采用早期结构化剪枝来有效训练一个非冗余的PEFT模型,同时提高推理效率,从而降低原PEFT的训练成本,包括速度和内存。

2.2 模型的结构化剪枝

模型剪枝已被提出用于压缩模型中的冗余参数(LeCun et al., 1989; Kurtic et al., 2022; Liu et al., 2022b; Ma et al., 2023),其中结构化剪枝是实现实际硬件加速的最直接方法。对于Transformer模型的结构化剪枝,重点在于剪除模型的组成部分,如注意力头和前馈维度(Liu et al., 2021; Xia et al., 2022; Tao et al., 2023; Xia et al., 2024)。然而,大多数结构化剪枝工作在训练期间需要额外的成本,以获得更小且更准确的推理高效模型。在训练效率方面,You et al.(2020)基于彩票假说(Frankle and Carbin, 2019)发现了DNN模型中的早期中奖票据,允许早期剪枝以增强后续训练效率。随后,Chen et al.(2021)在BERT模型(Devlin et al., 2019)中识别出早期票据,以提高BERT预训练和微调的效率。我们跟随这些工作,探索参数高效微调和生成基础模型的早期剪枝。

3 预备知识

3.1 参数高效微调

在我们的框架中,我们选择了两种最广泛使用的方法:Adapter(Houlsby et al., 2019)和LoRA(Hu et al., 2022)来验证我们的方法。

Adapter:对于基础模型中的每一层,包括注意力子层和前馈子层,Adapter在每个子层之后插入一个可训练的MLP模块。它由一个下投影层 ( W_{\text{down}} \in \mathbb{R}^{d \times r} ),接着是一个非线性激活函数 ( f ),最后是一个上投影层 ( W_{\text{up}} \in \mathbb{R}^{r \times d} ) 组成,其中 ( d ) 是基础模型的隐藏大小,( r ) 是可训练模块中的瓶颈维度,且 ( r \ll d )。Adapter方法可以表示如下:
[ h \leftarrow h + f(hW_{\text{down}})W_{\text{up}} ]
其中 ( h ) 是插入子层的输出。

LoRA:对于基础模型中的每个线性权重矩阵 ( W \in \mathbb{R}^{d \times d} ),LoRA方法在 ( W ) 上并行添加可训练的MLP模块。可训练模块包括一个下投影层 ( W_{\text{down}} ) 和一个上投影层 ( W_{\text{up}} )。LoRA方法可以表示如下:
[ h \leftarrow h + s \cdot XW_{\text{down}}W_{\text{up}} ]
其中 ( X ) 表示线性权重矩阵 ( W ) 的输入,( s ) 是一个超参数缩放因子。

3.2 PEFT训练效率

在本节中,我们展示了对PEFT训练效率的观察。我们利用LoRA方法观察了两个基础模型RoBERTa(Liu et al., 2019)和OPT(Zhang et al., 2022)的结果。对于训练样本,我们设置长度为128,批量大小为32,时间为10个批次的总和。所有测试均在单个NVIDIA RTX 3090 GPU上进行。

基础模型大小的影响:从训练速度的角度来看(图1a),PEFT方法减少了梯度计算时间,因此前向传播时间逐渐超过反向传播时间。尽管如此,前向计算仍然保持不变,需要使用所有模型参数来向前传播状态并通过整个模型反向传播损失,随着模型规模的增大,前向计算变得越来越慢。从内存的角度来看(图1b),尽管PEFT技术减少了优化器状态和梯度的内存消耗,但模型权重和中间激活在训练期间仍占据大量内存。将基础模型压缩到更小的规模可以更好地缓解这一问题。这强调了减少基础模型参数冗余对于训练效率的重要性

PEFT模块的影响:我们探索了模块内秩和PEFT模块数量对训练效率的影响。从训练速度的角度来看,图2a展示了我们保持相同模块仅增加秩的实验。图2b展示了我们保持相同可训练参数,向不同权重添加结构化PEFT模块的实验。可以观察到,与增加单个结构化模块的秩相比,增加PEFT模块数量对前向和反向时间的影响显著更大。这表明,在训练过程中,增加更多结构化PEFT模块对速度的影响显著大于增加单个结构化模块的秩。从内存的角度来看,可训练参数影响了训练期间优化器状态和梯度的内存消耗。随着基础模型规模的增大,经验性添加可训练参数模块引入的冗余影响了训练效率。

4 方法论

4.1 Light-PEFT概述

我们的目标是在训练早期消除参数冗余,从而减少微调的计算成本。因此,我们提出了Light-PEFT框架,如图3所示,包括两种方法:基础模型的掩蔽早期剪枝(Masked Early Pruning)和PEFT的多粒度早期剪枝(Multi-Granularity Early Pruning)。首先,我们框架中的两种方法在训练早期同时估计冗余,其中总训练步骤记为 ( t ),早期剪枝步骤的估计记为 ( t’ ),且 ( t’ \ll t )。在估计之后,我们对两者进行剪枝,从而获得一个无冗余的基础模型和PEFT模块,以实现更高效的微调。除了PEFT参数,我们只需要额外保存掩码向量,这些向量远小于PEFT模块,用于记录基础模型的剪枝索引。在推理过程中,我们的方法允许轻松更换掩码和PEFT模块,保持即插即用的特性。

4.2 基础模型的掩蔽早期剪枝

一个典型的Transformer模型(Vaswani et al., 2017)由L层组成,每层包含一个多头注意力(MHA)子层和一个前馈网络(FFN)子层。MHA子层包含NH个注意力头,查询、键、值和输出的权重矩阵 ( W^Q, W^K, W^V \in \mathbb{R}^{d \times d_H}, W^O \in \mathbb{R}^{d \times d} ),其中 ( d ) 是隐藏大小,( d_H = d / NH ) 是每个头的隐藏大小。在参数高效微调中,基础模型的权重被冻结,我们将PEFT模块的 (\Delta W) 添加到这些矩阵中。以LoRA模块为例,对于输入 ( X ),MHA的输出计算如下:
[ \text{MHA}(X) = \text{Concat}(\text{head}1, \ldots, \text{head}{NH})(W^O + \Delta W^O) ]
其中 (\text{head}_i = (XW^Q + \Delta W^Q) (XW^K + \Delta W^K) (XW^V + \Delta W^V) )。

为了识别注意力头中的冗余,我们在每层的MHA子层中引入了一个可训练的标量掩码 ( m_A )。现在,MHA变为:
[ \text{head}_i = m_A (XW^Q + \Delta W^Q) (XW^K + \Delta W^K) (XW^V + \Delta W^V) ]

对于包含激活函数 ( \text{Act}(.) ) 和权重矩阵 ( W_{fc1} ) 和 ( W_{fc2} ) 的FFN子层,这些矩阵分别表示上投影和下投影。在加入PEFT模块后,对于输入 ( X ),FFN的输出计算如下:
[ \text{FFN}(X) = \text{Act}(X(W_{fc1} + \Delta W_{fc1}))(W_{fc2} + \Delta W_{fc2}) ]

我们还在每层的FFN子层中引入了一个可训练的标量掩码 ( m_F ),以消除中间维度中的冗余。现在,FFN变为:
[ \text{FFN}(X) = \text{Act}(X(W_{fc1} + \Delta W_{fc1})) \cdot m_F \cdot (W_{fc2} + \Delta W_{fc2}) ]

受Liu等人(2017)的启发,我们使用L1正则化来学习掩码 ( m_A ) 和 ( m_F )。在掩码学习过程中,PEFT模块和掩码通过梯度下降联合训练,这使得掩码能更好地反映PEFT对目标任务基础模型训练的影响。损失函数如下:
[ L_{\text{mask}} = L + \lambda_A |m_A|_1 + \lambda_F |m_F|_1 ]
其中 ( L ) 是微调中的原始损失,( \lambda_A ) 和 ( \lambda_F ) 是控制正则化惩罚的超参数(详情见附录A.4)。在训练开始时,掩码初始化为1。

估计完成后,我们基于 ( m_A ) 和 ( m_F ) 的大小进行结构化剪枝,按层剪枝注意力头的剪枝率 ( \rho_A ) 和全局剪枝中间维度的剪枝率 ( \rho_F )。

4.3 多粒度PEFT的早期剪枝

相比于大多数以前工作中关注的细粒度稀疏性(即秩分配)(Zhang et al., 2023; Valipour et al., 2023),我们的初步观察也证实了粗粒度模块剪枝对训练速度的重要性。因此,我们提出了多粒度PEFT剪枝,以同时考虑这两个方面。此外,我们在训练的早期阶段执行PEFT剪枝,以最大化训练过程中的效率。

4.3.1 模块剪枝

为了实现粗粒度的模块剪枝,我们从PEFT的原始设计开始,我们认为模块的重要性主要由其对原始信息的变化决定。具体来说,对于LoRA方法,我们在权重 ( W ) 上添加了一个可训练模块 ( W_{\text{down}} W_{\text{up}} )。因此,给定输入 ( X ),重要性比率 ( IM ) 定义如下:
[ IM = \frac{|X \cdot W_{\text{down}} W_{\text{up}}|_2}{|X \cdot W|_2} ]
其中 (| \cdot |2) 表示L2范数,测量从PEFT模块输出的向量的大小。因为PEFT模块中的一个权重矩阵(如LoRA方法中的 ( W{\text{up}} ))通常初始化为零,因此在训练过程中,LoRA模块输出的大小与权重 ( W ) 的输出大小的比率表明了在该位置添加的模块所需变化的重要性。

对于Adapter方法,在子层之后添加了一个可训练模块。给定前一子层的输出 ( h ),重要性比率 ( IM ) 定义如下:
[ IM = \frac{|f(h W_{\text{down}}) W_{\text{up}}|_2}{|h|_2} ]
其中 ( IM ) 表示Adapter模块对前一子层输出信息 ( h ) 的信息变化。

在实现中,为了更好地估计所有添加位置的重要性,对于LoRA方法,我们在基础模型的所有权重上添加了LoRA模块。这可能在短期内导致比原始LoRA更高的成本,但我们的早期估计步骤远小于总训练步骤,从而大大减少了总成本。对于Adapter方法,我们遵循原始方法,在MHA和FFN子层之后添加它们。估计后,我们使用 ( IM ) 以剪枝率 ( \rho_M ) 全局剪枝整个PEFT模块。

4.3.2 秩剪枝

除了粗粒度剪枝,我们还对模块的秩进行细粒度剪枝。这使我们能够减少更多可训练参数并提高训练效率。我们的动机是基于并非所有模块都需要相同的秩分配。为了消除冗余秩,我们使用一阶泰勒展开(Molchanov et al., 2017)来估计PEFT模块中与秩连接的每个参数的重要性 ( I_{W_{i,j}} ):
[ I_{W_{i,j}} = \frac{\partial L}{\partial W_{i,j}} W_{i,j} ]
其中 ( W_{i,j} ) 表示PEFT模块中 ( W_{\text{down}} ) 或 ( W_{\text{up}} ) 的第 ( i ) 行和第 ( j ) 列的参数。秩的重要性 ( IR ) 是对应于 ( W_{\text{down}} ) 列和 ( W_{\text{up}} ) 行中所有参数的重要性 ( I_{W_{i,j}} ) 的总和。估计后,我们以剪枝率 ( \rho_R ) 全局剪除不重要的秩。

5 实验

5.1 实验设置

数据集和评估:我们在来自GLUE(Wang et al., 2019b)和SuperGLUE(Wang et al., 2019a)的八个自然语言理解(NLU)任务和六个问答(QA)任务上进行了实验。因为我们的目标是提高训练效率,在小数据集上训练没有太大意义。因此,我们选择了GLUE中的四个较大数据集,包括MNLI(Williams et al., 2018),QNLI(Rajpurkar et al., 2016),QQP和SST-2(Socher et al., 2013),以及SuperGLUE中的四个较大数据集,包括ReCord(Zhang et al., 2018),WiC(Pilehvar and Camacho-Collados, 2019),BoolQ(Clark et al., 2019)和MultiRC(Khashabi et al., 2018)。对于MNLI,我们报告匹配验证集的准确率。对于QNLI、QQP、SST-2、WiC和BoolQ,我们报告准确率。对于ReCord,我们报告F1得分;对于MultiRC,我们报告所有答案选项的F1得分(F1a)。问答任务包括OpenBookQA(Mihaylov et al., 2018),PIQA(Bisk et al., 2020),ARC-Easy和ARC-Challenge(Clark et al., 2018),SciQ(Welbl et al., 2017)和WebQuestions(Berant et al., 2013)。我们使用lm-evaluation-harness(Gao et al., 2023)报告所有问答任务的准确率。

基线方法:我们使用RoBERTa-Large作为NLU任务的基础模型,OPT-1.3B和OPT-6.7B作为问答任务的基础模型。我们选择了几个基线方法来验证我们方法的有效性。Full-FT是传统的微调方法。Adapter(Houlsby et al., 2019)和LoRA(Hu et al., 2022)是我们框架中使用的原始结构。LayerDrop(Fan et al., 2020)是一种通过在训练过程中动态丢弃层来提高训练效率的强基线方法。我们重新实现了它并结合LoRA方法使用。LST(Sung et al., 2022)通过避免基础模型中的反向传播来提高模型训练效率。Offsite-Tuning(Xiao et al., 2023)使用从基础模型派生的模拟器进行高效训练,并在推理时将模拟器的层替换回基础模型。LLM-Pruner(Ma et al., 2023)在少量与任务无关的语料库上剪枝模型,并使用LoRA恢复性能,从而提高训练效率。我们重新实现了他们的原始任务无关剪枝,并添加了使用任务数据中1k随机样本的任务特定剪枝实现。

实现:对于GLUE基准,我们将早期剪枝的估计步骤控制在总训练步骤的5%左右。对于更具挑战性的SuperGLUE基准,我们将估计步骤设置在10%以内。对于问答任务,我们统一使用10%的训练步骤。详细的剪枝设置以及其他训练细节,请参见附录A.1。

5.2 实验结果

5.2.1 NLU任务上的实验结果

我们首先在GLUE基准上评估我们的方法。如表1所示,在仅使用基础模型72%参数的情况下(剪枝了5/16的头和1/3的FFN中间维度),通过剪枝PEFT模块和秩,我们实现了与原始方法相当的性能,并且仅使用了0.3M的可训练参数。这使得训练速度提升了1.4倍,并由于剪枝而改进了内存使用情况。此外,我们的方法在具有相同速度、但可训练参数更少的情况下,优于基线方法。当增加剪枝率并保留基础模型67%的参数时,Light-PEFT在确保性能略优于基线的同时,实现了1.6倍的训练加速。

在更具挑战性的SuperGLUE基准上,如表2所示,我们剪枝了4/16的头和30%的FFN中间维度,保留了基础模型76%的参数和0.3M的可训练参数。这实现了与原始PEFT方法相当的性能,证明了我们方法中基础模型掩蔽早期剪枝的有效性。

5.2.2 问答任务上的实验结果

对于问答任务(表3),我们首先在OPT-1.3B上进行实验。我们剪枝了参数(12/32的头和2/5的中间维度),保留了基础模型64%的参数和1.5M的可训练参数,实现了与原始方法相当的性能。当原始LoRA方法中的可训练参数设为1.57M(r=8)时,我们的方法在基础模型参数更少的情况下优于原始LoRA,证明了我们方法中多粒度PEFT早期剪枝的有效性。

与Offsite-Tuning相比,我们的方法在没有高成本蒸馏训练的情况下实现了更好的性能。与LLM-Pruner相比,我们的方法优于任务无关和任务特定的实现,并且我们的剪枝过程不需要大模型的梯度,显著减少了计算成本。即使将剪枝比例提高到54%,我们仍能保持优于基线的方法的性能。

在更大的OPT-6.7B模型上,剪枝了比OPT-1.3B更多的基础模型参数,并使用了5.2M的可训练参数,我们实现了与原始方法相当的性能。当将可训练参数减少到2M时,我们的方法仍然表现出良好的性能。这些实验结果表明,在问答任务中,我们可以使用Light-PEFT框架去除基础模型和可训练模块中的更多冗余参数,提高训练效率,同时确保性能。

5.3 分析

5.3.1 消融研究

在第5.2节中,我们已经展示了基础模型剪枝的性能(更多实验见附录A.2)。这里,我们进行消融研究以检查两种PEFT剪枝策略:模块剪枝和秩剪枝(表4)。与不使用任何PEFT剪枝相比,使用模块剪枝或秩剪枝通常会提高泛化能力,从而在大多数情况下增强性能,这表明这两种剪枝策略的有效性。此外,通过结合这两种剪枝策略,尽管剪枝了更多的可训练参数,模型仍然保持了相当的性能水平。

5.3.2 训练和推理效率

我们在NVIDIA RTX 3090上验证了我们方法的训练和推理效率。在训练效率方面(图4),我们在RoBERTa-Large上进行实验,保留了67%的基础模型参数和0.3M的可训练参数,结果模型权重内存减少了32%,激活内存减少了40%,峰值内存减少了39%。计算10个批次的总时间,我们在前向和反向传播时间上实现了2.2倍的加速,相比原始LoRA。

在推理效率方面(表5),我们在OPT-6.7B上进行实验,代表了广泛使用的生成型LLMs。与在LLMs微调中将LoRA模块添加到所有矩阵上的常规做法(Vanilla)相比,我们提出的基础模型剪枝和PEFT模块剪枝可以有效地将推理速度提高最多1.6倍。此外,基础模型剪枝可以有效地减少模型加载内存使用最多48%。

6 结论

本文介绍了Light-PEFT,一种旨在提高PEFT技术在微调过程中效率的新框架。该框架包含两种方法:基础模型的掩蔽早期剪枝和PEFT的多粒度早期剪枝。Light-PEFT框架在训练的早期阶段估计基础模型和PEFT模块中的冗余参数,并对其进行剪枝,以实现更高效的微调。我们在GLUE、SuperGLUE和问答任务中使用各种模型验证了我们的方法。实验结果表明,Light-PEFT在训练和推理速度上都有加速效果,减少了内存使用,并保持了相当的性能。

限制

尽管Light-PEFT在提高训练和推理效率以及良好性能方面取得了进展,我们的工作主要关注单任务微调场景。未来值得探索的方向是多任务学习场景下冗余参数的估计和早期剪枝,从而实现跨多个任务的高效微调。