【大模型实操 | LoRA、QLoRA微调大模型实战技巧分享,含常见QA解答!】

news2024/9/22 16:46:40

文末有福利!

引言

今天给大家分享的这篇文章是关于LoRA微调大模型实操技巧,讨论了从实验中得出的主要经验和教训;此外,本文将解答一些与LoRA技术相关的常见问题。如果你对于微调定制化的大语言模型感兴趣,希望这些见解能够帮助你快速起步。

LoRA背景

增加数据量和模型的参数量是公认的提升神经网络性能最直接的方法。目前主流的大模型的参数量已扩展至千亿级别,「大模型」越来越大的趋势还将愈演愈烈。

这种趋势带来了多方面的算力挑战。想要微调参数量达千亿级别的大语言模型,不仅训练时间长,还需占用大量高性能的内存资源。

为了让大模型微调的成本「打下来」,微软的研究人员开发了低秩自适应(LoRA)技术。LoRA 的精妙之处在于,它相当于在原有大模型的基础上增加了一个可拆卸的插件,模型主体保持不变。LoRA 随插随用,轻巧方便。

对于高效微调出一个定制版的大语言模型来说,LoRA 是最为广泛运用的方法之一,同时也是最有效的方法之一。如果你对开源 LLM 感兴趣,LoRA 是值得学习的基本技术,不容错过。

LoRA简介

由于GPU内存的限制,在训练过程中更新整个模型权重成本很高。例如,假设有一个7B参数的语言模型,用一个权重矩阵W表示。在反向传播期间,模型需要学习一个ΔW矩阵,旨在更新原始权重,让损失函数值最小。权重更新如下:

Wupdated=W+ΔW

如果权重矩阵包含7B个参数,则权重更新矩阵也包含7B个参数,计算矩阵非常耗费计算和内存。

由Edward Hu等人提出的LoRA将权重变化的部分分解为低秩表示。确切地说,它不需要显示计算。相反,LoRA在训练期间学习的分解表示,如下图所示,这就是LoRA节省计算资源的奥秘。

如上所示,的分解意味着我们需要用两个较小的LoRA矩阵A和B来表示较大的矩阵。如果A的行数与相同,B的列数与相同,可以将以上的分解记为。(AB是矩阵A和B之间的矩阵乘法结果。)

这种方法节省了多少内存呢?还需要取决于秩r,秩r是一个超参数。例如,如果有10000行20000列,则需存储200000000个参数。如果我们选择的A和B,则A有10000行和8列,B有8行和20000列,即 个参数,比200000000个参数少约830 倍。

当然,A和B无法捕捉到涵盖的所有信息,但这是LoRA的设计所决定的。在使用LoRA时,我们假设模型是一个具有全秩的大矩阵,以收集预训练数据集中的所有知识。当我们微调LLM 时,不需要更新所有权重,只需要更新比更少的权重来捕捉核心信息,低秩更新就是这么通过矩阵实现的。
在这里插入图片描述

LoRA一致性

虽然LLM在GPU上训练的随机性不可避免,但是采用LoRA进行多次实验,LLM最终的基准结果在不同测试集中都表现出了惊人的一致性。对于进行其他比较研究,这是一个很好的基础。

注,以上这些结果是在默认设置下,使用较小的值获得的。实验详情可见论文:https://lightning.ai/pages/community/lora-insights/

QLoRA计算

QLoRA 是由 Tim Dettmers 等人提出的量化 LoRA 的缩写。QLoRA 是一种在微调过程中进一步减少内存占用的技术。在反向传播过程中,QLoRA 将预训练的权重量化为 4-bit,并使用分页优化器来处理内存峰值。

使用LoRA时可以节省33%的GPU内存。然而,由于QLoRA中预训练模型权重的额外量化和去量化,训练时间增加了39%。

默认LoRA具有16bit浮点精度:

  • 训练时长:1.85 小时
  • 内存占用:21.33GB

具有4位正常浮点数的 QLoRA

  • 训练时长为:2.79h
  • 内存占用为:14.18GB

此外,可以发现模型的性能几乎不受影响,如下图所示。这说明QLoRA可以作为 LoRA 训练的替代方案,更进一步解决常见GPU内存瓶颈问题。

学习率调度器

学习率调度器会在整个训练过程中降低学习率,从而优化模型的收敛程度,避免loss值过大。

余弦退火(Cosine annealing)是一种遵循余弦曲线调整学习率的调度器。它以较高的学习率作为起点,然后平滑下降,以类似余弦的模式逐渐接近0。一种常见的余弦退火变体是半周期变体,在训练过程中只完成半个余弦周期,如下图所示。

实验中,在LoRA微调脚本中添加了一个余弦退火调度器,它显著地提高了SGD的性能。但是它对Adam和AdamW优化器的增益较小,添加之后几乎没有什么变化。接下来,将讨论 SGD 相对于 Adam 的潜在优势。

SGD VS Adam

