碾压LoRA!Meta CMU | 提出高效大模型微调方法:GaLore,内存可减少63.3%

引言

大模型训练通常会遇到内存资源的限制。目前常用的内存减少方法低秩适应(LoRA),通过引入低秩(low-rank)适配器来更新模型的权重,而不是直接更新整个权重矩阵。然而,这种方法在预训练和微调阶段通常表现不佳,为此,本文作者提出了梯度低秩映射(Gradient Low-Rank Projection ,「GaLore」),这是一种允许**「全参数」**学习的训练策略,并且比 LoRA 等常见的低秩适应方法更节省内存,相比BF16内存减少了63.3%https://arxiv.org/pdf/2403.03507v1.pdf

背景介绍

大型语言模型(LLMs)在对话式人工智能和语言翻译等领域展现出了令人印象深刻的性能。训练这些大模型(LLMs)不仅需要大量的计算资源,而且对内存的需求也非常大。这里的内存需求不仅仅是指数十亿个可训练的参数,还包括它们的梯度和优化器状态,比如Adam中的梯度动量和方差,这些往往比参数本身占用的存储空间还要大。

举个例子,如果我们从头开始训练一个LLaMA 7B模型,即使是用最小的批量大小,也需要至少58GB的内存,其中14GB用于存储可训练的参数,42GB用于存储Adam优化器的状态和权重梯度,还有2GB用于存储激活值。这样的内存需求使得在像NVIDIA RTX 4090这样只有24GB内存的消费级GPU上进行训练变得不太现实。

除了工程和系统方面的努力,比如梯度检查点和内存卸载等技术来实现更快更高效的分布式训练,研究人员还在寻求开发各种优化技术,以减少预训练和微调过程中的内存使用。

高效参数微调(Parameter-efficient fine-tuning,PEFT )技术让我们能够高效的将预训练语言模型(PLMs)适配至不同的下游任务中,从而无需对模型的所有参数进行调整。其中,当前较火的低秩适应(LoRA)技术将权重矩阵重新参数化为,这里的是一个固定的全秩矩阵,而和是待学习的附加低秩适配器。因为秩,所以A和B包含的可训练参数数量较少。

当前LoRA已经被广泛使用,其中是固定的预训练权重。它的变体ReLoRA也用于预训练,通过定期使用之前学到的低秩适配器来更新。然而对于微调来说,有研究表明LoRA并没有显示出与全秩微调相当的性能。对于从头开始的预训练,它被证明需要一个全秩模型训练作为热身,然后才能在低秩子空间中进行优化。这其中可能有两个原因:(1)最优的权重矩阵可能不是低秩的;(2)重新参数化改变了梯度训练的动态。

为了解决上述挑战,本文作者提出了Gradient Low-Rank Projection(GaLore)训练策略,它允许全参数学习,同时比LoRA等常见低秩适应方法更节省内存。

GaLore介绍

GaLore的核心思想是在训练过程中利用梯度的低秩特性,而不是直接对权重矩阵进行低秩近似。具体来说:

在LLMs的训练过程中,权重矩阵W的梯度G()通常具有低秩结构。这意味着梯度矩阵可以通过较小的子空间来近似表示,从而减少内存占用。GaLore通过计算两个投影矩阵和,将梯度矩阵G投影到一个低秩形式。这样的投影操作可以显著降低优化器状态的内存成本,因为P 和 Q 的低频率更新(例如,每 200 次迭代)会产生最小的额外计算成本。

在训练过程中GaLore可以动态的切换低秩子空间,这意味着模型可以在不同的子空间中学习,而不是局限于单一的低秩空间。这种动态切换通过定期更新投影矩阵P和Q来实现,以适应梯度的变化。此外,GaLore在内存使用上进行了优化,例如,它只使用一个投影矩阵P或Q,而不是同时使用两个,这进一步减少了内存需求。

不仅如此GaLore还可以与现有技术结合,例如:「与8位优化器的结合」:GaLore可以与8位优化器(如8位Adam)结合使用,这些优化器已经在内存使用上进行了优化。结合使用GaLore和8位优化器可以在保持性能的同时,进一步降低内存占用。「逐层权重更新」:GaLore还与逐层权重更新技术结合,这种技术在反向传播期间执行权重更新,从而减少了存储整个权重梯度的需要。

