大模型的实践应用20-一种内存高效微调技术LISA,效果比LoRA有显著提升

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用20-一种内存高效微调技术LISA,效果比LoRA有显著提升。LISA是一种新型的微调技术,全称为Layerwise Importance Sampled AdamW,由UIUC联合LMFlow团队提出。这项技术主要针对大型语言模型(LLM)的微调问题,旨在实现内存高效的微调。LISA技术的核心在于对大型语言模型中的各个层次进行重要性采样,从而在保证模型性能的同时减少内存消耗。
在这里插入图片描述

文章目录

  • 一、LISA微调技术的背景
  • 二、原理说明
  • 三、LISA与LoRA微调的对比
  • 四、算法步骤说明
  • 五、多尺度微调
  • 六、应用场景
  • 七、结论

一、LISA微调技术的背景

自从大型语言模型(LLMs)首次出现以来,机器学习社区见证了令人印象深刻的进步,然而它们巨大的内存消耗已成为大规模训练的一个主要障碍。为了缓解这个问题,提出了一些参数高效微调技术,如低秩适应(LoRA),但它们的性能仍然无法与大多数大规模微调设置中的全参数训练相匹敌。为了补充这一不足,我们研究了LoRA在微调任务中的逐层特性,并观察到了不同层之间权重范数的非寻常偏斜。利用这一关键观察,我们发现了出人意料地简单的训练策略,该策略在广泛的设置中优于LoRA和全参数训练,内存消耗与LoRA一样低。我们将其命名为逐层重要采样AdamW(LISA),这是LoRA的一个有前途的替代方案,它将重要性采样的想法应用于LLMs中的不同层,并在优化过程中随机冻结大多数中间层。实验结果表明,在相似的或更少的GPU内存消耗下,LISA在下游微调任务中超越了LoRA,甚至超过了全参数微调,其中LISA在MT-Bench得分上始终优于LoRA超过11%-37%。特别是在大型模型LLaMA-2-70B上,LISA在MT-Bench、GSM8K和PubMedQA上的性能与LoRA相当或更好,展示了其在不同领域的有效性。

二、原理说明

LISA算法的核心思想是:始终更新底层embedding和顶层linear head,同时随机更新少数中间的self-attention层,比如2-4层。这种做法可以让模型在指令微调任务上超过LoRA甚至全参数微调,同时还能降低空间消耗和LoRA相当甚至更低。LISA的收敛性质比LoRA有显著提升,达到了全参数调节的水平。此外,LISA由于不需要像LoRA那样引入额外的adapter结构,计算量小于LoRA,速度比LoRA快近50%。在理论性质上,LISA也更加容易分析,可以使用Gradient Sparsification、Importance Sampling、Randomized Block-Coordinate Descent等数学工具进行分析。

三、LISA与LoRA微调的对比

LISA与LoRA相比,具有以下几个方面的优势:

  1. 效率提升:LISA的速度比LoRA快约50%。

  2. 内存消耗:LISA的总空间消耗低于LoRA,70B的总空间消耗降低到了80G*4,而7B则直接降到了单卡24G以下。

  3. 模型性能:LISA在指令微调任务上超过了LoRA和全参数微调。

  4. 算法简化:LISA不需要像LoRA那样引入额外的结构,使得算法更为简洁。

  5. 适应性:LISA对更深网络和梯度检查点技术更加友好,能够带来更大的空间节省。

四、算法步骤说明

