LoRA+
本代码库包含LoRA+的代码,这是在论文LoRA+: 大型模型的高效低秩适应中介绍的。
新闻
LoRA+现已被ICML 2024接收!
使用方法
LoRA+为您的优化器引入了一个新的必需超参数(和另一个可选超参数)。适当设置这个超参数可以提高微调性能,尤其是在更具挑战性的下游任务中。
LoRA+参数
loraplus_lr_ratio
:学习率的比率$\eta_B / \eta_A$,其中$\eta_A$作为优化器学习率传入(例如,learning_rate
或lr
)。关于如何设置这个参数,请参见下面的注意事项。loraplus_lr_embedding
:(可选)如果LoRA模块被添加到嵌入层,您可以为它们指定不同的学习率。默认值为1e-6
。
注意:
loraplus_lr_ratio
应该$\geq 1$,但loraplus_lr_ratio
的最佳选择是
- 模型和任务相关的。
- 需要与优化器学习率(即$\eta_A$)一起设置。
作为经验法则,当任务更困难且模型需要更新其特征以学习得更好时,loraplus_lr_ratio
应该更大。在这种情况下,将学习率$\eta_A$略微调小(例如,减小2倍)比典型的vanilla LoRA学习率更有帮助。请参阅论文以获取示例。
代码
使用LoRA+的代码可以在lora_plus.py
中找到。
使用Huggingface Trainer
将LoRA+集成到使用huggingface Trainer
的微调项目中很简单。只需用LoraPlusTrainer
替换项目中的Trainer
,并使用LoraPlusTrainingArguments
传入训练参数(包括LoRA+参数)。请参见image_classification.ipynb
笔记本以获取示例。
不使用Trainer
对于不使用Trainer
的LoRA+训练,您可以直接使用通过create_loraplus_optimizer
函数创建的优化器。这个函数包装了一个优化器类,并为优化器适当设置模型参数的学习率。
import torch
# LoRA模型
model = ...
optimizer_cls = torch.optim.AdamW
optimizer_kwargs = {'lr': 5e-5, 'eps': 1e-6, 'betas': (0.9, 0.999), 'weight_decay': 0.0}
loraplus_lr_ratio = 20.0
optimizer = create_loraplus_optimizer(model, optimizer_cls, optimizer_kwargs, loraplus_ratio):
示例
在glue/
文件夹中,我们提供了使用LoRA+在GLUE上微调模型的代码,可用于复现论文中的结果。我们还包含了一个image_classification.ipynb
笔记本,用于演示代码使用。
要求
要运行代码,首先使用以下命令安装依赖:
pip install -r requirements.txt
运行GLUE实验
使用以下命令下载GLUE任务:
python download_glue.py --task_names mnli,qqp --data_dir data/
查看scripts/
文件夹以获取使用gpt2、roberta-base和llama-7b进行微调的示例。
引用
该代码是LoRA+项目的一部分。如需引用,请使用
@article{hayou2024loraplus,
title={LoRA+: Efficient Low Rank Adaptation of Large Models},
author={Soufiane Hayou and Nikhil Ghosh and Bin Yu},
year={2024},
journal={arXiv 2402.12354}
}
致谢
我们感谢亚马逊网络服务(AWS)通过亚马逊研究奖项下的云计算积分为本项目提供计算支持。