LoRA 微调大模型的实践经验总结
前两天 SEBASTIAN RASCHKA 博士发了一篇博客介绍了使用LoRA微调大模型的一些实践经验,个人觉得有一定参考价值。总结一下分享给大家。 喜欢记得收藏、点赞、关注。
简单介绍下什么是LoRA
在深度学习领域,特别是在大型语言模型(LLM)领域,模型的大小导致更新模型权重的成本非常高。
假设我们有一个含有70亿参数的LLM,这些参数被表示在一个权重矩阵W中。在训练中,为了最小化损失函数,我们会计算一个ΔW矩阵,里面包含了对原始权重的更新信息。
通常的权重更新过程如下:
如果权重矩阵W包含70亿参数,那么权重更新矩阵ΔW也将包含70亿参数,计算ΔW将消耗巨大的计算和内存资源。
为了解决这一问题,Hu等人提出了LoRA方法,该方法通过分解权重变化ΔW到一个低秩表示。更确切地说,LoRA在训练过程中直接学习ΔW的分解表示,从而节省了内存和计算资源。

如上所示,ΔW的分解意味着我们用两个较小的LoRA矩阵A和B来表示大矩阵ΔW。如果A的行数与ΔW相同,B的列数与ΔW相同,我们可以将分解写成ΔW = AB。(AB是矩阵A和B的矩阵乘积结果。)
这样做能节省多少内存呢?这取决于超参数r的秩。例如,如果ΔW有10,000行和20,000列,它存储了2亿参数。如果我们选择的A和B的r=8,那么A有10,000行和8列,B有8行和20,000列,那就是10,000×8 + 8×20,000 = 240,000参数,大约比2亿参数少了830倍。
当然,A和B无法捕捉ΔW所能捕捉的所有信息,因此LoRA其实就是牺牲一定性能来降低计算成本。
主要实验结论
LoRA的一致性:尽管训练模型通常具有随机性,但是多次进行LoRA微调的实验结果在测试集上的效果十分稳定。

QLoRA的计算与内存权衡:QLoRA是一种在微调时进一步降低内存使用的技术,通过将预训练的权重量化为4位精度,并使用分页优化器来处理内存峰值。QLoRA可以节省33%的GPU内存,但增加了39%的训练时间。
-
默认的16位浮点LoRA:
-
训练时间:1.85小时
-
内存使用:21.33GB
-
4位浮点QLoRA:
-
训练时间:2.79小时
-
内存使用:14.18GB

学习率调度器:文章讨论了余弦退火学习率调度器如何调整学习率,模仿余弦曲线逐渐减少学习率以优化收敛并避免过度拟合。实验中引入这种调度器显著改善了SGD性能,但对Adam和AdamW优化器影响较小。

Adam与SGD的比较:在7B参数的Llama 2模型训练中,使用AdamW和LoRA的默认设置(r=8)需要14.18GB的GPU内存,而使用SGD需要14.15GB的内存,节省非常有限。
多次训练epoch:对于50k样本的Alpaca指令微调数据集,增加训练迭代次数后,模型性能出现下降,这表明多轮训练可能不适用于指令微调,因为可能会导致过拟合。

为更多层启用LoRA:实验显示,如果为更多层启用LoRA,虽然内存需求从14.18GB增加到16.62GB,但模型性能有显著提升。

平衡LoRA超参数R和Alpha:文章讨论了LoRA权重的缩放系数,发现虽然一般来说是较好的选择,但在某些情况下,不同的和组合可能会产生更好的性能。

在单GPU上训练7B参数模型:LoRA技术使得在单个GPU上微调7B参数的模型成为可能。使用QLoRA最优设置(r=256和alpha=512)时,训练一个7B参数模型在A100 GPU上需要大约3小时。

常见问题解答
Q1: 数据集有多重要?
答:数据集对实验至关重要。尽管Alpaca数据集受欢迎,且包含50k的数据,但是只有1k数据的LIMA数据集表现出了更好的性能。
Q2: LoRA是否适用于领域适应?
答:LoRA通常用于引导LLM遵循指令,而不是从预训练数据集中吸收知识。在内存有限时,可以用LoRA对特定领域数据集进行进一步的预训练。
Q3: 如何选择最佳的LoRA的参数r?
答:选择LoRA的参数r是个需要实验的超参数,太大可能导致过拟合,太小可能不足以处理数据集中的任务多样性。
Q4: 是否需要在所有层启用LoRA?
答:目前的研究仅限于在query和key权重矩阵启用LoRA以及在所有层启用。未来的实验可以探索其他层组合的影响。
Q5: 如何避免过拟合?
答:减小r或增加数据集大小可以帮助减少过拟合。还可以尝试增加优化器的权重衰减率或LoRA层的dropout值。
Q6: 其他优化器如何?
答:除了Adam和AdamW,其他优化器如Sophia也值得研究,它使用梯度曲率而非方差进行归一化,可能提高训练效率和模型性能。
Q7: 哪些因素会影响内存使用?
答:内存使用受到模型大小、批量大小、LoRA参数数量以及数据集特性的影响。例如,使用较短的训练序列可以节省内存。
Q8: LoRA与完全微调或RLHF比较如何?
答:虽未进行RLHF实验,但全微调需要更多资源,且可能因过拟合或非理想超参数而性能不佳。
Q9: LoRA权重是否可以合并?
答:可以将多套LoRA权重合并。训练中保持LoRA权重独立,并在前向传播时添加,训练后可以合并权重以简化操作。
Q10: 是否可以逐层调整LoRA的最优rank?
答:理论上,可以为不同层选择不同的LoRA rank,类似于为不同层设定不同学习率,但由于增加了调优复杂性,实际中很少执行。
如何学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。
不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!
想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
那么针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

学习路线

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

更多推荐
所有评论(0)