DoRA:实践指南

作者:袖梨 2026-09-11

在项目中评估DoRA,可以先看清用途边界:[ICML2024(口语)] DoRA的官方PyTorch实现:权重分解低阶适应。一旦进入日常自动化环节,输入边界、依赖和失败处理如果不清楚就很难稳定复用会直接影响交付,这也是我最关心的风险。更实际的做法是用一项范围明确的真实任务完成最小试跑,同时核对配置时间、输出质量、异常信息和维护痕迹,不要直接在关键项目上。我会把它列入愿意先做小范围验证并复查原始文档的团队的候选清单,而不是仅凭项目介绍直接纳入生产。

NVlabs/DoRA 项目截图 1

DoRA: Weight-Decomposed Low-Rank Adaptation [ICML2024 (Oral)]

PyTorch 的官方实现 DoRA:权重分解低阶适应 [ICML2024(口头,接受率:1.5%)]。

刘世阳*、王建义、殷红旭、Pavlo Molchanov、王玉强、程光廷、陈敏宏

(*在NVIDIA Research实习期间完成的工作)

[Paper] [Website] [NV Blog] [BibTeX]

DoRA将预训练的权重分解为幅度方向两个部分进行微调,具体采用LoRA进行方向更新,以有效地减少可训练参数的数量。通过采用DoRA,我们增强了LoRA的学习能力和训练稳定性,同时避免了任何额外的推理开销。 DoRA 在各种下游任务(例如常识推理、视觉指令调整和 image/video-text 理解)上的微调 LLaMA、LLaVA 和 VL-BART 上始终优于 LoRA。

如需业务咨询,请访问我们的网站并提交表格:NVIDIA 研究许可。

新闻

  • [07.02.2024] DoRA 官方 NVIDIA 技术博客发布 HERE!!
  • [06.02.2024] DoRA 被选为 ICML 2024 的口头论文!!
  • [05.24.2024] 添加有关如何重现 QDoRA/FSDP 结果的分步说明,请参阅 /QDoRA
  • [05.02.2024] DoRA 被接受为 ICML 2024!!维也纳见!!
  • [04.27.2024] 我们添加了源代码和 DoRA 权重,用于在常识推理任务上微调 LLaMA2-7B 和 LLaMA3-8B!
  • [04.22.2024] 查看来自 Answer.ai 的一篇精彩博客文章 FSDP/QDoRA,其中显示 QDoRA 显着优于 QLoRA,甚至完全超越微调!
  • [04.18.2024] 我们已经发布了源代码和 DoRA 权重,用于重现论文中的结果!
  • [03.20.2024] DoRA 现在由 HuggingFace PEFT 包完全支持,现在可以支持线性、Conv1d 和 Conv2d 层,以及使用位和字节量化的线性层!

有用的链接

  • Sebastian Raschka 撰写的关于从头开始实现 DoRA 的精彩教程,请参阅 https://magazine.sebastianraschka.com/p/lora-and-dora-from-scratch
  • Answer.AI 发表了一篇关于 QDoRA/FSDP 的精彩博客文章,它允许在消费者级别 GPUs 上微调 LLMs,请参阅 https://www.answer.ai/posts/2024-04-26-fsdp-qdora-llama3.html

快速入门和一些关于 DoRA 微调的技巧

HuggingFace PEFT

DoRA 现在由 Huggingface PEFT 软件包 支持。您可以使用以下命令安装 PEFT 软件包

pip install git+https://github.com/huggingface/peft.git -q

安装PEFT后,只需将LoraConfig()use_dora参数设置为True即可应用DoRA。

示例如下:

from peft import LoraConfig

# Initialize DoRA configuration
config = (
    use_dora=True, ...
)

更多详情请参考官方文档。

HuggingFace 扩散器

您还可以使用 DoRA 微调扩散模型。请参见 huggingface/diffusers。另一个很好的教程是 Linoy Tsaban 的 Colab 笔记本。

一般来说,DoRA 对扩散模型的微调仍然处于实验阶段,与 LoRA 相比,可能需要不同的超参数值才能获得最佳性能。

具体来说,人们注意到在训练中需要考虑两个差异:

  1. LoRA 似乎比 DoRA 收敛得更快(因此,训练 LoRA 时可能导致过度拟合的一组参数可能对 DoRA 效果很好)
  2. DoRA 质量优于 LoRA,尤其是在较低等级中:等级 8 的 DoRA 和等级 8 的 LoRA 的质量差异似乎比训练等级为 32 或 64 时更显着。

一些 DoRA 与 LoRA 扩散微调结果

  • 来自 Linoy Tsaban 的示例(DoRA 生成的图像在左侧,LoRA 生成在右侧):
  • 来自 merve 的示例:

DoRA 超参数设置

[!NOTE] 在使用DoRA进行微调的同时,利用LoRA的配置大多数时候已经可以取得更好的效果,但相比LoRA要达到最佳性能仍然需要调整超参数。

我们建议从比 LoRA 稍低的学习率开始,用户也可以尝试不同的 LoRA 丢失率。

用户还可以从 LoRA 配置的一半等级开始,与 LoRA 相比,该配置通常已经可以产生可比甚至更高的精度。

重现论文中的结果

该存储库包含四个目录:

./commonsense_reasoning 包含在常识推理任务上使用 DoRA 微调 LLaMA-7B/13B 的代码。该目录是在LLM-Adapter的基础上修改的。

./instruction_tuning_dvora 包含使用 DoRA 和 DVoRA (DoRA+VeRA) 以及清理后的 Alpaca 指令调整数据集来微调 LLaMA-7B 和 LLaMA2-7B 的代码。该目录是在VeRA的基础上修改的。

./image_video_text_understanding 包含使用 DoRA 对 image/video-text 理解任务微调 VL-BART 的代码。该目录是在VL-Adapter的基础上修改的。

./visual_instruction_tuning 包含使用 DoRA 在视觉指令调整任务上微调 LLaVA-1.5-7B 的代码。该目录是在LLaVA的基础上修改的。

DoRA 与 LoRA 在常识推理任务上的比较

型号 r BoolQ PIQA SIQA HellaS WinoG ARC-e ARC-c OBQA 平均
LLaMA-7B-LoRA 32 67.5 80.8 78.2 83.4 80.4 78.0 62.6 79.1 76.3
LLaMA-7B-DoRA(我们的) 16 70.0 82.6 79.7 83.2 80.6 80.6 65.4 77.6 77.5
LLaMA-7B-DoRA(我们的) 32 69.7 83.4 78.6 87.2 81.0 81.9 66.2 79.2 78.4
LLaMA2-7B-LoRA 32 69.8 79.9 79.5 83.6 82.6 79.8 64.7 81.0 77.6
LLaMA2-7B-DoRA(我们的) 16 72.0 83.1 79.9 89.1 83.0 84.5 71.0 81.2 80.5
LLaMA2-7B-DoRA(我们的) 32 71.8 83.7 76.0 89.1 82.6 83.7 68.2 82.4 79.7
LLaMA3-8B-LoRA 32 70.8 85.2 79.9 91.7 84.3 84.2 71.2 79.0 80.8
LLaMA3-8B-DoRA(我们的) 16 74.5 88.8 80.3 95.5 84.7 90.1 79.1 87.2 85.0
LLaMA3-8B-DoRA(我们的) 32 74.6 89.3 79.9 95.5 85.6 90.5 80.4 85.8 85.2

许可证

版权所有 © 2024,NVIDIA 公司。版权所有。

本作品根据 NVIDIA 源代码许可证 - NC 提供。单击此处的 here 查看此许可证的副本。

相关文章

精彩推荐