对当前大型语言模型 (LLM) 的每一个参数 (parameter)进行微调 (fine-tuning)——这类模型通常包含数百亿甚至数千亿参数——带来了显著的实际障碍。完整微调需要大量的计算资源、庞大的内存占用和可观的训练时间,这通常将其应用范围限制在拥有大规模 GPU 集群的组织。参数高效微调 (PEFT) 方法通过仅修改模型参数的一小部分,直接应对了这些局限,提供了一种更节省资源的模型适配方式。
完整参数 (parameter)更新的高昂代价
理解与完整微调 (fine-tuning)相关的成本有助于阐明 PEFT 的动因。
-
内存需求: 训练期间所需的内存远不止存储模型权重 (weight) (W)。主要占用者包括:
- 优化器状态: 像 Adam 这样的现代优化器为每个可训练参数维护辅助变量。例如,Adam 通常存储第一 (m) 和第二 (v) 矩估计,这实际使需要更新的参数的内存需求增加了一倍。对于一个拥有 P 个参数的模型,这会额外增加与 2×P 成比例的内存。
- 梯度: 在反向传播 (backpropagation)过程中,必须为每个可训练参数计算并存储梯度 (∇W),这会额外增加与 P 成比例的内存。
- 激活值: 前向传播过程中计算出的中间激活值通常需要存储,以便在反向传播中进行梯度计算。其大小取决于批处理大小、序列长度和模型架构。虽然像激活检查点这样的技术可以减少这部分内存,但它仍然是一个重要因素,特别是对于大型模型和长上下文 (context)。
当 P 代表数十亿参数时,权重、优化器状态、梯度和激活值所需的总内存可以轻易超出单个 GPU 甚至多 GPU 服务器的容量,因此需要分布式训练设置。
-
计算负担 (FLOPs): 前向传播计算对于完整微调和推理 (inference)是相似的。然而,反向传播中梯度计算涉及的操作与可训练参数的数量成比例。更新所有 P 个参数需要在整个网络中计算梯度,这是一个计算密集型过程。
-
存储开销: 也许实际部署中最具限制性的方面是存储。如果需要适配一个基础 LLM(例如,700 亿参数,半精度下约需 140GB)到多个不同任务或应用场景(例如,客户支持、法律文档分析、医疗转录),完整微调会导致每个任务都有模型的 独立、完整副本。存储数十或数百个这样的大模型很快就会变得难以管理且成本高昂。
完整微调期间的近似相对内存使用量,与模型权重本身大小的比较。优化器状态通常占主导地位,其次是梯度和激活值。
高效性带来的益处
PEFT 方法通过仅更新总参数 (parameter)的一小部分(通常小于 1%),大幅缓解了这些成本,带来了多项直接好处:
- 减少内存占用: 由于梯度和优化器状态仅需针对少量可训练的 PEFT 参数,基础模型权重 (weight)的内存开销大幅减少。这使得在普通硬件或单个多 GPU 服务器上微调 (fine-tuning)大型模型成为可能,而完整微调在此类环境下是不可能的。QLoRA 将 PEFT 与量化 (quantization)结合,进一步增强了这一优势。
- 训练更快: 需要更新的参数更少,意味着反向传播 (backpropagation)中需要计算的梯度更少,从而带来更快的训练迭代速度。尽管前向传播时间保持相似(因为基础模型仍在使用),反向传播时间和优化器步骤的减少,明显加快了整体微调过程。
- 计算需求降低: 梯度计算量的减少直接转化为每训练步骤所需更少的 FLOPs,从而降低了总体的能耗和计算成本。
- 高效的任务专用化(存储节省): 这是一个重要的实际优势。您无需为每个任务保存整个包含数十亿参数的模型,只需存储尺寸小得多的 PEFT 参数集(例如,LoRA 矩阵、适配器权重)。大型基础模型只需存储一次,并可在所有任务中共享。适配新任务仅涉及训练和存储这些轻量级修改,其大小通常以兆字节而非千兆字节衡量。
将基础 LLM 适配到两个不同任务时,使用完整微调和 PEFT 的存储需求比较。PEFT 只需存储一次基础模型,外加小的、针对特定任务的适配器权重。
- 减轻灾难性遗忘: 虽然存在专门的技术(第五章会讨论),但冻结基础模型的绝大部分参数本质上有助于保留预训练 (pre-training)期间学到的通用知识。相比之下,完整微调则有显著改变这些参数的风险,可能导致模型在之前能处理的任务上性能下降。
实质上,参数高效性使得大型、强大的语言模型的适配变得实用且可扩展。它降低了为特定需求定制这些模型的门槛,无需大量计算基础设施,从而促进了广泛应用和专业化实践。接下来的章节将详细说明不同的 PEFT 技术 如何 实现这种高效性。