新审视零阶优化在内存高效大模型微调中的应用

news2024/11/14 13:31:03

人工智能咨询培训老师叶梓 转载标明出处

随着大模型模型规模的增大,反向传播(BP)所需的内存开销也日益增加,这对内存效率提出了挑战。尤其是在设备上训练等内存效率至关重要的应用场景中,解决这一问题变得尤为迫切。

本文提出了一种新的方法,即在LLM微调过程中,采用零阶(Zeroth-Order, ZO)优化算法替代传统的需要反向传播的一阶(First-Order, FO)优化算法,以降低内存成本。这种BP-free的优化方法基于Malladi等人在2023年提出的初始概念。

论文地址:https://arxiv.org/abs/2402.11592

项目地址:https://github.com/ZO-Bench/ZO-LLM

方法

ZO优化作为一种不依赖梯度信息的替代方法,通过基于函数值的梯度估计来近似传统的一阶梯度。这种方法通常反映了其对应的一阶优化算法的算法框架,但它用ZO梯度估计替换了FO梯度作为下降方向。文中特别关注了随机梯度估计器(Randomized Gradient Estimator, RGE),这是一种依赖于沿随机选择的方向向量的函数值的有限差分的方法。

RGE的数学表达式,用来近似函数在点x处的梯度: 这里,是从标准高斯分布 中抽取的随机方向向量,q 是函数查询的数量,而 μ 是一个小的扰动步长。

前向梯度(Forward-Grad)是一种在LLM微调中可能被忽视的BP-free基线方法。与RGE不同,Forward-Grad利用前向模式自动微分(AD),但省去了在深度模型微调或训练中反向传播的需要。这意味着Forward-Grad不需要进行反向传播,因此可以作为提高LLM微调内存效率的另一种替代梯度估计方法。

ZO优化方法的范围包含: ZO-SGD是由Ghadimi和Lan在2013年提出的,它通过估计梯度来更新模型参数。Malladi等人在2023年的研究中采用了这种技术进行LLM的微调。基于符号的梯度估计的ZO-SGD(ZO-SGD-Sign),这种方法通过符号函数处理梯度估计,简化了计算过程。另外,带有动量(MMT)的ZO-SGD,它利用历史梯度信息来优化更新步骤,以及保守梯度更新的ZO-SGD(ZO-SGD-Cons),它在选择下降方向时采用一种基于启发式的方法。最后,ZO-Adam,这是Adam优化器的ZO变体,它结合了动量和自适应学习率。

通用的优化框架是将上述ZO优化方法统一起来,用于解决最小化问题 min_x f(x)。框架中的更新公式为: 这里,表示第t次迭代的解,是学习率,而h(·) 是对梯度估计进行后处理的下降方向操作。例如,ZO-SGD可以直接将估计的梯度作为下降方向,而ZO-SGD-Sign则使用梯度估计的符号作为下降方向。

任务对齐指的是将微调任务与预训练任务的格式对齐,这通常通过精心设计的输入提示来实现。例如,可以将文本分类任务转换为下一个词预测任务,从而使得微调任务与预训练任务更加一致。这种对齐有助于提高ZO优化的性能。

使用预训练的Roberta-Large模型在SST2和RTE数据集上进行微调,并比较了使用和不使用文本对齐时的性能差异。结果表明,没有进行文本对齐时,ZO-SGD和ZO-Adam的性能分别下降了约10%和8%,而FO-SGD的性能下降较小。这表明任务对齐对于提高ZO优化的微调性能至关重要。

想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。9月22日晚,实战专家1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。

加助理微信提供直播链接:amliy007,29.9元即可参加线上直播分享,叶老师亲自指导,互动沟通,全面掌握Llama Factory,关注享粉丝福利,限时免费CSDN听直播后的录播讲解。
LLaMA Factory 支持多种预训练模型和微调算法。它提供灵活的运算精度和优化算法选择,以及丰富的实验监控工具。开源特性和社区支持使其易于使用,适合各类用户快速提升模型性能。

实验

研究者选择了四个具有不同复杂性的任务:最简单的二元分类任务SST2,问答任务COPA,常识推理任务WinoGrande,以及多句阅读理解任务MultiRC(仅用于效率评估)。这些任务覆盖了从简单分类到复杂推理的多种场景。同时,研究者探索了四种参数高效的微调(PEFT)方案:全参数微调(FT)、低秩适应(LoRA)、前缀调整(Prefix)和提示调整(Prompt)。

研究涵盖了几种具有代表性的LLM,包括Roberta-Large、OPT、LLaMA2、Vicuna和Mistral,这些模型在规模和架构上有所不同。