为了利用前述发现,我们希望模拟LoRA的更新模式,通过采样不同的层进行冻结。这样,我们可以避免LoRA固有的有限低秩表示能力的不足,并模仿其快速学习过程。直观地说,考虑到层间相同的全局学习率,LoRA中权重范数小的层在完全参数设置中解冻的概率也应该小,这样,各层在迭代过程中的预期学习率可以保持不变。这正是重要性采样的思想(Kloek和Van Dijk,1978;Zhao和Zhang,2015),我们在完全参数设置中不是应用层间的不同学习率 { η t ℓ } \{\eta_t^\ell\} {ηt}来模仿LoRA的更新 { η ~ t ℓ } \{\tilde{\eta}_t^\ell\} {η~t},而是应用采样
η t ℓ = η ~ t ℓ ⋅ w ~ ℓ w ℓ ⇒ η t ℓ = η ⋅ p ℓ , p ℓ = w ~ ℓ w ℓ \eta_t^\ell = \tilde{\eta}_t^\ell \cdot \frac{\tilde{w}^\ell}{w^\ell} \Rightarrow \eta_t^\ell = \eta \cdot p^\ell, \quad p^\ell = \frac{\tilde{w}^\ell}{w^\ell} ηt=η~tww~ηt=ηp,p=ww~
这产生了我们的逐层重要性采样AdamW方法,如算法1所示。在实践中,由于LoRA中除了最底层和最高层之外的层的权重范数都较小,我们实际上采用了 { p ℓ } ℓ = 1 N L = { 1.0 , γ / N L , γ / N L , … , γ / N L , 1.0 } \{p^\ell\}_{\ell=1}^{N_L} = \{1.0, \gamma/N_L, \gamma/N_L, \ldots, \gamma/N_L, 1.0\} {p}=1NL={1.0,γ/NL,γ/NL,,γ/NL,1.0},其中 γ \gamma γ控制了优化过程中解冻层的预期数量。直观上, γ \gamma γ作为一个补偿因子,弥合了LoRA和全参数调整之间的差异,让LISA模仿LoRA类似的层间更新模式。为了进一步控制在实际设置中的内存消耗,我们每次随机采样 γ \gamma γ层,以在训练过程中上限未冻结层的最大数量。

LISA算法的步骤主要包括以下几个环节:

初始化:首先,需要加载预训练的大型语言模型,并准备好待微调的任务数据。

层间重要性采样:LISA会根据预设的策略(例如,基于权重范数的策略)来选择哪些层需要更新。通常,只有少数几层会在每次迭代中被更新。

更新策略:对于选定的层,LISA会使用优化算法(如AdamW)来更新其权重。

梯度检查点:为了避免在反向传播过程中消耗过多的内存,LISA可以利用梯度检查点技术来节省内存。

重复采样:LISA会重复执行层间采样和更新步骤,直到达到一定的迭代次数或满足性能指标为止。

在这里插入图片描述

五、多尺度微调

为了进一步展示LISA在大规模LLMs上的可扩展性,我们在LLaMA-2-70B(Touvron等人,2023b)上进行了额外的实验。

我们引入了一套针对数学和医学QA基准的领域特定微调任务。GSM8K数据集(Cobbe等人,2021年),包含7473个训练实例和1319个测试实例,用于数学领域。对于医学领域,我们选择了PubMedQA数据集(Jin等人,2019年),它包括211.3K个人工生成的QA训练实例和1K个测试实例。这些数据集的统计信息总结在表2中。对PubMedQA数据集(Jin等人,2019年)的评估使用了5次提示设置,而GSM8K数据集(Cobbe等人,2021年)的评估是使用Chain of Thought (CoT)提示进行的,如近期的研究(Wei等人,2022年;Shum等人,2023年;Diao等人,2023b年)所建议。关于超参数,我们对LoRA采用秩256,对LISA采用E+H+4L,更多细节可以在附录A中找到。

结果 如表所示,与LoRA相比,LISA在性能上始终更优或与之相当。此外,在指令调整任务中,LISA再次超越了全参数训练,使其成为这一设置中的有竞争力方法。特别是,图5突出了模型在各种方面的表现,尤其是在写作、角色扮演和STEM方面,LISA优于所有方法。除此之外,LISA在所有子任务上的表现一致优于LoRA,突显了LISA在多样化任务中的有效性。图表还将黄色LoRA线与紫色Vanilla线进行了对比,揭示出在70B这样的大型模型中,LoRA的表现并不如预期,只在特定方面显示出边际改进。

