书生·浦语大模型实战训练营第二期第四节--Xtuner微调LLM--notebook

XTuner微调LLM课程笔记

一、Finetune简介

1.为什么模型要做微调?

现在其实大部分的大模型应该叫做“基座模型”,也就是基于普遍性的任务去进行与训练的,所以如果想让它落地在特定的下游领域中,它的表现必然是不如在领域内训练的模型,所以现在最好的方式就是对大模型进行一个领域内知识的微调。

比如上一期学生的,中医药助手,食神等等。

2.一般有两种finetune范式

增量预训练微调:增量预训练是一种训练策略,它允许模型在已有的知识基础上不断学习和改进。在QLoRA中,增量预训练意味着模型会在原始预训练数据的基础上,不断添加新的数据并重新进行训练。这样可以不断提高模型的泛化能力,使其更好地适应各种任务。

指令微调:指令微调则是针对特定任务对模型进行微调的过程。在QLoRA中,指令微调基于明确的微调指令对模型进行微调,使得模型更加专注于特定任务的实现。

增量预训练单纯拓展知识库,对语料进行拟合学习,但是你如果问他问题,他不一定能回答你,而是根据你的问题进行拟合回答哈哈哈哈;而指令微调就是通过对话对来进行微调训练的,所以你问他问题之后,他才能很好的回答你(毕竟调教过怎么回)

简单来说:一个是丢知识拓展知识库,一个是用高质量对话和回答数据用于训练特定的任务

下面这图就是表示这两者的区别:上面就是单纯预训练模型或者单纯增量预训练的模型的问答下面是指令微调的问答

3.关于数据集的建立处理

这就是标准的格式数据,有输入有输出

其实每个基底模型的对话模板都不一样,这个要看各个大模型开发单位自己的想法,比如LlaMa2和InternLM就不太一样,自己可以看到;这玩意就是为了让LLM区分出system/User/Assistant; 关于system/users/assistant的详细内容详见https://zhuanlan.zhihu.com/p/682606003

这里就简单介绍一下system:大部分LLM模型的系统指令System message的权重强化高于人工输入的prompt,并在多轮对话中保持稳定,您可以使用系统消息来描述助手的个性,定义模型应该回答和不应该回答的内容,以及定义模型响应的格式。

对话模板的作用:其实核心就是为了让模型认识这个数据,认识我的输入是什么,认识它应该学哪个输出。

这就是指令微调与增量预训练微调的本质区别了:增量预训练根本就不区分input和output,直接拟合整个增量数据,计算整个增量数据的loss,所以你问他问题的时候他可能有时候直接就是拟合你的问题这句语料输出一个相似的话;而指令微调是input/output对话对进行训练,模型只学会output,训练时只会对output的数据计算loss,这样当模型推理时,就能根据input输出符和这个input的output

3.微调方案LoRA和QLoRA介绍

简单来说:LORA其实就是通过在大模型原有的linear周围,新增几个小的linear(Adapter);Adapter的参数量远小于原本的linear,这样就能大幅降低计算成本的前提下微调这个大模型。其实就是套了一层壳咯,然后再与原模型整合一下不就好了嘿嘿嘿;(主要还是因为要是对整个模型进行调参,参数量太大了,成本太高)

3.1 Full Finetuning VS LoRA VS QLoRA(非常重要!)

这张图已经挺清晰哈,

1.Full Finetuning很显然就是要全部加载base model然后又全部加载参数 然后优化参数 又全部加载/

2.LoRA就是全部加载base model然后优化的时候只有新加入的Adapter部分更新参数并加载/

3.QLoRA就更离谱了,加载base model的时候直接4bit量化了卧槽 更加小了 然后还是只优化Adapter层的参数 而且优化器还是使用的分页优化器,可以在CPU和GPU之间相互转移(offload),具体见此文章https://zhuanlan.zhihu.com/p/654356333

二.正式介绍XTuner

1.XTuner的优越性和特点

1.1 XTuner特点

你自己也实战过,大概也都知道这玩意的方便性;主要就是把模型微调的整个步骤集成为一个个命令;而且还自带模型的配置文件,自己根据微调范式改改就好,还自带优化加速消费级显卡也能干!(总结一下,打包带走,开箱即用,高效便捷!)

还不错还不错

1.2 性能对比:

这就是说XTuner对模型微调过程中的性能优化和显存优化很好,显存占用不多,不容易 Out of the memory

1.3 开箱即用,一键打包带走:

挑选配置文件+拷贝配置文件

原来那个配置文件的命名是这个意思吼

模型的基本参数介绍(咱已经写在源码注释里啦) 

访问部署模型与之对话

2. XTuner数据引擎!

Xtuner数据引擎,自动帮你处理原始语料,变成格式化问答对,再变成可训练语料用于模型训练

针对不同的base model Xtuner集成了对应的数据处理引擎,开发者一键调用就好;这样的话大家就可以把精力放在珍贵的原始数据内容的收集上,不用花费精力去处理它啦!太酷啦太酷啦!!!

