LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果

这篇具有很好参考价值的文章主要介绍了LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果,技术文章,自然语言处理

论文链接: https://arxiv.org/abs/2307.05695
代码仓库: https://github.com/guitaricet/peft_pretraining

一段时间以来,大模型(LLMs)社区的研究人员开始关注于如何降低训练、微调和推理LLMs所需要的庞大算力,这对于继续推动LLMs在更多的垂直领域中发展和落地具有非常重要的意义。目前这一方向也有很多先驱工作,例如从模型结构上创新的RWKV,直接替换计算量较大的Transformer架构,改用基于RNN范式的新架构。还有一些方法从模型微调阶段入手,例如在原有LLMs中加入参数量较小的Adapter模块来进行微调。还有微软提出的低秩自适应(Low-Rank Adaptation,LoRA)方法,LoRA假设模型在任务适配过程中对模型权重的更新量可以使用低秩矩阵进行估计,因而可以用来间接优化新加入的轻量级适应模块,同时保持原有的预训练权重不变。目前LoRA已经成为大模型工程师必备的一项微调技能,但本文作者仍然不满足于目前LoRA所能达到的微调效果,并进一步提出了一种可叠加的低秩微调方法,称为ReLoRA

本文来自马萨诸塞大学洛厄尔分校的研究团队,作者团队将ReLoRA应用在具有高达350M参数的Transformer上时,展现出了与常规神经网络训练相当的性能。此外,本文作者还观察到ReLoRA的微调效率会随着模型参数规模的增加而不断提高,这使得其未来有可能成为训练超大规模(通常超过1B参数)LLMs的新型手段。

01. 引言

虽然目前学术界和工业界都在不断推出自家的各种基座模型,但不可否认的是,完全预训练一个具有初等推理能力的LLMs仍然需要非常庞大的算力,例如大家熟知的LLaMA-6B模型[1]就需要数百个GPU才能完成训练,这种规模的算力已经让绝大多数学术研究小组望而却步了。在这种背景下,参数高效微调(PEFT)已经成为了一个非常具有前景的LLMs研究方向。具体来说,PEFT方法可以在消费级GPU(例如RTX 3090或4090)上对十亿级语言或扩散模型进行微调。因此本文重点关注PEFT中的低秩训练技术,尤其是LoRA方法。作者思考到,过去十年中深度学习发展阶段中的一个核心原则就是不断的“堆叠更多层(stack more layers)”,例如ResNet的提出可以使我们将卷积神经网络的深度提升到100层以上,并且也获得了非常好的效果。因此本文探索能否同样以堆叠的方式来提升低秩适应的训练效率呢?

LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果,技术文章,自然语言处理

本文提出了一种基于低秩更新的ReLoRA方法,来训练和微调高秩网络,其性能优于具有相同可训练参数数量的网络,甚至能够达到与训练100M+规模的完整网络类似的性能,对比效果如上图所示。具体来说,ReLoRA方法包含(1)初始化全秩训练、(2)LoRA 训练、(3)参数重新启动、(4)锯齿状学习率调度(jagged learning rate schedule)和(5)优化器参数部分重置。作者选择目前非常火热的自回归语言模型进行实验,并且保证每个实验所使用的GPU计算时间不超过8天

02. 本文方法

LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果,技术文章,自然语言处理

LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果,技术文章,自然语言处理

ReLoRA通过序列叠加的方式仅训练一小组参数就可以实现与全秩训练相当的性能,并且遵循LoRA方法的基础原则,即保持原始网络的冻结权重并添加新的可训练参数。乍一看,这种方式可能显得计算效率低下,但我们需要清楚的是,这种方法可以通过减小梯度和优化器状态的大小,来显著提高显存效率。例如Adam优化器状态消耗的显存通常是模型权重占用的两倍。通过大幅减少可训练参数的数量,ReLoRA可以在相同的显存条件下使用更大的batchsize大小,从而最大限度地提高硬件效率,ReLoRA的整体操作细节如下图所示。

LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果,技术文章,自然语言处理

03. 实验效果

为了清晰的评估ReLoRA方法的性能,作者将其应用在各种规模大小(60M、130M、250M 和 350M)的Transformer模型上,并且都在C4数据集上进行训练和测试。为了展现ReLoRA方法的普适性,作者重点考察NLP领域的基础语言建模任务。模型架构和训练超参数设置基本与LLaMA模型保持一致。与LLaMA不同的是,作者在实验中将原始的注意力机制(使用float32进行 softmax计算)替换为了Flash注意力[2],并且使用bfloat16精度进行计算,这样操作可以将训练吞吐量提高50-100%,且没有任何训练稳定性问题。此外,使用ReLoRA方法训练的模型参数规模相比LLaMA要小得多,最大的模型参数才仅有350M,使用8个RTX4090上训练了一天时间就可以完成。

下图展示了本文方法与其他方法的性能对比效果,可以看到ReLoRA显着优于低秩LoRA方法,证明了我们提出的修改的有效性。此外,ReLoRA还实现了与满秩训练(Full training)相当的性能,并且我们可以观察到,随着网络规模的增加,性能差距逐渐缩小。有趣的是,ReLoRA 唯一无法超过的基线模型是仅具有60M参数的最小模型。这一观察结果表明,ReLoRA在改进大型网络的训练方面更加有效,这与作者最开始研究探索一种改进大型网络训练方法的目标是一致的。

LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果,技术文章,自然语言处理

LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果,技术文章,自然语言处理

LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果,技术文章,自然语言处理

04. 总结

本文是一篇专注于减轻大型Transformer语言模型训练代价的工作,作者选取了一条非常具有前景的方向,即低秩训练技术,并且从最朴素的低秩矩阵分解 (LoRA) 方法出发,利用多个叠加的低秩更新矩阵来训练高秩网络,为了实现这一点,作者精心设计了包含参数重新启动、锯齿状学习率调度算法和优化器参数重置等一系列操作,这些操作共同提高了ReLoRA算法的训练效率,在某些情况下甚至能够达到与全秩训练相当的性能,尤其实在超大规模的Transformer网络中。作者通过大量的实验证明了ReLoRA的算法可行性和操作有效性,不知ReLoRA是否也会成为大模型工程师一项必备的算法技能呢?

参考

[1] H. Touvron, T. Lavril, G. Izacard, X. Martinet, M.-A. Lachaux, T. Lacroix, B. Rozière, N. Goyal, E. Hambro, F. Azhar, A. Rodriguez, A. Joulin, E. Grave, and G. Lample. Llama: Open and efficient foundation language models. arXiv preprint arXiv:2302.13971, 2023.

[2] T. Dao, D. Y. Fu, S. Ermon, A. Rudra, and C. Re. Flashattention: Fast and memory-efficient exact attention with IO-awareness. In A. H. Oh, A. Agarwal, D. Belgrave, and K. Cho, editors, Advances in Neural
Information Processing Systems, 2022.


  关于TechBeat人工智能社区

TechBeat(www.techbeat.net)隶属于将门创投,是一个荟聚全球华人AI精英的成长社区。

我们希望为AI人才打造更专业的服务和体验,加速并陪伴其学习成长。

期待这里可以成为你学习AI前沿知识的高地,分享自己最新工作的沃土,在AI进阶之路上的升级打怪的根据地!

更多详细介绍>>TechBeat,一个荟聚全球华人AI精英的学习成长社区文章来源地址https://www.toymoban.com/news/detail-677587.html

