LoRA 和 QLoRA:大模型的轻量级高效微调方法

1. 模型微调的两种方式

模型微调的本质就是改变模型参数,假设原始模型的参数是 W 0 W_0 W0,微调后的参数是 W 1 W_1 W1,二者之间必然存在一个关系: W 0 + △ W = W 1 W_0+\triangle W=W_1 W0+W=W1,所以模型微调就会有两种方式:

  • 全量微调:直接从 W 0 W_0 W0 微调到 W 1 W_1 W1,但对于大模型来说,全量微调很困难,费时费力费钱。
  • 高效微调 (Parameter Efficient Fine Tuning,PEFT):直接训练一个包含有效信息的参数矩阵 △ W \triangle W W,可以通过各种方式使得 △ W \triangle W W 得参数量远小于 W 0 W_0 W0,从而降低微调开销。

2. LoRA

paper:LoRA: Low-Rank Adaptation of Large Language Models 《大语言模型的低秩自适应微调》

code:https://github.com/microsoft/LoRA

LoRA是一种轻量化且效果非常突出的大模型微调方法,与使用Adam微调的GPT-3 175B相比,LoRA可以将可训练参数的数量减少10000倍,并将GPU内存需求减少3倍。LoRA 是一种高效微调方法,它只需要训练低秩矩阵即可,而不需要直接微调 W 0 W_0 W0,示意图:

        

任何一个矩阵都可以写成两个矩阵相乘的形式,因此 △ W = B ∗ A \triangle W=B*A W=BA。定义 W 0 ∈ R d ∗ k W_0 \in R^{d*k} W0Rdk △ W ∈ R d ∗ k \triangle W \in R^{d*k} WRdk B ∈ R d ∗ r B \in R^{d*r} BRdr A ∈ R r ∗ k A \in R^{r*k} ARrk,其中 r ≪ m i n ( d , k ) r \ll min(d,k) rmin(d,k),所以相比于 W 0 W_0 W0 △ W \triangle W W,矩阵 A A A B B B 是低秩的,这就是 LoRA 名字的由来。

LoRA 的思路很简单:

  • 微调时不改变预训练模型的参数 W 0 W_0 W0,只是给预训练模型加一个支路(类似于ResNet),先降维再升维。
  • 用随机高斯分布初始化降维矩阵 A A A ,用 0 矩阵初始化升维矩阵 B B B,保证训练的开始支路矩阵是 0 矩阵。
  • 训练的时候固定模型参数 W 0 W_0 W0,只训练矩阵 A A A B B B,得到 △ W = B ∗ A \triangle W=B*A W=BA,微调后模型的参数为 W 1 = W 0 + △ W W_1=W_0+\triangle W W1=W0+W

对于模型输入 x x x,微调后的输出 h h h h = W 0 x + △ W x = W 0 x + B A x h=W_0 x+\triangle W x=W_0 x+BA x h=W0x+Wx=W0x+BAx

LoRA 与 Transformer 的结合也很简单,仅在 QKV Attention 的计算中增加一个旁路。

实验结果显示,对于一般的任务, r = 1 , 2 , 4 , 8 r=1,2,4,8 r=1,2,4,8 就足够了(Low-Rank)。而一些领域差距比较大的任务可能需要更大的 r r r。同时,增加 r r r 值变大并不能提升微调的效果,这可能是因为参数量增加需要更多的语料。

考虑 OpenAI 对 GPT 模型的认知,GPT 的本质是对训练数据的有效压缩,从而发现数据内部的逻辑与联系,LoRA 的思想与之有相通之处,原模型虽大,但起核心作用的参数是低秩的,通过增加旁路,达到四两拨千斤的效果。

参考资料:

3. QLoRA

paper:QLoRA: Efficient Finetuning of Quantized LLMs《量化LLM的有效微调》

code:https://github.com/artidoro/qlora

背景:尽管 LoRA 已经轻量化了,但由于使用 BF16 进行训练,微调特别大的模型(65B以上)时无法使用单张卡或几张卡进行训练。

QLORA是 LoRA 的改进版,可以减少内存使用,可以在单个48GB GPU上微调 65B 的大模型,同时保留完整的16位微调任务性能。其工作原理是首先将 LLM 进行4位量化,从而显著减少模型的内存占用;然后使用 LoRA 对量化的LLM进行微调。

使用 QLoRA可以节省 33% 的GPU内存。然而,由于 QLoRA 中预训练模型权重的额外量化和去量化,训练时间增加了39%。

QLoRA代码介绍:QLoRA:量化LLM的高效微调策略与实践

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ctrl A_ctrl C_ctrl V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值