前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何从头开始编写LoRA代码,这有一份教程(无广)

如何从头开始编写LoRA代码,这有一份教程(无广)

作者头像
ShuYini
发布于 2024-03-25 06:01:35
发布于 2024-03-25 06:01:35
6880
举报

在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。

LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大语言模型)的流行技术,最初由来自微软的研究人员在论文《 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 》中提出。不同于其他技术,LoRA 不是调整神经网络的所有参数,而是专注于更新一小部分低秩矩阵,从而大大减少了训练模型所需的计算量。

由于 LoRA 的微调质量与全模型微调相当,很多人将这种方法称之为微调神器。自发布以来,相信很多人都对这项技术感到好奇,想要从头开始编写代码从而更好的理解该研究。以前苦于没有合适的文档说明,现在,教程来了。

这篇教程的作者是知名机器学习与 AI 研究者 Sebastian Raschka,他表示在各种有效的 LLM 微调方法中,LoRA 仍然是自己的首选。为此,Sebastian 专门写了一篇博客《Code LoRA From Scratch》,从头开始构建 LoRA,在他看来,这是一种很好的学习方法。

简单来说,本文通过从头编写代码的方式来介绍低秩自适应(LoRA),实验中 Sebastian 对 DistilBERT 模型进行了微调,并用于分类任务。

LoRA 与传统微调方法的对比结果显示,使用 LoRA 方法在测试准确率上达到了 92.39%,这与仅微调模型最后几层相比(86.22% 的测试准确率)显示了更好的性能。

Sebastian 是如何实现的,我们接着往下看。

从头开始编写 LoRA

用代码的方式表述一个 LoRA 层是这样的:

其中,in_dim 是想要使用 LoRA 修改的层的输入维度,与此对应的 out_dim 是层的输出维度。代码中还添加了一个超参数即缩放因子 alpha,alpha 值越高意味着对模型行为的调整越大,值越低则相反。此外,本文使用随机分布中的较小值来初始化矩阵 A,并用零初始化矩阵 B。

值得一提的是,LoRA 发挥作用的地方通常是神经网络的线性(前馈)层。举例来说,对于一个简单的 PyTorch 模型或具有两个线性层的模块(例如,这可能是 Transformer 块的前馈模块),其前馈(forward)方法可以表述为:

在使用 LoRA 时,通常会将 LoRA 更新添加到这些线性层的输出中,又得到代码如下:

如果你想通过修改现有 PyTorch 模型来实现 LoRA ,一种简单方法是将每个线性层替换为 LinearWithLoRA 层:

以上这些概念总结如下图所示:

为了应用 LoRA,本文将神经网络中现有的线性层替换为结合了原始线性层和 LoRALayer 的 LinearWithLoRA 层。

如何上手使用 LoRA 进行微调

LoRA 可用于 GPT 或图像生成等模型。为了简单说明,本文采用一个用于文本分类的小型 BERT(DistilBERT) 模型来说明。

由于本文只训练新的 LoRA 权重,因而需要将所有可训练参数的 requires_grad 设置为 False 来冻结所有模型参数:

接下来,使用 print (model) 检查一下模型的结构:

由输出可知,该模型由 6 个 transformer 层组成,其中包含线性层:

此外,该模型有两个线性输出层:

通过定义以下赋值函数和循环,可以选择性地为这些线性层启用 LoRA:

使用 print (model) 再次检查模型,以检查其更新的结构:

正如上面看到的,线性层已成功地被 LinearWithLoRA 层取代。

如果使用上面显示的默认超参数来训练模型,则会在 IMDb 电影评论分类数据集上产生以下性能:

  • 训练准确率:92.15%
  • 验证准确率:89.98%
  • 测试准确率:89.44%

在下一节中,本文将这些 LoRA 微调结果与传统微调结果进行了比较。

与传统微调方法的比较

在上一节中,LoRA 在默认设置下获得了 89.44% 的测试准确率,这与传统的微调方法相比如何?

