【书生·浦语】大模型实战营——第四课笔记

news2024/9/24 20:25:38

教程链接:https://github.com/InternLM/tutorial/blob/main/xtuner/README.md
视频链接:https://www.bilibili.com/video/BV1yK4y1B75J/?vd_source=5d94ee72ede352cb2dfc19e4694f7622
本次视频的内容分为以下四部分:
在这里插入图片描述
目录

微调简介

在这里插入图片描述
微调会使LLM在具体的领域中输出更好的回答。有两种微调模式:
1、增量预训练微调:学会垂类领域的常识(只需要回答
2、指令跟随微调:学会对话模板(一问一答
场景与所需的训练数据不一样。

实际对话时,通常会存在三种角色:
1、System:要求系统担任一个具体的角色
2、User:用户进行提问
3、Assistant:根据user输入,结合system上下文,做出回答
这些机械性的工作已经用xtuner打包好了,一键启动即可。

指令跟随微调时,不同的对话模板

在这里插入图片描述
不同的模型在微调时的数据会使用不同的prompt模板。
比如LlaMa2,会用sys的块来表示system内容,INST的块来表示User指令部分。而InternLM的模板则有五个。
而在部署时,system部分是由模板自动添加的,用户的输入则放入user部分,而system部分使用的模板可以自行更改。

增量预训练微调

在这里插入图片描述
只需要计算assistant部分的损失

微调原理

在这里插入图片描述原来的大模型权重参数主要集中于linear中,这个linear形状非常大,如果对其进行微调,那么所需的显存非常高,训练非常贵。
lora是在原来的linear旁边加了一个支路(由两个小的linear组成),通常叫作Adapter
微调时只对Adapter进行训练,而预训练的权重冻住,就能降低很多显存占用。

全参数微调、LoRA、QLoRA对比
QLoRA是加载模型时使用4bit量化的方式进行加载。
正常模型训练时一般都是使用float32,相当于降低了精度。降低了表达精度,自然能力会下降些。

XTuner微调框架

在这里插入图片描述
简介图片就不介绍了。
在这里插入图片描述
xtuner数据引擎弄了很多个数据集的映射函数,方便开发者多关注模型,不用费心处理数据格式。
在这里插入图片描述
当显卡显存更大时,当然要尽可能利用显卡的资源,增加其并行性。这里xtuner可以做多样本的数据拼接,一下子输入好几个数据,占满显存,提升效率。

8GB显存玩转LLM

Flash Attention和DeepSpeed ZeRO是xtuner最重要的两个优化技巧。
在这里插入图片描述

在这里插入图片描述

动手实战环节

ssh连接开发机后敲bash进入环境。
在这里插入图片描述

创建环境与激活

敲入以下命令,新建一个conda环境,这个环境叫xtuner0.1.9

conda create --name xtuner0.1.9 python=3.10 -y

在这里插入图片描述
键入以下命令,进入环境

conda activate xtuner0.1.9

在这里插入图片描述

安装xtuner源码

在这里插入图片描述
在这里插入图片描述
下载过程会有点久,需要耐心等待。
下载完成后,创建一个微调 oasst1 数据集的工作路径,进入

mkdir ~/ft-oasst1 && cd ~/ft-oasst1

微调

准备配置文件

xtuner list-cfg

可以列出所有内置的配置文件。如下图所示
在这里插入图片描述
其中,每个字符串的含义如下:
第一个字符串代表是哪个大模型,如baichuan2
第二个字符串代表模型参数,如13B
第三个字符串代表模型类型,如base基座模型或chat聊天模型
第四个字符串代表微调算法,使用lora还是qlora还是全参数微调
第五个字符串代表在哪个数据集上微调,如alpaca
第六个字符串代表跑几个epoch

在这里插入图片描述
通过xtuner的copy-cfg命令拷贝一个配置文件到指定目录中,是internlm7b,用qlora微调,在oasst1数据集上微调,跑3个epoch
这个过程会比较久,要等一两分钟。

模型下载

用教学平台的同学直接从目录中进行复制
在这里插入图片描述

数据集下载

本身数据集在hugging face上,平台已经提前下载好放到share目录里了。直接拷贝即可。
在这里插入图片描述

修改配置文件

修改配置文件py里的预训练模型路径和数据路径。
在这里插入图片描述
再改epoch参数为1
在这里插入图片描述
常用的超参对应的意义
在这里插入图片描述
其中max_length和batch_size可以调整所占用的显卡资源。

开始微调

使用以下命令进行微调:

xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py

在这里插入图片描述
其中的warning信息不用理。
在这里插入图片描述
上图的loading shards指的是加载基座模型的过程。

接下来在准备数据集。
在这里插入图片描述
可以看到下图中有个map。Map操作就是将数据集映射到标准训练格式,User,System啥的
在这里插入图片描述
看到这个Epoch(train)就说明微调已经开始了。其中eta是剩余的训练时间。这里看到是4:21:51,要接近4个半小时。
在这里插入图片描述
此时按Ctrl+C,终止微调过程。我们发现,微调时会多出一个目录叫work_dirs,存储微调时的日志文件。
在这里插入图片描述
在进行下一次训练时,最好先删除上次的工作路径。

在这里插入图片描述
加上deepspeed参数来加速训练。我们可以从下图看到,加速后的微调预计的剩余时间直接减少了三倍多,变成1:16:44了。可见deepspeed加速训练的效果。
在这里插入图片描述
为了保持训练不被中断,引入tmux这个库,引入守护进程。
在这里插入图片描述
在这里插入图片描述
使用tmux创建一个会话,命令如下

tmux new -s finetune

这个时候进入了一个全新的界面,此时属于一个tmux session中,这个session叫finetune
在这里插入图片描述
此时按Ctrl+B手指松开再按D就可以推出tmux的窗口。
如何重新进入这个session呢?输入tmux attach -t finetune命令即可。
在这里插入图片描述
此时再输入训练命令(带deepspeed参数的),就不怕训练被打断了。

xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py --deepspeed deepspeed_zero2

此时可以随便进入、退出这个tmux窗口。
一个小时后见!
好的,睡得有点迷糊,感觉睡晕过去了。
tmux窗口中看到类似这样的输出,就算训练成功了。
在这里插入图片描述

查看微调后的目录文件

在这里插入图片描述
从目录中可以看到一个pth结尾的文件,pth通常是模型参数文件的后缀,因为只训练了一个epoch,所以这里只有一个epoch_1的模型文件。

还可以进入以日期命名的目录,这里存放了日志文件,可以cat进行查看。
在这里插入图片描述

将得到的pth模型文件转换为hugging face的lora模型

在这里插入图片描述
当看到All done! 时,说明转换已经成功。
在这里插入图片描述
这个adapter_model.safetensors就是hugging face的lora模型。
在这里插入图片描述

部署与测试

将huggingface adapter合并到大语言模型

敲入以下命令并耐心等待,看到All Done,即转换成功。
在这里插入图片描述
可以查看merged目录(合并后的目录)有的文件
在这里插入图片描述

与合并后的模型进行对话

敲以下命令并耐心等待
在这里插入图片描述
当看见double enter to end input,就可以开始对话了。输完问题后,需要敲两次回车才能开始回复。
在这里插入图片描述
从资源监控我们可以看到,占用了17G的显存。
在这里插入图片描述

这里可以载入4bit量化后的模型,看看差异。
在这里插入图片描述
实际运行时,可以看到4bit量化的模型,回答速度非常快。
在这里插入图片描述

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

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

相关文章

YOLOv5涨点改进:多层次特征融合(SDI),小目标涨点明显,| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文全网独家改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标的识别率 💡💡💡在YOLOv5中如何使用 1)iAFF加入Neck替代Concat; 💡💡💡Yolov5/Yolov7魔术师,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文…

灰色关联度分析详细Stata代码和说明(代码+案例数据+说明)

灰色关联度分析详细Stata代码和说明(代码案例数据说明) 因素分析的基本方法过去采用的主要是统计的方法,如回归分析,回归分析虽然是一种较通用的方法,但大都只用于少因素的、线性的。 对于多因素的,非线性…

漏洞分析|Cacti命令执行漏洞 (CVE-2022-46169)

1.漏洞描述 Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具,可为用户提供强大且可扩展的操作监控和故障管理框架。 该漏洞存在于remote_agent.php文件中,未经身份验证的恶意攻击者可以通过设置HTTP_变量…

HTML--表格

表格的基本结构 表格标题&#xff1a;caption 表格&#xff1a;table标签 行&#xff1a; tr标签 单元格&#xff1a;td标签 语法&#xff1a; <!DOCTYPE html> <html> <head> <title>这是一个标题</title><meta charset"utf-8"/&…

【LeetCode】19. 删除链表的倒数第 N 个结点(中等)——代码随想录算法训练营Day04

题目链接&#xff1a;19. 删除链表的倒数第 N 个结点 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&a…

Python 二维平面Delaunay三角网建立

目录 一、算法概念二、代码实现三、结果示例根据二维平面内的离散点建立平面三角网。 一、算法概念 三角剖分与Delaunay剖分定义:如何把一个散点集剖分成不均匀的三角形网格,即在给定的平面点集上,生成三角形集合的过程。考虑平面点集P={p1,p2,p3,…,pn},我们希望得到三…

ROS无人机开发常见错误

飞控部分 一、解锁时飞控不闪红灯&#xff0c;无任何反应&#xff0c;地面站也无报错 解决办法&#xff1a; 打开地面站的遥控器一栏 首先检查右下角Channel Monitor是否有识别出遥控各通道的值&#xff0c;如果没有&#xff0c;检查遥控器是否打开&#xff0c;遥控器和接收…

C++学习笔记——私有继承、多重继承、类模板

目录 一、私有继承 二、多重继承 三、类模板 四、一个使用私有继承的示例代码 4.1代码 4.2输出结果 五、多重继承案列 六、类模板案例 C中的继承和模板是非常强大和灵活的特性&#xff0c;它们可以帮助我们实现代码复用、抽象和泛化等目标。本文将着重介绍私有继承、多…

如何公网远程访问Linux AMH服务器管理面板【内网穿透】

⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 文章目录 ⛳️ 推荐1. Linux 安装AMH 面板2. 本地访问AMH 面板3. Linux安装Cpolar4. 配置AMH面板公网地址5. 远程访问AMH面板6…

RibbonGroup添加QLabel

RibbonGroup添加 QLabel&#xff1a; QLabel *pLabel new QLabel(tr("Label:QLabel Sample")); pLabel->setToolTip(tr("Label")); groupClipboard->addWidget(pLabel); 添加文本&#xff1a;

nodejs+vue+ElementUi音乐分享社交网站77l8j

本文介绍的系统主要分为两个部分&#xff1a;一是前台界面&#xff1a;用户通过注册登录可以实现音乐播放、新闻浏览、留言评论等功能&#xff1b;另一个是后台界面&#xff1a;音乐网站管理员对用户信息进行管理&#xff0c;上传更新音乐资源&#xff0c;发布最新音乐资讯等功…

测试工程师能否作为一份「终身职业」?30岁+怎么办?

【讨论】测试工程师可否作为一份终生的职业&#xff1f; 这是我在论坛看到的一个讨论&#xff0c;你的答案是什么呢&#xff1f; 我希望大家能认真思考后给出一个属于自己的答案&#xff0c;无论你是新手入门&#xff0c;还是资深专家。回答这个问题请不要凭一腔热血&#xff…

【SAP】如何删除控制范围

经历就是财富&#xff0c;可你终将遗忘。期望文字打败时间。 本周心惊胆战地在配置系统删除了一个控制范围&#xff0c;还是有些收获&#xff0c;特此记录一下。 背景&#xff1a;在删除控制范围之前&#xff0c;我主要做了如下配置。 定义控制范围&#xff08;自动生成了成本…

Spark---累加器

1.累加器实现原理 累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量&#xff0c;在Executor 端的每个 Task 都会得到这个变量的一份新的副本&#xff0c;每个 task 更新这些副本的值后&#xff0c;传回 Driver 端进行 merge。 //建立与Spark框架…

【MATLAB】逐次变分模态分解SVMD信号分解算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 逐次变分模态分解&#xff08;Sequential Variational Mode Decomposition&#xff0c;简称SVMD&#xff09;是一种用于信号处理和数据分析的方法。它可以将复杂的信号分解为一系列模态函数&#xff0c;每个…

状态图作业

状态图作业 一. 简答题&#xff08;共7题&#xff0c;100分&#xff09; (简答题) 什么是状态&#xff0c;对象的状态和对象的属性有什么区别&#xff1f; 正确答案&#xff1a; 状态是指在对象生命周期中满足某些条件、 执行某些活动或等待某些事件的一个条件和状 况。属性表…

函数的秘密

1. 函数的概念 在数学中我们学习过函数&#xff0c;而在C语言中其有着与数学不同的概念&#xff1a; 在C语言中&#xff0c;函数是指一组执行特定任务的语句&#xff0c;这些语句可以重复使用&#xff0c;并且可以在程序的不同部分调用。通过使用函数&#xff0c;程序员可以将…

sectigo dv证书适合场景买一年送一月

Sectigo是成立于美国的知名CA认证机构&#xff0c;随着互联网的发展&#xff0c;Sectigo颁发了越来越多的SSL数字证书。这些SSL证书产品不仅可以对网站传输数据进行加密服务&#xff0c;还可以对服务器身份进行认证服务。Sectigo旗下的DV证书产品比较齐全&#xff0c;适用场景也…

腾讯云TDSQL TCA/TCP/TCE 认证考试有什么区别呢?

腾讯云认证等级&#xff1a;专项认证考试&云方向认证考试 一、专项认证考试 数据库交付运维-腾讯云TDSQL认证考试一共分为三个等级&#xff1a; 初级TCA、高级工程师TCP、专家级TCE 1、TDSQL TCA培训(MySQL版/PostgreSQL版)考试安排 TCA考试是纯理论题&#xff0c;总分是…

全新加密叙事,以Solmash为代表的 LaunchPad 平台如何为用户赋能?

铭文市场的火爆带来“Fair Launch”这种全新的代币启动方式&#xff0c;Fair Launch 的特点在于其为所有人参与 Launch 带来了公平的机会&#xff0c;所有链上玩家们都需要通过先到先得的方式 Mint 资产&#xff0c;VC 在 Fair Launch 中几乎没有话语权&#xff0c;不同的投资者…