Adam 和 AdamW 优化器在深度学习中很受欢迎。尽管在处理大型模型时它们非常占用内存,原因是Adam优化器为每个模型参数维护两个移动平均值:梯度的一阶矩(均值)和梯度的二阶矩(非中心方差)。换句话说,Adam优化器在内存中为每个模型参数存储两个附加值,即如果我们正在训练一个7B参数的模型,那使用Adam就能够在训练的过程中跟踪额外的14B参数,相当于在其他条件不变的情况下,模型的参数量翻了一番。

SGD 优化器在训练期间不需要存储任何额外参数,所以在训练LLM时,相比于Adam,SGD在峰值内存方面有什么优势呢?

在实验中,使用AdamW和LoRA(默认设置 r=8)训练一个7B参数的Llama2模型需要14.18GB的GPU内存。用SGD训练同一模型需要14.15GB 的GPU内存。相比于AdamW,SGD只节省了0.03GB的内存,作用微乎其微。

为什么只节省了这么一点内存呢?这是因为使用LoRA时,LoRA已经大大降低了模型的参数量。例如,如果r=8,在7B的Llama2模型的所有 6738415616个参数,只有4194304个可训练的LoRA参数。

只看数字,4194304 个参数可能还是很多,但是其实这么多参数仅占用 4194304×2×16bit=134.22mbit = 16.78mbyte。(观察到存在0.03 Gb = 30 Mb 的差异,这是由于在存储和复制优化器状态时,存在额外的开销。)其中:2代表Adam存储的额外参数的数量,而16位指的是模型权重的默认精度。

如果把LoRA矩阵的r从8拓展到256,那么SGD相比AdamW的优势就会显现:

  • 使用 AdamW 将占用内存 17.86 GB
  • 使用 SGD 将占用 14.46 GB

因此,当矩阵规模扩大时,SGD 节省出的内存将发挥重要作用。由于SGD不需要存储额外的优化器参数,因此在处理大模型时,SGD相比Adam等其他优化器可以节省更多的内存。这对于内存有限的训练任务来说是非常重要的优势。

那么,如何系统的去学习大模型LLM?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~ , 【保证100%免费

在这里插入图片描述

篇幅有限,部分资料如下:
👉LLM大模型学习指南+路线汇总👈

💥大模型入门要点,扫盲必看!
在这里插入图片描述
💥既然要系统的学习大模型,那么学习路线是必不可少的,这份路线能帮助你快速梳理知识,形成自己的体系。
在这里插入图片描述

👉大模型入门实战训练👈

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

👉国内企业大模型落地应用案例👈

💥《中国大模型落地应用案例集》 收录了52个优秀的大模型落地应用案例,这些案例覆盖了金融、医疗、教育、交通、制造等众多领域,无论是对于大模型技术的研究者,还是对于希望了解大模型技术在实际业务中如何应用的业内人士,都具有很高的参考价值。 (文末领取)

在这里插入图片描述
💥《2024大模型行业应用十大典范案例集》 汇集了文化、医药、IT、钢铁、航空、企业服务等行业在大模型应用领域的典范案例。

在这里插入图片描述

👉LLM大模型学习视频👈

💥观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 (文末领取)

在这里插入图片描述

👉640份大模型行业报告👈

💥包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

👉获取方式:
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

在这里插入图片描述

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

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

相关文章

HTML(28)——空间转换

空间:是从坐标轴角度定义的XYZ三条坐标轴构成了一个立体空间 Z轴位置与视线方向相同 空间转换 平移 属性: transform: translate3d(x,y,z);transform: translateX();transform: translateY();transform: translateZ(); 取值:像素单位数值…

Why Can’t Robots Click The “I’m Not a Robot” Box On Websites?

Clicking a tiny box tells Google all they need to know about your humanity 你好,我是 Jiabcdefh。 if you’ve browsed the internet for any amount of time, you will likely come across a reCAPTCHA box. These boxes appear when you first enter certain websites…

LabVIEW开发高灵敏静电计

开发了一套基于LabVIEW平台的高灵敏静电计控制软件,用于提升闪烁薄膜探测器在中子和伽马射线探测中的灵敏度标定精度。传统的标定方法存在数据准确性不高和操作复杂性高的问题,因此开发这款软件解决这些挑战,通过自动化控制和高效的数据处理&…

删除重复的图片

一、解决:删除重复的图片 最近在用某网盘下载文件时,发现下载的图片文件有重复的,一个图片重复3次下载。严重占用硬盘,下载速度还不快。 原本有1T多的硬盘容量现在还剩300G,只下载了96%,据观察1%的进度大约需要100G的…

Typora篇-忍痛开启

语雀专业会员即将到期, 我看着99元的学费款, 我决定重新用回Typora。 虽然里面有一些文件但是我还是舍不得ಥ_ಥ 99元巨款。 下面开启我的Typora整活历程, 大家有什么好用的插件快捷方式一起来分享啊。

设计模式之职责链模式(Chain of Responsibility Pattern)

1.概念 职责链模式(Chain of Responsibility Pattern):避免将请求发送者与接收者耦合在一起,让多个对象都有机会接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止…

阶段三:项目开发---大数据开发运行环境搭建:任务4:安装配置Spark集群

