Lora理解&QLoRA

Parameter-Efficient Fine-Tuning (PEFT) :节约开销的做法,fine-tune少量参数,而不是整个模型;

Low-Rank Adaptation (LoRA) :是PEFT的一种;冻结原参数矩阵,只更新2个小参数矩阵。

原文经过对比实验,得出结论,在4个attention矩阵上都用LoRA,效果最好。

过参数化:

现在深度学习的参数动不动就有几百万,LLM的参数更是数十亿起步。许多工作[2]已经表明,深度学习的矩阵往往是过参数化的(over-parametrized)。特征的内在维度(intrinsic dimension)指的是在深度学习中的真实或潜在的低维结构或信息的维度。它表示特征中存在的有效信息的维度,与特征的实际维度可能不同。事实上许多问题的内在维度比人们认为的要小的多,而对于某个数据集,内在维度在不同参数量级的模型上差距并不大。这个内在维度指的是我们解决这个问题实际上需要的参数空间的维度,我们对模型的微调通常调整的也是这些低秩的内在维度。这个结论说明了两个现象:

  1. 一旦我们找到了足够解决问题的参数空间,再增加这个参数空间的大小并不会显著提升模型的性能。
  2. 一个过参数的模型的参数空间是有压缩的空间的,这也就是LoRA的提出动机

在初始化时, A 使用高斯初始化, 使用的零矩阵 进行的初始化。因为 r通常是一个非常小的值(实验证明1,2,4,8的效果就非常好),所以LoRA在训练时引入的参数量是非常小的,因此它的训练也是非常高效的,也不会带来显著的显存增加。

LoRA要求 A 或者 B其中之一必须使用零矩阵进行初始化,这样当数据第一次通过网络时,它和预训练的结果是一致的,这样便保证了模型在初始阶段便有一个不错的效果。

我们先思考两个问题:为何用数千的样本就能将一个数十亿参数的模型微调得比较好?为何大模型表现出很好的few-shot能力?
Aghajanyan的研究表明:预训练模型拥有极小的内在维度(instrisic dimension),即存在一个极低维度的参数,微调它和在全参数空间中微调能起到相同的效果
同时Aghajanyan发现在预训练后,越大的模型有越小的内在维度,这也解释了为何大模型都拥有很好的few-shot能力。

分析:

https://zhuanlan.zhihu.com/p/702629428

计算量并没有减少;

训练数据需求量减少,收敛加快:因为需要更新的参数量减少了很多;

显存量减少:原始训练,大约存储4*W的量(W+Gradient+α+β);用了LoRA,因为不更新原始大W了,后三者省掉,变成了1*W的量。

如上图,70B模型,Full&FP16时,是600GB显存,约等于70B*4*2Bytes=560GB;(Activation还得保存);LoRA时,是160GB,约等于70B*2Bytes=140GB;

代码的视频讲解:lora源码解读_哔哩哔哩_bilibili

初始化:

"self.weight.requires_grad = False": 冻结原始W大矩阵,不参与参数更新;

对应参数:

attention里的W,FFN里的W,在Lora训练里,都是被冻结的!)

综上,计算量并没有减少!

QLoRA:

(11 封私信 / 80 条消息) QLoRA - 搜索结果 - 知乎

非均匀量化

参考资源链接:[LLama3.1模型微调实战:全参、Lora与QLora技术深度应用](https://wenku.youkuaiyun.com/doc/166o7jimn8?utm_source=wenku_answer2doc_content) 针对LLama3.1模型进行NLP任务微调时,合理选择和应用全参微调、LoRA微调与QLoRA微调策略至关重要。全参微调虽然能最大化模型的性能,但同时带来了较高的计算成本和过拟合风险;LoRA和QLoRA微调则在保持性能的同时,大幅减少了模型训练的计算负担和内存消耗,是资源受限时的理想选择。在实际应用中,可以根据任务需求和可用资源制定以下微调策略: 1. 数据准备:确保收集的数据集与目标任务密切相关,进行必要的预处理如分词、去噪、标准化等,为微调做准备。 2. 预训练模型选择:确定以LLama3.1为预训练模型基础,因为它具备强大的语言理解和生成能力。 3. 微调策略确定: - 全参微调:适用于资源充足且对模型性能有极高要求的任务。在微调开始前,需要准备好足够的计算资源和数据,防止过拟合。 - LoRA微调:适用于资源有限但要求较高性能的场景。在微调时,对模型的特定部分应用低秩近似,保留大部分参数不变,只调整低秩参数。 - QLoRA微调:适合于需要极致优化资源消耗的场合。在LoRA的基础上引入量化技术,进一步减少模型参数,提高微调效率。 4. 微调实施:根据选定的策略,使用适当的微调框架和工具,如Transformers库,执行微调过程。合理设置超参数和优化器,并监控训练过程中的性能指标。 5. 模型评估与优化:使用独立的验证集对微调后的模型进行评估,分析模型在各项性能指标上的表现。根据评估结果调整微调策略,进行进一步的优化。 6. 部署应用:将优化后的模型部署到实际应用中,进行推理测试,确保模型在真实环境下的稳定性和可靠性。 通过以上步骤,可以有效地结合全参微调、LoRA微调和QLoRA微调,以平衡模型性能和训练/推理效率。具体实施中,需要根据具体任务的复杂度和资源限制,灵活调整微调策略和参数。对于想要深入了解并实践这些技术的读者,强烈建议参考《LLama3.1模型微调实战:全参、Lora与QLora技术深度应用》这本书。该书提供了丰富的项目源码和详细的流程教程,可以帮助读者在实际项目中有效地运用微调技术,解决具体问题。 参考资源链接:[LLama3.1模型微调实战:全参、Lora与QLora技术深度应用](https://wenku.youkuaiyun.com/doc/166o7jimn8?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值