「GaLore引入了少量额外的超参数」:除了Adam的原始超参数外,GaLore引入了秩、子空间切换频率和缩放因子α。这些超参数有助于调整GaLore的行为,以适应不同的训练需求。其中在Adam引入GaLore如下所示。

实验结果

如下图,展示了在预训练LLaMA 7B模型时,不同方法的内存消耗。与 BF16 Adam 基线和 8 位 Adam 相比,8 位 GaLore 分别减少了 37.92G (63.3%) 和 24.5G (52.3%) 总内存。如下图,在GLUE基准测试中,GaLore在微调预训练的RoBERTa模型时,与LoRA相比,取得了更好的性能。

如下图,在不同模型大小下,使用不同方法时的内存使用情况。这进一步证实了GaLore在内存效率方面的优势。

大模型岗位需求

大模型时代,企业对人才的需求变了,AIGC相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
在这里插入图片描述

掌握大模型技术你还能拥有更多可能性

• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;

• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;

• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;

• 更优质的项目可以为未来创新创业提供基石。

可能大家都想学习AI大模型技术,也想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把全套AI技术和大模型入门资料、操作变现玩法都打包整理好,希望能够真正帮助到大家。

-END-


👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

消息队列和分布式消息队列

文章目录 分析系统现状不足中间件消息队列什么是消息队列?应用场景消息队列的模型为什么不直接传输,而要用消息队列?为什么要用消息队列?消息队列的缺点? 分布式消息队列分布式消息队列的优势?消息队列应用…

LeetCode55题:跳跃游戏(原创)

【题目描述】 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1&am…

Oracle 19c补丁升级(Windows)

文章目录 一、打补丁前备份检查1、补丁包获取2、备份数据包以及数据库软件3、检查OPatch版本 二、补丁升级1、更新OPatch2、关闭监听以及服务3、补丁升级过程4、启动监听以及服务 三、数据库补丁应用 一、打补丁前备份检查 1、补丁包获取 补丁包: 百度网盘链接&am…

甘特图使用小诀窍,项目把控游刃有余

在项目管理过程中,掌握甘特图的使用技巧可以让你事半功倍,高效规划和监控项目进度。作为一种视觉化的工具,甘特图直观地展示了任务的开始和结束时间、持续时间以及任务之间的依赖关系,有助于预测和优化资源分配。掌握以下几个小诀窍,你就能驾驭甘特图,游刃有余地把控整个项目。…

运营商三要素验证API接口怎么对接

运营商三要素验证API接口又叫手机三要素验证API接口、运营商实名认证接口,这个接口是验证姓名、身份证号、手机号三者是否一致,返回验证结果,如果一致则说明三者信息匹配,可以有效确认当前注册用户的身份信息,那么运营…

山姆·奥特曼是如何成为亿万富豪的?

2017年夏天,Superhuman公司首席执行官拉胡尔沃拉(Rahul Vohra)开始疯狂向投资者一一发消息,缘由是他的初创公司尝试了谷歌浏览器Chrome的一项即将推出的更新。由于一个看似无害的代码更改,Superhuman的智能电子邮件服务…

【环境】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 一、培养项目系统性思维 1.1 系统性思维 1.2 系统性思维的价值 1.3 建模和推演&数字孪生 二、项目的复杂性和如何驾驭复杂性 2.1 复杂性的三个维度 2.2 如何驾驭复杂性 三、…

vs配置opencv找不到opencv_world480d.dll的问题

如下图所示 博主附加依赖项加了,但是运行程序的时候就是跳出来找不到opencv_world480d.dll。 最后是在电脑环境变量中添加了opencv安装后cv15文件夹中的bin目录的路径得以解决。 【此电脑】→【属性】→【高级系统设置】→【环境变量】→【系统变量】→【PATH】…

【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一