到了这里,关于LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序 background多个background背景图叠加以及连写注意事项

    background: url(\\\'https://xxxxxxxx.com\\\') no-repeat top/100% auto,linear-gradient(318deg, #3F0000 0%, #A9143A 100%); 效果: 坑点: 1:多个背景图叠加时(渐变也相当于图片)以逗号分割,越靠前图片叠加时层级越高。网上搜索时发现找到的都是说越靠后层级越高,但我测试的时候确实是越靠前越高。

    2024年02月15日
    浏览(58)
  • uniapp小程序通过canvas给图片叠加自定义文字

    功能背景 之前文章uniapp小程序开发自定义相机、拍照、上传提到的前端给图片叠加文字水印的操作。比如想要一张照片上,叠加上自定义的文字。 效果图 保存到本地 放大看看 功能说明 借助于uniapp的API: 第一步 uni.getImageInfo 或者 uni.downloadFile ,把在线图片加载出来,拿到临

    2024年02月13日
    浏览(45)
  • 【peft】huggingface大模型加载多个LoRA并随时切换

    参考Multi Adapter support 要求 peft=0.3.0 在加载第一个适配器时,可以通过 PeftModel.from_pretrained 方法并指定 adapter_name 参数来给它命名。否则,将使用默认的适配器名称 default 。 要加载另一个适配器,请使用 PeftModel 的 load_adapter() 方法,例如: model.load_adapter(peft_model_path, adapter_na

    2024年02月10日
    浏览(42)
  • 通过位运算打多个标记

    如何在一个字段上,记录多个标记? 如何在一个字段上,记录不同类型的多个标记? 如何用较少的字段,记录多个标记? 如何在不增加字段的要求下,记录新增的标记? 在实际的开发中,经常有这样的需求,需要用尽可能少的字段,记录多个标记? 比如交易中一个订单,

    2024年02月10日
    浏览(38)
  • 通过环境变量实现多个JDK切换

    前文:          由于jdk版本需要升级为jdk17,因为jdk8比较常用且稳定,本人又不想卸载掉安装的jdk8,在经过查找资料后找到了可以通过修改环境变量在本地任意切换jdk版本 环境变量配置         网上教程一堆,直接跳过了,这里主要说明怎么通过配置环境变量切换 电脑-属性-高级

    2024年02月05日
    浏览(47)
  • mysql 一对多 合并多个通过 逗号拼接展示

    mysql 一对多 合并多个通过 逗号拼接展示 以上内容由chatgpt中文网 动态生成 laravel model 对应写法

    2024年01月16日
    浏览(40)
  • Vue3:通过路由写多个页面,通过不同的路径可以进入不同的页面

    Vue3:想通过路由写2个页面,不同的路径可以进入不同的页面 1、创建Vue3项目 通过脚手架创建一个Vue3的项目,然后在此基础上对文件进行增删改,修改成自己需要的项目框架 2、views文件夹 对应 页面文件 如果需要写2个页面,则在views文件夹里面创建2个.vue文件 可以在.vue文件

    2024年02月11日
    浏览(44)
  • IDEA通过Services界面管理多个SpringBoot应用

    以前使用老版本IDEA时,如果一个Project下有多个基于SpringBoot的module,本地启动时需要一个个点击Debug或者Run来启动,无法一键启动和停止多个应用。 新版本的IDEA考虑到了这个问题,增加了Services模块界面,可以统一管理所有SpringBoot应用,对于直观查看、批量启动/停止应用非

    2024年02月14日
    浏览(54)
  • Ubuntu下通过.sh文件同时启动多个程序系列2—启动多个终端分别运行不同指令或者程序

    项目上经常遇到需要到开多个终端分别启动不用程序,这里简单介绍一个方法,通过.sh文件,同时启动多个程序 这里创建的文件名为 test.sh chmod 777 test.sh ./test.sh gnome-terminal --tab --title=A.sh – bash -c “ cd /home/aha/Downloads/test1 ./run.sh run.log ;exec bash” 只需要修改加粗部分即可 例如

    2024年02月06日
    浏览(68)
  • 3dmax通过烘焙合并一个模型的多个贴图流程

    合并多个模型也是可以的,文件是自动保存的TGA格式,后期PS可以批处理保存JPEG。 1、3dmax中文件打开模型 2、转为可编辑多边形  3、设置环境光 4、 渲染到纹理(0)    

    2024年02月16日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包