重要提示

您正在查看 NeMo 2.0 文档。此版本对 API 和新库 NeMo Run 进行了重大更改。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。 有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档

支持的 PEFT 方法#

NeMo 2.0#

NeMo 2.0 支持以下 PEFT 微调方法

  1. LoRALoRA: Large Language Models 的低秩自适应

    • LoRA 通过使用两个低秩分解矩阵来表示权重更新,从而提高微调效率。原始模型权重保持冻结,而低秩分解矩阵被更新以适应新数据,从而保持可训练参数的数量较低。与适配器相比,原始模型权重和适配权重可以在推理期间组合,从而避免了模型在推理时的任何架构更改或额外延迟。

    • 在 NeMo 中,您可以自定义适配器瓶颈维度和应用 LoRA 的目标模块。LoRA 可以应用于任何线性层。在 Transformer 模型中,这包括 1) Q、K、V 注意力投影,2) 注意力输出投影层,以及 3) 两个 Transformer MLP 层中的一个或两个。对于 QKV,NeMo 的注意力实现将 QKV 融合为单个投影,因此我们的 LoRA 实现为组合的 QKV 学习单个低秩投影。

  2. DoRADoRA:权重分解的低秩自适应

    • DoRA 将预训练权重分解为幅度和方向。它学习单独的幅度参数,同时采用 LoRA 进行方向更新,从而有效地最小化可训练参数的数量。DoRA 增强了 LoRA 的学习能力和训练稳定性,同时避免了任何额外的推理开销。DoRA 已被证明在各种下游任务上始终优于 LoRA。

    • 在 NeMo 中,DoRA 利用与 LoRA 相同的适配器结构。NeMo 增加了对 DoRA 的张量并行和流水线并行性的支持,使 DoRA 能够扩展到更大的模型变体。

NeMo 1.0 (旧版)#

  1. LoRALoRA: Large Language Models 的低秩自适应

  2. QLoRAQLoRA:量化 LLM 的高效微调

    • 与 LoRA 类似,QLoRA 保持原始模型权重冻结,同时引入低秩适配器以进行自定义。但是,QLoRA 更进一步,通过使用称为 Normal Float 4 (NF4) 的自定义 4 位数据类型来量化冻结的线性权重。适配器与 LoRA 的适配器相同,并保持在 BF16 中。

    • 与 LoRA 相比,QLoRA 的内存效率提高了高达 60%,从而可以使用更少/更少的 GPU 和/或更高的批量大小来微调大型模型。QLoRA 能够达到相同的精度,尽管可能需要不同的收敛方案。但是,缺点是 QLoRA 训练比 LoRA 慢 50% 到 200%。

    • 有关更多详细信息,请访问 NeMo QLoRA 指南

  3. P-TuningGPT 也理解

    • P-Tuning 是提示学习方法系列的一个示例,其中可训练的虚拟 token 被插入到模型输入提示中,以诱导模型执行任务。虚拟 token(也称为“连续”或“软”token)是没有具体映射到模型词汇表中的字符串或字符的嵌入。它们只是 1D 向量,其维度与构成模型词汇表的真实 token 的维度相匹配。

    • 在 P-Tuning 中,使用中间 MLP 模型来生成虚拟 token 嵌入。我们将此中间模型称为我们的 prompt_encoder。提示编码器参数在 p-tuning 开始时随机初始化。所有基础模型参数都冻结,并且仅在每个训练步骤更新提示编码器权重。

    • 在 Nemo 中,您可以自定义虚拟 token 的数量,以及嵌入和 MLP 瓶颈维度。

  4. 适配器 (规范)用于 NLP 的参数高效迁移学习

    • 适配器(Houlsby 设置)是最早应用于 NLP 的 PEFT 方法之一。适配器微调比完全微调更有效,因为基础模型权重被冻结,而仅更新少量适配器模块权重。在这种方法中,通过残差连接将具有瓶颈和非线性激活的两个线性层插入到每个 Transformer 层中。在每种情况下,输出线性层都初始化为 0,以确保未训练的适配器不会影响 Transformer 层的正常前向传递。

    • 在 NeMo 中,您可以自定义适配器瓶颈维度、适配器 dropout 量以及归一化层的类型和位置。

  5. IA3小样本参数高效微调比上下文学习更好更便宜

    • IA3 通过使用学习向量重新缩放激活来提高微调效率。重新缩放层注入到基础模型中的注意力模块(用于键和值)和前馈模块中。与其他 PEFT 方法类似,在微调期间仅更新重新缩放向量以适应新数据,因此更新的参数数量很少。但是,由于重新缩放向量远小于低秩矩阵 (LoRA) 和瓶颈层 (适配器),因此 IA3 将可训练参数的数量进一步减少了一个数量级。学习重新缩放向量也可以与基础权重合并,从而在推理时不会导致架构更改且没有额外的延迟。

    • IA3 适配器没有超参数需要调整。