目录 引言 1 -> C语言传统的处理错误的方式 2 -> C异常概念 3 -> 异常的使用 3.1 -> 异常的抛出和捕获 3.2 -> 异常的重新抛出 3.3 -> 异常规范 4 -> 自定义异常体系 5 -> C标准库的异常体系 6 -> 异常的优缺点 引言 在C编程中&#xff…

冯喜运:4.16中东对抗风暴下,黄金原油市场何去何从?

黄金行情走势分析:4小时图布林道开始收口,昨日下探至下轨附近,也是此前的起涨低点2320启稳上升,十字K线配合单阳拉起,重新去摸高上轨。目前4小时图处于摸高当中。周线和日线留意多空转换,摸高之后是强势延续…

Codeforces Round 926 (Div. 2) ---- E. Sasha and the Happy Tree Cutting ----题解

E. Sasha and the Happy Tree Cutting: 题目大意: 思路解析: 现在有一颗树,然后给出了k对路径,然后要求路径上至少有一个结点是被染色了的,如果这k对路径没有共用边,那我们至少需要染色k条边。…

Docker安装及开启远程访问

这几天有人问我docker是怎么开启远程服务的? 正好之前我做过这件事情,并且写了相关的笔记,现在整理为一篇博客发出来。 安装Docker 首先更新一下自己的yum版本 yum update安装一下所需要的软件包 yum install -y yum-utils device-mappe…

MySQL进阶-----limit、count、update优化

目录 前言 一、limit优化 1. 未优化案例 2.优化后案例 二、count优化 count用法 三、update优化 1.锁行情况(有索引) 2.锁表情况(无索引) 前言 上一期我们学习了order by优化和group by优化,本期我们就继续学习…

Pytorch-张量形状操作

😆😆😆感谢大家的观看😆😆 🌹 reshape 函数 transpose 和 permute 函数 view 和 contigous 函数 squeeze 和 unsqueeze 函数 在搭建网络模型时,掌握对张量形状的操作是非常重要的&#xff…

AI大模型日报#0415:贾佳亚团队新作王炸、马斯克首款多模态大模型、ChatGPT to B

导读: 欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 融合ChatGPTDALLE3,贾佳亚团队新作开源:识图推理生图一站解决 摘要: 贾佳亚团队推出了多模态模型Mini-Gem…

【VIC水文模型】模型原理简介

VIC水文模型原理 VIC水文模型概述土壤(Soil)积雪(Snow)动态湖和湿地模型动态湖(Lake Model)湿地模型(Wetland Model) 1 VIC模型陆面水文过程(产流过程)1.1 能…

PyQt5设计师QtDesigner控件箱控件介绍及讲解

QtDesigner Qt Designer 是一个由Qt官方提供的图形用户界面设计工具,旨在帮助开发者快速、方便地设计和布局Qt应用程序的用户界面。Qt Designer提供了一个直观的可视化界面,开发者可以通过拖放、设置属性等方式设计界面,而无需编写繁琐的布局…

007 springboot整合mybatis-plus 增删改查 ModelAndView jsp 分页

文章目录 MybatisplusConfig.javaReceiveAddressController.javaReceiveAddress.javaReceiveAddressMapper.javaReceiveAddressServiceImpl.javaIReceiveAddressService.javaServerResult.javaServletInitializer.javaSpringbootDemoApplication.javareceive_address.sqlReceiv…

【canvas】canvas基础使用(九):文本绘制

简言 canvas除了能够绘制图形外,也可以绘制文本。 绘制文本 fillText() 填充文本 CanvasRenderingContext2D 对象的方法 fillText() 是 Canvas 2D API 的一部分,它在指定的坐标上绘制文本字符串,并使用当前的 fillStyle 对其进行填充。存…

论文解读:FREE LUNCH FOR FEW-SHOT LEARNING: DISTRIBUTION CALIBRATION

文章汇总 问题 学习到的模型很容易因为只有少数训练样本形成的有偏分布而变得过拟合。 动机 我们假设特征表示中的每个维度都遵循高斯分布,因此分布的均值和方差可以借鉴类似类的均值和方差,这些类的统计量可以通过足够数量的样本得到更好的估计。 …