这就是那个参数(多数据样本拼接!)充分利用GPU的显存啦

3. XTuner的两个优化技巧:Flash Attention和DeepSpeed ZeRo

Flash Attention默认开启,主要看看DeepSpeed ZeRO:这个的话在实战部分的blog已经详细说明 详见:书生·浦语大模型实战训练营第二期第四节--Xtuner微调LLM--notebook-CSDN博客

XTuner直接集成这个优化技巧,一键命令开启 (酷毙了!)

原来InternLM2-chat-1.8B也是基于InternLM2-1.8B基础模型微调而来的chat模型(哈哈哈哈哈,现在可能才知道为什么说,大模型一开源,就可以开始换汤不换药,可以微调建立自己领域的大模型了嘿嘿)

三、基于LLaVA方案------微调多模态LLM

1.多模态LLM其实就是解决输入文本/图像的问题咯,一个是文本的embedding模型一个是image Projector训练好这两个玩意,就能转为模型能识别的向量,就可以训练多模态LLM啦

2.训练多模态LLM的方案:LLaVA

大佬说不能简单说LLaVA模型就是:文本单模态模型LLM+训练出来的Image Projector 但是你就大概这样理解就好

原理大致如下图:自己看图就能很好理解,大概分为两个阶段:训练阶段是结合单模态文本LLM和文本图像问答对训练数据进行训练得到“眼睛”image projector(拆开细分来看,这个具体的流程在后面的一节)测试阶段就是将这个眼睛整合到原来的单模态文本LLM就可以变成多模态LLM

3.对比LLaVA和LoRA

对比一下LLaVA和LoRA的基本逻辑其实挺像的:都是在已用的LLM基础上用新的数据添加一个小的玩意加上去,从而实现额外的功能

LLM套上image projector后,装上一双眼睛(多模态LLM)

LLM套上了LoRA后,有了一个新的灵魂(基于特定领域知识的角色)

4.训练Image Projector流程

这个流程就是分为两个阶段嘛:增量预训练+指令微调

Pretrained: 先就是利用文本单模态LLM引入大量的图像及其简单的图像描述(也就是大量的基本知识,就是质量不太好,而且不是对话数据)先预训练一个model;

Finetuned: 然后再引入高质量的图像+复杂对话文本对这个预训练model进行微调,成为image projector;

---------------------------------------------------------------------------------------------------------------------------------

上面就已经训练完了image projector!!!!!!

然后把这个image projector 整合到原来的模型 就相当于加入了一个能解决图像处理的能力咯(adpater),那就变成了多模态LLM

这整个流程,叫做LLaVA方案!如下图!上面这节就是下图左边的LLaVA训练阶段啦!

然后这就是这节课的理论笔记了,下面的基于XTuner的单模态LLM微调基于LLaVA的多模态LLM微调实战环节,请详见我的下一篇博客! 

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

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

相关文章

【devops】 阿里云挂载云盘 | 扩展系统硬盘 | 不重启服务器增加硬盘容量

扩容分区和文件系统(Linux) 文档地址 https://help.aliyun.com/zh/ecs/user-guide/extend-the-partitions-and-file-systems-of-disks-on-a-linux-instance?spm5176.smartservice_service_robot_chat_new.help.dexternal.4ac4f625Ol66kL#50541782adxmp…

Go 之 sync.Mutex 加锁失效现象

