PEFT 需从 GitHub 主分支安装,PyPI 旧版本可能不支持 use_dora;DoRA 收敛比 LoRA 慢,沿用 LoRA 超参可能过拟合,建议先降学习率并尝试一半的 rank;扩散模型上的 DoRA 微调仍属实验性,需重新调超参。

DoRA
NVlabs更新放缓DoRA 是一种把权重分解为幅度和方向两部分再做低秩适配的微调方法,用更少的可训练参数逼近全量微调效果,适合大模型和视觉语言模型的高效微调。
[ICML2024 (Oral)] Official PyTorch implementation of DoRA: Weight-Decomposed Low-Rank Adaptation
pip install git+https://github.com/huggingface/peft.git -qREADME 未说明具体显存要求;提到 QDoRA/FSDP 可在消费级 GPU 上微调 LLM,但未给出型号或显存数字。
把预训练权重拆成幅度和方向做微调的 LoRA 改进方案,效果更好且推理无额外开销
DoRA 是一种把权重分解为幅度和方向两部分再做低秩适配的微调方法,用更少的可训练参数逼近全量微调效果,适合大模型和视觉语言模型的高效微调。
核心能力
- 将预训练权重分解为幅度与方向两个分量分别微调
- 方向更新复用 LoRA,保持可训练参数少
- 相比 LoRA 提升学习能力与训练稳定性,推理无额外开销
- 已集成 HuggingFace PEFT,设 use_dora=True 即可启用
- 支持 Linear、Conv1d、Conv2d 及 bitsandbytes 量化线性层
容易踩的坑
暂无 release 数据(可能没有发版,或尚未同步)。
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
The Official PyTorch implementation of DoRA: Weight-Decomposed Low-Rank Adaptation [ICML2024 (Oral, acceptance rate: 1.5%)].
Shih-Yang Liu*, Chien-Yi Wang, Hongxu Yin, Pavlo Molchanov, Yu-Chiang Frank Wang, Kwang-Ting Cheng, Min-Hung Chen (*Work done during the internship at NVIDIA Research)
[Paper] [Website] [NV Blog] [BibTeX]
DoRA decomposes the pre-trained weight into two components, magnitude and direction, for fine-tuning, specifically employing LoRA for directional updates to minimize the number of trainable parameters efficiently. By employing DoRA, we enhance both the learning capacity and training stability of LoRA while avoiding any additional inference overhead. DoRA consistently outperforms LoRA on fine-tuning LLaMA, LLaVA, and VL-BART on various downstream tasks, such as commonsense reasoning, visual instruction tuning, and image/video-text understanding.
For business inquiries, please visit our website and submit the form: NVIDIA Research Licensing.
💥 News 💥
- [07.02.2024] 🔥🔥 The official NVIDIA Tech Blog of DoRA is released HERE!!
- [06.02.2024] 🔥🔥 DoRA is selected as an Oral paper in ICML 2024!!
- [05.24.2024] 🔥🔥 Add step-by-step instructions on how to reproduce the QDoRA/FSDP results, see /QDoRA
- [05.02.2024] 🔥🔥 DoRA is accepted to ICML 2024!! See you in Vienna!!
- [04.27.2024] 🔥🔥 We have added the source code and the DoRA weight for finetuning LLaMA2-7B and LLaMA3-8B on commonsense reasoning tasks!
- [04.22.2024] 🔥🔥 Check out an awesome blog post FSDP/QDoRA from Answer.ai which shows that QDoRA significantly outperforms QLoRA and even edges out full finetuning!
- [04.18.2024] 🔥🔥 We have released the source code and the DoRA weight for reproducing the results in our paper!
- [03.20.2024] 🔥🔥 DoRA is now fully supported by the HuggingFace PEFT package and can now support Linear, Conv1d, and Conv2d layers, as well as linear layers quantized with bitsandbytes!
Useful Links
- An amazing tutorial about implementing DoRA from scratch by Sebastian Raschka, see https://magazine.sebastianraschka.com/p/lora-and-dora-from-scratch
- An amazing blog post from Answer.AI about QDoRA/FSDP which allows finetuning LLMs on consumer-level GPUs, see https://www.answer.ai/posts/2024-04-26-fsdp-qdora-llama3.html
Quick Start and some tricks regarding finetuning with DoRA
HuggingFace PEFT
DoRA is now supported by the Huggingface PEFT package. You can install the PEFT package using
pip install git+https://github.com/huggingface/peft.git -q
After PEFT is installed, you can simply set the use_dora argument of LoraConfig() to True for applying DoRA.
An example could be as follows:
from peft import LoraConfig
# Initialize DoRA configuration
config = (
use_dora=True, ...
)
Please refer to the official documentation for more details.
HuggingFace Diffusers
You can also toy with DoRA on finetuning diffusion models. See huggingface/diffusers. Another good tutorial would be this Colab notebook from Linoy Tsaban.
In general, DoRA finetuning on diffusion models is still experimental and is likely to require different hyperparameter values to perform best compared to LoRA.
Specifically, people have noticed 2 differences to take into account in your training:
- LoRA seem to converge faster than DoRA (so a set of parameters that may lead to overfitting when training a LoRA may be working well for a DoRA)
- DoRA quality superior to LoRA especially in lower ranks: The difference in quality of DoRA of rank 8 and LoRA of rank 8 appears to be more significant than when training ranks of 32 or 64 for example.
Some DoRA vs. LoRA diffusion finetuning results
- Example From Linoy Tsaban(Images generated by DoRA are on the left and LoRA on the right):
- Example From merve:
DoRA hyperparameters settings
[!NOTE] 💡 While fine-tuning with DoRA, utilizing the configuration of LoRA can already achieve better results most of the time, achieving optimal performance compared to LoRA still requires adjustments to the hyperparameters.
We suggest starting with a slightly lower learning rate than that of LoRA, and users may also experiment with varying LoRA dropout ratios.
User may also start with half of the rank of the LoRA configuration which oftentimes can already result in comparable or even superior accuracy compared to that of LoRA.
Reproducing the results in the paper
This repo contains four directories:
./commonsense_reasoning contains the code to finetune LLaMA-7B/13B using DoRA on the commonsense reasoning tasks. This directory is modified based on LLM-Adapter.
./instruction_tuning_dvora contains the code to finetune LLaMA-7B and LLaMA2-7B using DoRA and DVoRA (DoRA+VeRA) with the cleaned Alpaca instruction tuning dataset. This directory is modified based on VeRA.
./image_video_text_understanding contains the code to finetune VL-BART using DoRA for the image/video-text understanding tasks. This directory is modified based on VL-Adapter.
./visual_instruction_tuning contains the code to finetune LLaVA-1.5-7B on the visual instruction tuning tasks with DoRA. This directory is modified based on LLaVA.
DoRA vs LoRA on the commonsense reasoning tasks
| Model | r | BoolQ | PIQA | SIQA | HellaS | WinoG | ARC-e | ARC-c | OBQA | Average |
|---|---|---|---|---|---|---|---|---|---|---|
| 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(ours) | 16 | 70.0 | 82.6 | 79.7 | 83.2 | 80.6 | 80.6 | 65.4 | 77.6 | 77.5 |
| LLaMA-7B-DoRA(ours) | 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(ours) | 16 | 72.0 | 83.1 | 79.9 | 89.1 | 83.0 | 84.5 | 71.0 | 81.2 | 80.5 |
| LLaMA2-7B-DoRA(ours) | 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(ours) | 16 | 74.5 | 88.8 | 80.3 | 95.5 | 84.7 | 90.1 | 79.1 | 87.2 | 85.0 |
| LLaMA3-8B-DoRA(ours) | 32 | 74.6 | 89.3 | 79.9 | 95.5 | 85.6 | 90.5 | 80.4 | 85.8 | 85.2 |
Star History
Contact
Shih-Yang Liu: [email protected] or [email protected]
Citation
If you find DoRA useful, please consider giving a star and citation:
@article{liu2024dora,
title={DoRA: Weight-Decomposed Low-Rank Adaptation},
author={Liu, Shih-Yang and Wang, Chien-Yi and Yin, Hongxu and Molchanov, Pavlo and Wang, Yu-Chiang Frank and Cheng, Kwang-Ting and Chen, Min-Hung},
journal={arXiv preprint arXiv:2402.09353},
year={2024}
}
Licenses
Copyright © 2024, NVIDIA Corporation. All rights reserved.
This work is made available under the NVIDIA Source Code License-NC. Click here to view a copy of this license.