任务描述 知识点:安装配置Spark 重 点: 安装配置Spark 难 点:无 内 容: Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop …

身边的故事(十五):阿文的故事:再消失

物镜人非,沧海桑田。像我们这些普通的凡人,哪有什么试错的机会,每走一步都是如履薄冰,小心谨慎,错一步可能就会万劫不复。唉,如果...唉...哪有什么如果... 阿文的房子很快装修完成,入新房那天就…

Linux中的粘滞位及mysql日期函数

只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写 权限. 为了解决这个不科学的问题, Linux引入了粘滞位的概念. 粘滞位 当一个目录被设置为"粘滞位"(用chmod t),则该目录下的文件只能由 一、超级管理员删除 二、该目录…

【MYSQL】如何解决 bin log 与 redo log 的一致性问题

该问题问的其实就是redo log 的两阶段提交 为什么说redo log 具有崩溃恢复的能力 MySQL Server 层拥有的 bin log 只能用于归档,不足以实现崩溃恢复(crash-safe),需要借助 InnoDB 引擎的 redo log 才能拥有崩溃恢复的能力。所谓崩…

【操作系统】进程管理——进程的同步与互斥(个人笔记)

学习日期:2024.7.8 内容摘要:进程同步/互斥的概念和意义,基于软/硬件的实现方法 进程同步与互斥的概念和意义 为什么要有进程同步机制? 回顾:在《进程管理》第一章中,我们学习了进程具有异步性的特征&am…

(十五)GLM库对矩阵操作

GLM简单使用 glm是一个开源的对矩阵运算的库&#xff0c;下载地址&#xff1a; https://github.com/g-truc/glm/releases 直接包含其头文件即可使用&#xff1a; #include <glad/glad.h>//glad必须在glfw头文件之前包含 #include <GLFW/glfw3.h> #include <io…

进口生骨肉冻干比国产好?盘点值得入手的高赞生骨肉冻干品牌

不少新手养猫人都会好奇&#xff0c;为何进口生骨肉冻干的价格如此高昂&#xff0c;却仍受到众多养猫达人的青睐&#xff1f;与国产生骨肉冻干相比&#xff0c;进口产品价格高出3-4倍&#xff0c;那么这高昂的价格背后&#xff0c;进口生骨肉冻干究竟物有所值&#xff0c;还是只…

Linux--线程(概念篇)

目录 1.背景知识 再谈地址空间&#xff1a; 关于页表&#xff08;32bit机器上&#xff09; 2.线程的概念和Linux中线程的实现 概念部分&#xff1a; 代码部分&#xff1a; 问题&#xff1a; 3.关于线程的有点与缺点 4.进程VS线程 1.背景知识 再谈地址空间&#xff1a…

申请乙级测绘资质最新标准

截止到目前为止&#xff0c;测绘资质申请条件还是按照自然资源部于2021年发布的《自然资源部办公厅关于印发测绘资质管理办法和测绘资质分类分级标准的通知》&#xff08;自然资办发[2021]43号&#xff09;&#xff0c;具体内容如下&#xff0c;近期想申请测绘资质的企业可以参…

泛微E9开发 根据条件显示/隐藏明细行

根据条件显示/隐藏明细行 1、需求说明2、实现方法3、扩展知识点控制明细数据行的显示及隐藏格式参数说明演示 1、需求说明 主表字段“全部显示/隐藏”&#xff08;下拉框&#xff0c;值&#xff1a;0 全部显示、1 全部隐藏&#xff09;&#xff0c;用来控制所有明细行的显示、隐…

C++基础(十二):string类

这一篇博客&#xff0c;我们正式进入STL中的容器的字符串类的学习&#xff0c;C标准模板库&#xff08;STL&#xff09;中的std::string类是一个用于表示和操作字符串的类。它封装了动态分配的字符数组&#xff0c;提供了丰富的成员函数来进行字符串的操作&#xff0c;例如拼接…

019-GeoGebra中级篇-GeoGebra的坐标系

GeoGebra作为一款强大的数学软件&#xff0c;支持多种坐标系的使用&#xff0c;包括但不限于&#xff1a;笛卡尔坐标系&#xff08;Cartesian Coordinate System&#xff09;、极坐标系&#xff08;Polar Coordinate System&#xff09;、参数坐标系&#xff08;Parametric Coo…

国内教育科技公司自研大语言模型

好未来的数学大模型九章大模型&#xff08;MathGPT&#xff09; 2023年8月下旬&#xff0c;在好未来20周年直播活动中&#xff0c;好未来公司CTO田密宣布好未来自研的数学领域千亿级大模型MathGPT正式上线并开启公测。根据九章大模型的官网介绍&#xff0c;九章大模型&#xff…

如何使用allure生成测试报告

第一步下载安装JDK1.8&#xff0c;参考链接JDK1.8下载、安装和环境配置教程-CSDN博客 第二步配置allure环境&#xff0c;参考链接allure的安装和使用(windows环境)_allure windows-CSDN博客 第三步&#xff1a; 第四步&#xff1a; pytest 查看目前运行的测试用例有无错误 …