在这里插入图片描述

六、应用场景

LISA技术的应用场景广泛,尤其是在需要对大型语言模型进行微调的场景中。例如,可以在推理分割任务中应用LISA,通过自我推理能力增强现有的视觉分割器,处理复杂推理和世界知识的任务。此外,LISA还可以用于多模态大型语言模型,通过将分割功能注入到多模态LLM中,解锁当前感知系统的自我推理能力。

七、结论

在本文中,我们提出了逐层重要性采样AdamW(LISA),这是一种基于给定概率随机冻结LLM层的优化算法。受到LoRA权重范数分布偏斜观察的启发,我们引入了一种简单且内存高效的冻结范式,用于LLM训练,在包括LLaMA-2-70B在内的各种模型的下游微调任务上,其性能显著优于LoRA。进一步针对特定领域的训练实验也证明了其有效性,显示出LISA作为LoRA替代方案在LLM训练中的巨大潜力。
LISA技术在提高大型语言模型微调效率、节约内存消耗以及提升模型性能方面具有显著的优势。与LoRA技术相比,LISA以其更快的速度、更低的内存消耗和更好的模型性能表现,成为了一个更有效的微调选项。这使得LISA有望在大模型的普及和发展中扮演重要角色,尤其是在资源有限的情况下。

最后给大家介绍一下来源:
论文链接:https://arxiv.org/abs/2403.17919
开源地址:https://github.com/OptimalScale/LMFlow

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PUBG绝地求生29.1版本加速器推荐 免费低延迟不丢包加速器

绝地求生是一款多人大逃杀游戏,游戏有多张地图可供玩家选择,玩家空投跳伞至地图的各个角落,赤手空拳寻找武器,车辆以及物资,并在多种多样的地形中展开战斗,枪械角色身上可携带4种武器,分别是近战…

绝地求生29.1版本更新后进不去 绝地求生更新后进不去游戏怎么办

绝地求生游戏共有两种主要模式:第一人称模式和第三人称模式。在这两种模式下玩家可以分别进行单排,双排,四人组队或单人匹配四人团队模式。在进入游戏的时候,玩家可以在面板选择第一人称以及第三人称。在双排或四排等组队多人游戏…

为什么说无人机的发展是必然趋势???

随着科技的飞速发展,无人机已经逐渐从军事领域走进了普通人的生活,成为了我们探索天空、捕捉美好瞬间的新工具。今天,就让我带大家一起走进无人机的世界,感受它带来的无限魅力与可能性。 无人机,顾名思义,就…

C# 如何修改项目名称

目录 背景具体步骤1、Visual Studio中修改项目名和程序集名称以及命名空间2、修改项目文件夹名3、修改解决方案里项目的路径4、再次打开解决方案,问题解决步骤总结 名词解释解决方案(Solution)项目(Project)程序集&…

【千帆平台】百度智能云千帆AppBuilder应用探索益智游戏之猜物小游戏

欢迎来到《小5讲堂》 这是《千帆平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景AppBuilder控制台创建应用设置应用自动配置随机生成AI生成应…

线程池(详解)

目录 前言 线程池的好处 使用Executors 创建常见的线程池 工厂模式: 往线程池当中添加任务 常见线程类 ​编辑 线程池的参数介绍 线程池的工作流程 补充 前言 如果我们需要频繁的创建销毁线程,此时创建销毁线程的成本,不能忽视了 因此就可以使用线程池.提前创建好一波…

Vue - 4( 8000 字 Vue 入门级教程)

一: Vue 初阶 1.1 关于不同版本的 Vue Vue.js 有不同版本,如 vue.js 与 vue.runtime.xxx.js,这些版本主要针对不同的使用场景和需求进行了优化,区别主要体现在以下几个方面: 完整版 vs 运行时版: vue.js&…

标注平台工作流:如何提高训练数据质量与管理效率