我先声明一下,并不是真的加锁失效,而是我之前的理解有误,导致看起来像是加锁失效一样。于是乎记录一下,加深一下印象。 我之前有个理解误区(不知道大家有没有,有的话赶紧纠正一下——其实也是因为我这块的…

【在线OJ系统】自定义注解实现分布式ID无感自增

实现思路 首先自定义参数注解,然后根据AOP思想,找到该注解作用的切点,也就是mapper层对于mapper层的接口在执行前都会执行该aop操作:获取到对于的方法对象,根据方法对象获取参数列表,根据参数列表判断某个…

html接入高德地图

1.申请key key申请地址&#xff1a;https://console.amap.com/dev/key/app 官方文档 https://lbs.amap.com/api/javascript-api-v2/summary 2.html接入示例 需要将YOUR_KEY替换成自己的key <!doctype html> <html> <head><meta charset"utf-…

IDEA 安装、基本使用、创建项目

文章目录 下载基本使用修改颜色主题Keymap插件 创建项目创建模块新建 Java 类运行新建 Package打包 Jar运行 jar 包 查看文档 下载 官方下载地址&#xff1a;https://www.jetbrains.com/zh-cn/idea/download/?sectionmac 这里我下载 macOS 社区版&#xff0c;IDEA 2024.1 (C…

arcgis中坡向计算工作原理说明

用于识别出从每个像元到其相邻像元方向上值的变化率最大的下坡方向。坡向可以被视为坡度方向。输出栅格中各像元的值可指示出各像元位置处表面的朝向的罗盘方向。将按照顺时针方向进行测量&#xff0c;角度范围介于 0&#xff08;正北&#xff09;到 360&#xff08;仍是正北&a…

Windows 安装 A UDP/TCP Assistant 网络调试助手

Windows 安装 A UDP/TCP Assistant 网络调试助手 0. 引言1. 下载地址2. 安装和使用 0. 引言 需要调试一个实时在线聊天程序&#xff0c;安装一个UDP/TCP Assistant 网络调试助手&#xff0c;方便调试。 1. 下载地址 https://github.com/busyluo/NetAssistant/releases 2. 安…

Jsp 中的getServletContext全局数据共享

servletContext作用于不同用户之上 1. 一个用户将数据保存到了servletContext中, // getcontext的servlet程序 Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context this.get…

考察自动化立体库应注意的几点

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 整版PPT和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载 考察自动化立体仓库的关键因素&#xff1a; 仓库容量&#x…

windows11 wsl2 ubuntu20.04安装vision mamba并进行测试

windows11 wsl2 ubuntu20.04安装vision mamba 安装流程使用cifar-100测试安装成功 安装流程 vision mamba安装了半天才跑通&#xff0c;记录一下流程在wsl上安装cuda wget https://developer.download.nvidia.cn/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05…

[论文笔记]Root Mean Square Layer Normalization

引言 今天带来论文Root Mean Square Layer Normalization的笔记&#xff0c;论文题目是均方根层归一化。 本篇工作提出了RMSNorm&#xff0c;认为可以省略重新居中步骤。 简介 层归一化对Transformer等模型非常重要&#xff0c;它可以帮助稳定训练并提升模型收敛性&#xf…

NVM下载、NVM配置、NVM常用命令

NVM(nodejs版本管理切换工具)下载、配置、常用命令 0、NVM常用命令 nvm off // 禁用node.js版本管理(不卸载任何东西) nvm on // 启用node.js版本管理 nvm install <version> // 安装node.js的命名 version是版本号 例…

发布!DolphinDB 白皮书正式上线官网!

对广大数据库用户而言&#xff0c;白皮书是极具参考价值的使用指南和学习手册。白皮书不但能深入剖析数据库的基础概念与架构&#xff0c;协助用户了解数据库的工作原理和应用技巧&#xff0c;更提供了丰富的实践案例&#xff0c;帮助用户从中汲取经验&#xff0c;避免在实际应…

【JAVA基础篇教学】第十一篇:Java中字符串操作详解

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十篇&#xff1a;Java中字符串操作详解。 在 Java 编程中&#xff0c;字符串是一种常见的数据类型&#xff0c;通常用于存储文本信息。Java 提供了丰富的字符串操作方法&#xff0c;可以对字符串进行分割、截取、查找…

【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用(图文并茂超详细介绍)

往期回顾 【QT入门】Qt自定义控件与样式设计之自定义QLineEdit实现搜索编辑框-CSDN博客 【QT入门】Qt自定义控件与样式设计之自定义QTabWidget实现tab在左&#xff0c;文本水平的效果-CSDN博客【QT进阶】Qt Web混合编程之CEF、QCefView简单介绍-CSDN博客 【QT进阶】Qt Web混合编…

文件msvcr120.dll丢失怎样修复?这三种方法能准确修复msvcr120.dll

小编为大家总结了解决msvcr120.dll文件缺失问题的三种方法&#xff0c;以帮助你快速解决这一难题。首先&#xff0c;我们来看看msvcr120.dll文件为何会出现丢失的情形。 一.msvcr120.dll丢失问题的常见原因包括 病毒感染&#xff1a;病毒或恶意软件侵入电脑有可能会损毁或删除…

【第1节】书生·浦语大模型全链路开源开放体系

目录 1 简介2 内容&#xff08;1&#xff09;书生浦语大模型发展历程&#xff08;2&#xff09;体系&#xff08;3&#xff09;亮点&#xff08;4&#xff09;全链路体系构建a.数据b 预训练c 微调d 评测e.模型部署f.agent 智能体 3 相关论文解读4 ref 1 简介 书生浦语 InternLM…

.net9 AOT编绎生成标准DLL,输出API函数教程-中国首创

1&#xff0c;安装VS2022预览版&#xff08;Visual Studio Preview&#xff09; https://visualstudio.microsoft.com/zh-hans/vs/preview/#download-preview 2&#xff0c;选择安装组件&#xff1a;使用C的桌面开发 和 .NET桌面开发 ------------------------------------- …

SnapGene Mac激活版 分子生物学软件

SnapGene Mac是一款功能全面、操作便捷的综合性分子生物学软件&#xff0c;专为Mac用户打造。它集成了DNA序列编辑、分析、可视化和团队协作等多种功能&#xff0c;为科研人员提供了一个高效、可靠的分子生物学研究工具。 SnapGene Mac激活版下载 在SnapGene Mac中&#xff0c;…

批量插入10w数据方法对比

环境准备(mysql5.7) CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 唯一id,user_id bigint(10) DEFAULT NULL COMMENT 用户id-uuid,user_name varchar(100) NOT NULL COMMENT 用户名,user_age bigint(10) DEFAULT NULL COMMENT 用户年龄,create_time time…