优化方法: 实验中使用了多种ZO优化方法,包括ZO-SGD、ZO-SGD-Sign、ZO-SGD-MMT、ZO-SGD-Cons和ZO-Adam。这些方法在处理梯度估计和参数更新时采用了不同的策略。例如,ZO-SGD直接使用估计的梯度进行更新,而ZO-SGD-Sign则使用梯度估计的符号。此外,还比较了基于前向模式自动微分的Forward-Grad方法,以及两种一阶(FO)优化器:SGD和Adam。

实验迭代: 实验中,ZO优化器和FO优化器分别运行了20,000和625次迭代。这反映了ZO优化通常需要更多的迭代次数才能收敛。

精度和效率评估: 通过测试准确性和效率(包括内存效率、查询效率和运行时效率)来评估不同优化方法的性能。

实验结果:

表2展示了在SST2数据集上不同BP-free和基于BP的方法的性能比较。结果显示,ZO-Adam在多数设置中表现最佳,但需要更多的内存。Forward-Grad在全参数微调(FT)设置中表现出色,表明它可能适合大规模问题。ZO方法的性能波动较大,这可能与随机梯度估计(RGE)的高方差有关。

当问题规模增大且变得更复杂时,不同ZO方法之间的性能差距增大。FO方法(FO-SGD和FO-Adam)在WinoGrande任务上的性能明显优于所有ZO方法,这揭示了ZO方法在处理大型模型和复杂任务时的可扩展性瓶颈。

内存效率深入分析:

表5提供了不同优化器在全参数微调和LoRA微调中的即时峰值内存消耗的比较。ZO方法通常比FO方法更有效,因为它们不需要存储中间结果,且可以逐层估计梯度,从而避免了存储整个模型的梯度。

实验结果与理论分析一致,表明ZO方法在内存效率方面具有显著优势。随着输入序列长度的增加,ZO方法的内存优势更加明显,因为它们的峰值内存消耗仅由模型参数大小决定,与中间结果的大小无关。

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

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

相关文章

Sora 代码规范之Refactor this method to not always return the same value.(目的性问题)

Sora描述 Refactor this method to not always return the same value.(目的性问题) 上述代码,可能出现 总是返回 null 的情况 解决一下 原因:为什么要这么写呢?因为 下面的代码会对 materialInfos 这个集合处理&#…

房子公摊要消失了?

文|琥珀食酒社 作者 | 璇子 你敢信 才短短三个月 江苏、浙江、广东 这三房价高昂的城市 陆续宣布房市重大改革信号 比如将空中花园绿化阳台、 小区景观绿化亭廊 、 开放式风雨连廊等不计容积率 挑高客厅只算单层面积 甚至部分区域买房面积 直接按照套内面…

足球联赛|基于SprinBoot+vue的足球联赛管理系统(源码+数据库+文档)

足球联赛管理系统 目录 基于SprinBootvue的足球联赛管理系统 一、前言 二、系统设计 三、系统功能设计 5.1 系统前台功能实现 5.2 后台功能模块实现 5.2.1 管理员模块实现 5.2.2 用户后台模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选…

20+岁老牌定制家居品牌,如何靠呼叫中心捕获年轻消费者?

Home Tour类一镜到底的短视频,在社交平台一直备受年轻人喜爱。金牌厨柜这个20多岁的老牌定制家居品牌,不仅在高端厨柜和定制家居领域有着深厚的积累,而且一直也在探索数字化转型的新路径:用全新的数字化体系,迎合年轻一…

使用VScode的Git版本控制功能(图文版)

☁️ 前言 今天让我来手把手教你简单入门VScode自带的Git版本控制。 🎉 初始化仓库 初始化仓库之后,仓库里的文件发生了任何改动都会有相应的提示,这对于我们开发和维护项目非常有帮助。 🎉提交更改 初始化仓库之后&#xff…

机器学习:K-means算法及代码实现

1、K-means算法原理 K-means算法是一种常用的聚类算法,其目的是将数据集划分为K个簇(clusters),使得每个簇内部的数据点尽可能相似,而簇与簇之间的数据点尽可能不同。以下是K-means算法的基本原理和步骤: 初…

【C++】C++中的字符串

提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 #include <iostream>using namespace std; void total(string str); int main() {string str;cout << "请输入一个字符串:" ;//cin >>str;getline(…

SAP怎么查找系统全部的增强点呢?

1.在已有的BADI查找程序里面有点手无足措的样子&#xff0c;不知道该如何去找增强&#xff01; 2.这个时候刚刚接触系统还不熟悉&#xff0c;系统里面存在了什么增强&#xff0c;这个时候咋办捏&#xff1f;SE38 -SNIF 此时全部的增强点都在这里面啦&#xff01;&#xff01;&…