世界发展日益依托数据的驱动,企业发现,管理不断增长的数据集却愈发困难。数据标注是诸多行业的一个关键过程,其中包括机器学习、计算机视觉和自然语言处理。对于大型语言模型(LLM)来说尤是如此,大型语言模型…

代码随想录阅读笔记-回溯【组合总和III】

题目 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 示例 2: 输入: k 3, n 9 输出: [[1,2,6], [1,3,5], [2,3,4]] 说明: 所有数字都是正整数。…

Day30 回溯 LeedCode 332.重新安排行程 51. N皇后 37. 解数独 蓝桥杯 与或异或

332. 重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK…

【小程序】常用方法、知识点汇总1

欢迎来到《小5讲堂》 这是《小程序》系列文章,每篇文章将以博主理解的角度展开讲解, 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言请求超时Markdown解析逐行显示效果文本变动事件转发…

C语言—每日选择题—Day65

前言 我们的刷题专栏又又又开始了,本专栏总结了作者做题过程中的好题和易错题。每道题都会有相应解析和配图,一方面可以使作者加深理解,一方面可以给大家提供思路,希望大家多多支持哦~ 第一题 1、如下代码输出的是什么…

LINUX系统触摸工业显示器芯片应用方案--Model4(简称M4芯片)

背景介绍: 触摸工业显示器传统的还是以WINDOWS为主,但近年来,安卓紧随其后,但一直市场应用情况不够理想,反而是LINUX系统的触摸工业显示器大受追捧呢? 触摸工业显示器传统是以Windows系统为主&#xff0c…

无线游戏手柄的测试(Windows11系统手柄调试方法)

实物 1、把游戏手柄的无线接收器插入到电脑usb接口中 2、【控制面板】----【查看设备和打印机】 3、【蓝牙和其它设备】--【更多设备和打印机设置】 4、鼠标右键【游戏控制器设置】 5、【属性】 6、【测试】(每个按键是否正常) 7、【校准】(…

学习笔记:解决拖延

1 解决拖延,减轻压力的关键心态和方法 1.1 要点梳理 拖延是因为自己一直在逃避,重点是要有效突破逃避圈,进入学习圈,扩展成长圈。 毒蛇曲线(见思维导图)中越是临近截止期限,拖延的焦虑越上升…

【项目实战经验】DataKit迁移MySQL到openGauss(下)

上一篇我们分享了安装、设置、链接、启动等步骤,本篇我们将继续分享迁移、启动~ 目录 9. 离线迁移 9.1. 迁移插件安装 中断安装,比如 kill 掉java进程(安装失败也要等待300s) 下载安装包准备上传 缺少mysqlclient lib包 mysq…

树的基本概念(重点)

1.一下概念很重要 以下面的的树为例: 1.节点的度: 一个节点所含有的子树的个数就是这个节点的度,注意一个子节点也算一个子树。 如上图: B节点的度1; A节点的度6; 2.树的度: 一个树的度这…

实模式和保护模式

前言 大家好,我是jiantaoyab,内存中的每一个字节都有一个唯一的地址,通过这个地址我们能去取出一个个比特,我们可以称这个过程为寻址。在现实生活中,我们去菜鸟拿快递的时候,是通过取件码上的编号到架子上…

CLion 解决中文输出乱码的问题

问题介绍 在 Clion 的默认设置下&#xff0c;输出中文会出现乱码&#xff0c;如下 #include <iostream> using namespace std;int main() {cout << "你好" << endl;return 0; }输出 浣犲ソProcess finished with exit code 0解决方案 编码问题…

LangChain - Chain

文章目录 1、概览为什么我们需要链? 2、快速入门 (Get started) - Using LLMChain多个变量 使用字典输入在 LLMChain 中使用聊天模型&#xff1a; 3、异步 API4、不同的调用方法__call__调用仅返回输出键值 return_only_outputs只有一个输出键 run只有一个输入键 5、自定义cha…