对各种参数高效微调(PEFT)技术进行评估,需要进行多方面的分析。仅仅了解适配器(Adapters)、LoRA或提示调优(Prompt Tuning)等方法的工作原理是不够的。我们需要了解它们在几个主要性能方面的相对优缺点,以便针对具体的应用和硬件限制做出明智的选择。“最佳”PEFT方法通常取决于具体情境,需要在效率提升与对模型能力可能造成的影响之间取得平衡。
评估维度
在比较PEFT技术时,我们主要关注以下几个方面:
- 参数效率: 与基础大语言模型的总参数量相比,实际训练或新增的参数有多少?这通常以原始模型大小的百分比来表示。可训练参数越少,通常意味着训练期间存储优化器状态所需的内存越少,以及任务特定调整的检查点越小。
- 计算成本(训练): 使用PEFT方法微调模型需要多少计算量(例如,以浮点运算数FLOPs或实际运行时间衡量)?这受可训练参数数量和任何新增操作的复杂性影响。
- 内存占用(训练与推理): 微调过程和推理过程中会消耗多少GPU内存?训练内存受模型参数、激活值、梯度和优化器状态的影响。推理内存取决于加载的模型权重(基础模型加上PEFT参数)以及生成时的激活值。QLoRA专门旨在减少训练内存。
- 任务表现: PEFT微调后的模型在目标下游任务上的表现与微调整个模型(完全微调)相比如何?表现通常使用标准任务特定指标(例如,准确率、F1分数、BLEU、ROUGE、困惑度)来衡量。目标通常是在使用显著更少参数的同时,达到与完全微调相近的表现。
- 推理速度(延迟与吞吐量): PEFT方法在推理时是否会比基础模型或完全微调模型引入额外的延迟开销?有些方法(例如权重合并后的LoRA)引入的开销很小甚至没有,而另一些方法(例如适配器)则会增加额外的计算步骤。
- 实现复杂性与集成: 将PEFT方法实现并集成到现有训练和部署流程中有多容易?它是否需要对基础模型的架构进行大幅修改?
PEFT方法比较分析
让我们根据这些维度,比较本章中讨论的主要PEFT技术:
-
适配器模块(例如,Houlsby、Pfeiffer):
- 参数效率: 高效率。通常根据瓶颈维度,相对于基础模型大小,新增0.1%到5%的参数。
- 计算成本(训练): 中等。只训练小型适配器层,比完全微调快得多。
- 内存占用: 训练期间参数和优化器状态的额外内存占用低。推理内存因适配器参数而略微增加。通过适配器的激活值也会增加内存使用。
- 任务表现: 通常能达到接近完全微调的表现,特别是在适配器容量充足的情况下。在某些基准测试中,表现有时会略微落后于LoRA等方法。
- 推理速度: 会引入延迟开销,因为额外的适配器层必须在Transformer块内顺序执行。
- 实现: 需要修改模型架构以插入适配器层。
adapter-transformers等库简化了这一点。
-
提示调优(Prompt Tuning)、前缀调优(Prefix Tuning)、P-Tuning:
- 参数效率: 极高效率。只训练少量连续的提示/前缀向量(通常小于总参数的0.1%)。
- 计算成本(训练): 非常低。只更新提示参数,训练速度非常快。
- 内存占用: 训练和推理期间额外内存占用极小。只需存储小型提示/前缀向量。
- 任务表现: 可以有效,尤其适用于生成任务,但表现有时会低于修改内部权重的方法(适配器、LoRA),特别是在复杂的自然语言理解(NLU)任务上。对初始化和超参数调优(例如,提示长度)敏感。
- 推理速度: 延迟开销极小。新增的前缀只是略微延长了输入序列长度。
-
实现: 简单,修改输入嵌入或注意力键/值。需要仔细处理虚拟token。
-
低秩适应(LoRA):
- 参数效率: 高效率,可通过秩 r 调整。r 的典型值(例如4、8、16、64)会导致可训练参数量约为基础模型的0.01%到1%。可训练参数数量随 r、适应权重矩阵的维度(din,dout)以及适应层数而变化。对于矩阵 W∈Rdout×din,LoRA增加 r×(din+dout) 个参数。
- 计算成本(训练): 低。训练涉及更新小型低秩矩阵 A 和 B。比完全微调快,并且通常与适配器相当或略快。
- 内存占用: 训练期间参数和优化器状态的额外内存占用低。推理期间,如果权重合并(W′=W+BA),则与基础模型相比,参数内存没有增加。如果保持分离,内存会略微增加。
- 任务表现: 通常在广泛的任务上达到非常接近甚至匹配完全微调的表现。常被认为是强大的基准。
- 推理速度: 重要的一点是,如果低秩矩阵 B 和 A 合并到原始权重(W′=W+BA)中,LoRA在推理期间不引入延迟开销。这是相对于适配器的显著优势。如果保持分离,则额外的矩阵乘法会产生小幅开销。
- 实现: 需要修改特定层(通常是线性/注意力层)以包含并行低秩路径。Hugging Face的
peft等库使集成变得直接简单。
-
量化LoRA(QLoRA):
- 参数效率: 与LoRA相同(可训练参数是LoRA矩阵 A 和 B)。
- 计算成本(训练): 与LoRA类似,但涉及前向/反向传播过程中的动态反量化/量化,这可能会根据实现方式增加一些开销。
- 内存占用: 大幅减少训练内存。通过以下方式实现:
- 保持基础模型权重处于量化状态(例如,4比特NormalFloat, NF4)。
- 将优化器状态分页到CPU内存(如果需要)。
- 只在需要时对计算中的基础模型权重进行反量化。
这使得在内存受限的硬件上微调更大的模型成为可能。推理内存取决于最终模型是否使用量化后的基础权重以及合并/分离的LoRA适配器进行部署。
- 任务表现: 表现与LoRA和完全微调非常接近,表明4比特量化与PEFT结合可以有效保留模型能力。
- 推理速度: 推理速度取决于最终部署配置。如果使用4比特权重和合并的LoRA适配器部署(需要在合并前反量化或使用专用内核),性能会受益于更小的模型大小,但可能会因硬件对低比特操作的支持而产生计算开销。
- 实现: 由于集成了量化(特别是NF4和双重量化)和内存管理技术,比LoRA更复杂。依赖支持这些功能的库。
可视化权衡
选择PEFT方法需要权衡这些因素。下图提供了比较:
PEFT方法比较。参数、内存和延迟开销越低越好。任务表现(相对于完全微调,其值为1.0)越高越好。这些值是典型权衡的示例性表示。QLoRA的主要优势是大幅降低了训练内存,此处已显示。LoRA/QLoRA的推理延迟假定在可能的情况下合并了权重。
定性考量与选择指导
请考虑以下几点:
- 超参数敏感性: 提示/前缀调优对提示的长度和初始化可能相当敏感。LoRA的表现取决于秩 r、学习率以及适应哪些层的选择(通常注意力中的查询和值矩阵就足以)。适配器需要调优瓶颈维度。
- 任务适用性: 尽管LoRA和适配器在各种任务上表现良好,但提示调优可能在生成任务或希望对模型进行最小程度修改时表现更出色。
- 可合并性: LoRA能够将适配器合并到基础权重中,从而实现零推理开销,这对于对延迟敏感的部署情境来说是一个极具吸引力的优势。
- 可组合性: 多个任务适配器(例如,多个LoRA适配器)能否轻松组合或切换?这对于大多数PEFT方法来说通常是可行的,允许单个基础模型副本高效地服务多个任务。
- 硬件: QLoRA专门为训练期间内存受限的GPU设计。推理表现受益于具有优化低比特计算支持的硬件。
选择指导:
- 需要最大参数效率: 提示调优提供最少的可训练参数。
- 最低训练内存: QLoRA是明显的优胜者,使在更少硬件上微调更大模型成为可能。
- 最佳表现/效率平衡: LoRA通常能达到一个理想的平衡点,以高参数效率和零推理延迟开销(合并时)实现接近完全微调的表现。
- 避免模型修改: 提示/前缀调优避免改变内部模型结构。
- 现有基础设施: 如果工具或现有工作偏爱适配器,那么适配器可能适用,尽管存在推理延迟。
最终,在您的特定目标任务、模型和硬件上进行经验评估非常重要。此处总结的性能特点为选择候选PEFT方法以及理解高效适应大型语言模型所涉及的内在权衡提供了有力的起始点。