使用LinkedHashMap实现固定大小的LRU缓存

使用LinkedHashMap实现固定大小的LRU缓存 1. 什么是LRU&#xff1f; LRU是"Least Recently Used"的缩写&#xff0c;意为"最近最少使用"。LRU缓存是一种常用的缓存淘汰算法&#xff0c;它的核心思想是&#xff1a;当缓存满时&#xff0c;优先淘汰最近最少…

二、设置地图配置表

一、导入一个背景图 由于背景图比较大&#xff0c;需要缩小至0.73 二、写配置文件&#xff08;SO&#xff09; 使用List需要一个命名空间 写一个类&#xff0c;声明房间的出现数量和种类&#xff1b;将它实例化出来 三、枚举变量的多选 在枚举变量中标记命名空间&#xff…

C++:list篇

前言: 观看C的list前需要对链表有一些了解&#xff0c;如C语言的链表结构。本片仅介绍list容器中常用的接口函数概念以及使用。 list的概念&#xff1a; 简而言之&#xff0c;C的list是一个双向带哨兵位的链表容器模板 list的构造&#xff1a; 1.list():默认构造 2.li…

2024最新版Python+Pycharm安装教程,安装、环境配置、汉化全搞定,保姆级教学!

一、Python下载 为了节约时间&#xff0c;我将PythonPycharm安装包、集火码全部打包上传至CSDN官方&#xff0c;可放心下载&#xff0c;完全免费&#xff01;&#xff08;安装包均为最新版本&#xff09; 二、Python安装 1.双击运行本地文件夹下的python安装包&#xff08;以…

c++关于字符串的联系

提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 #include <iostream> #include<string> using namespace std;int main() {string s1;int letter0,digit0,space0,other0;cout<<"请输入一个字符串:"…

Visual Studio 2022 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开字体和颜色对话框2. 设置【文本编辑器】字体大小3. 设置【编辑器智能提示框】字体大小4. 设置【编辑器方法提示框】字体大小5. 设置【输出框】、【错误列表框】字体大小6. 设置【终端】字体大小7. 设置【程序包管理…

线程基础和线程间通信

作业一:创建3个线程&#xff0c;一个子线程拷贝文件的前一半&#xff0c;一个子线程拷贝后一半文件&#xff0c;主线程回收子线程资源。 #include <myhead.h> //定义结构体变量 typedef struct {const char *src_file;const char *dest_file;int start;int end; } Copy;…

IAR软件配置笔记

Project->Optiions->配置Device Debug中配置 C/C Compiler中配置 优化等级 C语法标准选择 回到主界面&#xff0c;Tools->Options 字体调整 Editor更改缩进数 Project->Make编译 调试模式和编辑模式的View菜单栏不一样http://t.csdnimg.cn/JsWjy

百度网盘下载的文件怎么打印?

一、自有打印机情况下的打印方法 如果您家中或办公室配备有打印机&#xff0c;那么打印百度网盘上的文件就变得非常简单了。首先&#xff0c;请确保您的打印机已连接并设置妥当。以下是基本的操作流程&#xff1a; 下载文件&#xff1a;从百度网盘中下载所需的文件至您的计算…

关于重复消费的一些解决方案

重复消费问题一直是一个热点问题&#xff0c;不管是面试还是实际工作过程中都会遇到&#xff0c;今天我就盘一下这个问题。 1. 重复消费是怎么出现的 重复消费的问题出现的情况有很多&#xff0c;我列举一下常见的吧&#xff1a; 用户重复提交表单。 用户使用软件恶意刷单。…

【Qt】基于VTK9.1+VS2019+Qt5.15.2的点云可视化程序开发

目录 0. 写在前面 1. 开发环境 2. VS 2019 PCL 1.12.1 配置 3. Qt 5.15.2安装 & Qt-VS插件安装 & VTK 9.1.0编译安装 4. 点云显示demo 4.1 UI 4.2 头文件 4.3 主程序 4.4 显示效果 5. 写在最后 0. 写在前面 由于工作需要和个人爱好&#xff0c;我最近在学习…

lenovo M7328W 复印二页不同的内容到同一张白纸上,要求要全都是正向,就是一个方向显示。当然也可以不一样,那就随便放不要求正反,只要求位置一致。

1、先上个图&#xff0c;打开软件&#xff1a; 按一下电源键&#xff0c;将休眠中的打印机&#xff0c;变成待机状态&#xff0c;这样才可以复印。 2、打开复印的盖板&#xff0c;将要复印的一面帖在最右侧&#xff0c;右侧要留一些空白距离&#xff0c;然后点击复印按钮&#…