为了进行比较,本文又进行了一项实验,以训练 DistilBERT 模型为例,但在训练期间仅更新最后 2 层。研究者通过冻结所有模型权重,然后解冻两个线性输出层来实现这一点:

只训练最后两层得到的分类性能如下:

  • 训练准确率:86.68%
  • 验证准确率:87.26%
  • 测试准确率:86.22%

结果显示,LoRA 的表现优于传统微调最后两层的方法,但它使用的参数却少了 4 倍。微调所有层需要更新的参数比 LoRA 设置多 450 倍,但测试准确率只提高了 2%。

优化 LoRA 配置

前面讲到的结果都是 LoRA 在默认设置下进行的,超参数如下:

假如用户想要尝试不同的超参数配置,可以使用如下命令:

不过,最佳超参数配置如下:

在这种配置下,得到结果:

  • 验证准确率:92.96%
  • 测试准确率:92.39%

值得注意的是,即使 LoRA 设置中只有一小部分可训练参数(500k VS 66M),但准确率还是略高于通过完全微调获得的准确率。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AINLPer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LoRA及其变体概述:LoRA, DoRA, AdaLoRA, Delta-LoRA
LoRA可以说是针对特定任务高效训练大型语言模型的重大突破。它被广泛应用于许多应用中。在本文中,我们将解释LoRA本身的基本概念,然后介绍一些以不同的方式改进LoRA的功能的变体,包括LoRA+、VeRA、LoRA- fa、LoRA-drop、AdaLoRA、DoRA和Delta-LoRA。
deephub
2024/03/20
4.2K0
LoRA及其变体概述:LoRA, DoRA, AdaLoRA, Delta-LoRA
白话科普 | 看完即可上手DeepSeek训练,构建专属大模型,LoRA技术让你轻松训练行业大模型
微调(Fine-tuning)是AI领域的“秘密武器”,它让普通人也能轻松打造专属的大语言模型。本文深入解析微调的核心原理,结合实际代码案例,手把手教你如何用LoRA(Low-Rank Adaptation)高效微调大模型。从数据准备到参数配置,再到模型训练与评估,每一步都详细拆解。无论你是技术小白还是资深开发者,都能从中找到启发。
AI研思录
2025/02/20
1.1K0
白话科普 | 看完即可上手DeepSeek训练,构建专属大模型,LoRA技术让你轻松训练行业大模型
大模型实战:使用 LoRA(低阶适应)微调 LLM
[1] 详细内容请参阅 MarkAI Blog [2] 更多资料及工程项目请关注 MarkAI Github [3] 通关感知算法面试请Star 2024年千道算法面试题综述
码科智能
2023/12/19
6.1K2
大模型实战:使用 LoRA(低阶适应)微调 LLM
什么是Lora
LoRA (Low-Rank Adaptation) 是一种用于优化深度学习模型的技术,特别是在处理大规模预训练模型时。本文将详细介绍LoRA的原理、应用场景、优点以及如何在实际项目中使用LoRA进行模型微调。
IT蜗壳-Tango
2024/08/10
2K0
从头开始实现LoRA以及一些实用技巧
LoRA是Low-Rank Adaptation或Low-Rank Adaptors的缩写,它提供了一种用于对预先存在的语言模型进行微调的高效且轻量级的方法。
deephub
2023/12/19
1.6K0
从头开始实现LoRA以及一些实用技巧
人工智能大语言模型微调技术:SFT 监督微调、LoRA 微调方法、P-tuning v2 微调方法、Freeze 监督微调方法
SFT(Supervised Fine-Tuning)监督微调是指在源数据集上预训练一个神经网络模型,即源模型。然后创建一个新的神经网络模型,即目标模型。目标模型复制了源模型上除了输出层外的所有模型设计及其参数。这些模型参数包含了源数据集上学习到的知识,且这些知识同样适用于目标数据集。源模型的输出层与源数据集的标签紧密相关,因此在目标模型中不予采用。微调时,为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。在目标数据集上训练目标模型时,将从头训练到输出层,其余层的参数都基于源模型的参数微调得到。
汀丶人工智能
2023/10/11
8.9K0
人工智能大语言模型微调技术:SFT 监督微调、LoRA 微调方法、P-tuning v2 微调方法、Freeze 监督微调方法
405B大模型也能线性化!斯坦福MIT最新研究,0.2%训练量让线性注意力提分20+
一套方法,即可线性化现有各种量级的Transformer模型,上至Llama 3.1 405B,也只需要十来张显卡在两天内搞定!
新智元
2025/02/14
550
405B大模型也能线性化!斯坦福MIT最新研究,0.2%训练量让线性注意力提分20+
​中科大 & 腾讯微信 & 新加坡国立大学 & 复旦等 将视觉特征与 LLM 的参数空间对齐,LoRA 再升级, 效率更上一层!
大型语言模型(LLM)在大多数自然语言任务上取得了令人鼓舞的性能,并在解决现实世界问题中展现出了强大的泛化能力。从LLM派生出的多模态大型语言模型(MLLM)通过感知现实世界的视觉信息,向人工通用智能(AGI)迈出了一步。因此,感知视觉信息的方式是从LLM向MLLM转变的关键。
AIGC 先锋科技
2024/07/08
3320
​中科大 & 腾讯微信 & 新加坡国立大学 & 复旦等 将视觉特征与 LLM 的参数空间对齐,LoRA 再升级, 效率更上一层!
大模型微调方法总结
paper:LoRA: Low-Rank Adaptation of Large Language Models(https://arxiv.org/pdf/2106.09685.pdf)
腾讯技术工程官方号
2023/07/26
2.5K0
大模型微调方法总结
斯坦福提出 ExPLoRA 高效扩展预训练 Transformer 在无监督领域的突破 !
预训练基础模型[1]用于自然语言和自然图像在历史上一直是计算密集型的,通常仅限于拥有大量资源的组织。然而,近期参数高效微调(PEFT)技术的进步,包括低秩适应(LoRA)等,激发了极大的兴趣。这些方法旨在基于这样的假设:对预训练模型的必要权重更新具有“低内在秩”,或者通过利用矩阵结构可以实现有效更新,使用模型可训练权重的很小一部分(0.1%-10%)将基础模型适应于下游监督学习任务。
AIGC 先锋科技
2024/07/31
2080
斯坦福提出 ExPLoRA 高效扩展预训练 Transformer 在无监督领域的突破 !
一文搞懂!如何高效微调你的 LLM
当前以 ChatGPT 为代表的预训练语言模型(PLM)规模变得越来越大,在消费级硬件上进行全量微调(Full Fine-Tuning)变得不可行。此外,为每个下游任务单独存储和部署微调模型变得非常昂贵,因为微调模型与原始预训练模型的大小相同。
NewBeeNLP
2023/08/29
2.4K0
一文搞懂!如何高效微调你的 LLM
6种大模型微调技术
由于LLM参数量都是在亿级以上,少则数十亿,多则数千亿。当我们想在用特定领域的数据微调模型时,如果想要full-tuning所有模型参数,看着是不太实际,一来需要相当多的硬件设备(GPU),二来需要相当长的训练时间。
皮大大
2025/05/07
3930
LoRA 笔记 - plus studio
自然语言处理的一个重要范式包括对一般领域数据的大规模预训练和对特定任务或领域的适应。当我们预训练更大的模型时,重新训练所有模型参数的完整微调变得不那么可行。LoRA[1]冻结预训练模型权重并将可训练的秩分解矩阵注入到 Transformer 架构的每一层中,大大减少了下游任务的可训练参数的数量。与用 Adam 微调的 GPT-3 175B 相比,LoRA 可以将可训练参数的数量减少了 10,000 倍,GPU 内存需求减少了 3 倍。
plus sign
2024/02/28
2530
LoRA 笔记 - plus studio
解读LoRA
大模型调优(finetuning)不仅仅是参数的优化,同样会受到非功能性约束的挑战,例如:
半吊子全栈工匠
2023/12/20
1.1K0
解读LoRA
人工智能大语言模型微调技术:SFT 监督微调、LoRA 微调方法、P-tuning v2 微调方法、Freeze 监督微调方法
SFT(Supervised Fine-Tuning)监督微调是指在源数据集上预训练一个神经网络模型,即源模型。然后创建一个新的神经网络模型,即目标模型。目标模型复制了源模型上除了输出层外的所有模型设计及其参数。这些模型参数包含了源数据集上学习到的知识,且这些知识同样适用于目标数据集。源模型的输出层与源数据集的标签紧密相关,因此在目标模型中不予采用。微调时,为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。在目标数据集上训练目标模型时,将从头训练到输出层,其余层的参数都基于源模型的参数微调得到。
汀丶人工智能
2023/07/16
17.9K0
人工智能大语言模型微调技术:SFT 监督微调、LoRA 微调方法、P-tuning v2 微调方法、Freeze 监督微调方法
每日论文速递 | GaLore: 使用梯度低秩映射进行大模型 Memory-Efficient 全参训练
摘要:训练大型语言模型(LLMs)面临着显著的内存挑战,主要是由于权重和优化器状态的不断增大。常见的内存降低方法,如低秩适应(LoRA),在每一层中向冻结的预训练权重添加一个可训练的低秩矩阵,从而减少可训练参数和优化器状态。然而,这些方法通常在预训练和微调阶段的性能上都不如使用全秩权重训练,因为它们将参数搜索限制在低秩子空间中,改变了训练动态,并且可能需要全秩热启动。在这项工作中,我们提出了Gradient Low-Rank Projection(GaLore),一种允许全参数学习但比LoRA等常见低秩适应方法更节省内存的训练策略。我们的方法在优化器状态的内存使用上最多减少了65.5%,同时在使用C4数据集进行LLaMA 1B和7B架构的预训练以及在GLUE任务上对RoBERTa进行微调时,保持了效率和性能。我们的8位GaLore相较于BF16基准,将优化器内存进一步降低了82.5%,总训练内存降低了63.3%。值得注意的是,我们首次证明了在具有24GB内存的消费级GPU上(例如NVIDIA RTX 4090)进行7B模型的预训练是可行的,而无需模型并行、检查点策略或卸载策略。
zenRRan
2024/03/14
5980
每日论文速递 | GaLore: 使用梯度低秩映射进行大模型 Memory-Efficient 全参训练
每日论文速递 | AutoLoRA:通过meta learning学习LoRA最优秩
摘要:在各种 NLP 任务中,大规模预训练和针对特定任务的微调取得了巨大成功。由于对大型预训练模型的所有参数进行微调会带来巨大的计算和内存挑战,人们开发出了几种高效的微调方法。其中,低秩适应(Low-rank adaptation,LoRA)在冻结的预训练权重基础上对低秩增量更新矩阵进行微调,已被证明特别有效。然而,LoRA 在所有层中统一分配秩,并依赖穷举搜索来找到最佳秩,这导致了高计算成本和次优的微调性能。为了解决这些局限性,我们引入了 AutoLoRA,这是一种基于元学习的框架,用于自动识别每个 LoRA 层的最佳等级。AutoLoRA 将低秩更新矩阵中的每个秩-1 矩阵与一个选择变量相关联,该选择变量决定是否应丢弃秩-1 矩阵。我们开发了一种基于元学习的方法来学习这些选择变量。通过对这些变量的值进行阈值化处理,确定最佳秩。我们在自然语言理解、生成和序列标注方面的综合实验证明了 AutoLoRA 的有效性。
zenRRan
2024/03/25
4860
每日论文速递 | AutoLoRA:通过meta learning学习LoRA最优秩
大模型Prompt-Tuning技术进阶
近两年来,随之Prompt-Tuning技术的发展,有诸多工作发现,对于超过10亿参数量的模型来说,Prompt-Tuning所带来的增益远远高于标准的Fine-tuning,小样本甚至是零样本的性能也能够极大地被激发出来,得益于这些模型的 参数量足够大 ,训练过程中使用了 足够多的语料 ,同时设计的 预训练任务足够有效 。最为经典的大规模语言模型则是2020年提出的GPT-3,其拥有大约1750亿的参数,且发现只需要设计合适的模板或指令即可以 实现免参数训练的零样本学习 。
@小森
2024/06/06
4450
大模型Prompt-Tuning技术进阶
调教LLaMA类模型没那么难,LoRA将模型微调缩减到几小时
选自Lightning AI 作者:Sebastian Raschka 机器之心编译 编辑:赵阳 LoRA 微调方法,随着大模型的出现而走红。 最近几个月,ChatGPT 等一系列大语言模型(LLM)相继出现,随之而来的是算力紧缺日益严重。虽然人人都想打造专属于自己的大模型,但是能负担得起上亿参数模型训练的机构却寥寥无几。 在快速发展的人工智能领域,以高效和有效的方式使用大型语言模型正变得越来越重要。 LoRA(Low-Rank Adaption,低秩自适应) 作为微调 LLMs 一种比较出圈的技术,其额外
机器之心
2023/05/31
1.8K0
调教LLaMA类模型没那么难,LoRA将模型微调缩减到几小时
上交大 LoRA再进化 | 高效微调框架FLoRA,专为各种维度参数空间设计,保持高维参数空间结构完整性 !
近期基础模型Brown等人(2020年);Kirillov等人(2023年);Devlin等人(2018年);Liu等人(2019年)的引入,在人工智能的多个领域展示了无与伦比的性能和潜力。传统上,为下游任务适配预训练模型是通过完全微调所有参数Ma等人(2024年);Raffel等人(2020年);Qiu等人(2020年)。然而,随着这些基础模型参数数量的增加,传统的完全微调方法在各个方面都变得过于昂贵。
AIGC 先锋科技
2024/07/08
6190
上交大 LoRA再进化 | 高效微调框架FLoRA,专为各种维度参数空间设计,保持高维参数空间结构完整性 !
推荐阅读
LoRA及其变体概述:LoRA, DoRA, AdaLoRA, Delta-LoRA
4.2K0
白话科普 | 看完即可上手DeepSeek训练,构建专属大模型,LoRA技术让你轻松训练行业大模型
1.1K0
大模型实战:使用 LoRA(低阶适应)微调 LLM
6.1K2
什么是Lora
2K0
从头开始实现LoRA以及一些实用技巧
1.6K0
人工智能大语言模型微调技术:SFT 监督微调、LoRA 微调方法、P-tuning v2 微调方法、Freeze 监督微调方法
8.9K0
405B大模型也能线性化!斯坦福MIT最新研究,0.2%训练量让线性注意力提分20+
550
​中科大 & 腾讯微信 & 新加坡国立大学 & 复旦等 将视觉特征与 LLM 的参数空间对齐,LoRA 再升级, 效率更上一层!
3320
大模型微调方法总结
2.5K0
斯坦福提出 ExPLoRA 高效扩展预训练 Transformer 在无监督领域的突破 !
2080
一文搞懂!如何高效微调你的 LLM
2.4K0
6种大模型微调技术
3930
LoRA 笔记 - plus studio
2530
解读LoRA
1.1K0
人工智能大语言模型微调技术:SFT 监督微调、LoRA 微调方法、P-tuning v2 微调方法、Freeze 监督微调方法
17.9K0
每日论文速递 | GaLore: 使用梯度低秩映射进行大模型 Memory-Efficient 全参训练
5980
每日论文速递 | AutoLoRA:通过meta learning学习LoRA最优秩
4860
大模型Prompt-Tuning技术进阶
4450
调教LLaMA类模型没那么难,LoRA将模型微调缩减到几小时
1.8K0
上交大 LoRA再进化 | 高效微调框架FLoRA,专为各种维度参数空间设计,保持高维参数空间结构完整性 !
6190
相关推荐
LoRA及其变体概述:LoRA, DoRA, AdaLoRA, Delta-LoRA
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档