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

教程链接: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.mzph.cn/news/620001.shtml

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

相关文章

计算机体系结构----存储系统

本文严禁转载,仅供学习使用。参考资料来自中国科学院大学计算机体系结构课程PPT以及《Digital Design and Computer Architecture》、《超标量处理器设计》、同济大学张晨曦教授资料。如有侵权,联系本人修改。 1.1 引言 1.1.1虚拟和物理内存 程序员看到…

【科研技巧】如何判断某个期刊是什么类别及影响因子?是否是顶会?如何期刊内检索?AI写综述?AI做PPT?

相关链接 查找和免费下载文献的方式汇总国内外各大期刊关系、如何查看期刊等级以及查看某篇论文属于哪个期刊登录和访问EI(Engineering Village)数据库查找文献 1 如何判断某个期刊是什么类别及影响因子 https://sci.justscience.cn/ IFold是影响因子 期刊类别为SCIE、查看…

(收藏)数据治理:一文讲透数据安全

数据治理:一文讲透数据安全 数据安全是数据治理的核心内容之一,随着数据治理的深入,我不断的碰到数据安全中的金发姑娘问题(指安全和效率的平衡)。 DAMA说,降低风险和促进业务增长是数据安全活动的主要…

ssm基于JAVA的酒店客房管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本酒店客房管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

IT从业人员如何养生?

目前,电脑对人体生理和心理方面的负面影响已日益受到人们的重视。为此科学使用电脑,减少电脑和网络的危害是十分必要的。好代码网总结了一些it从业人员的保健知识,分享给大家。 一是要增强自我保健意识 工作间隙注意适当休息,一般…

构建中国人自己的私人GPT-有道GPT

创作不易,请大家多鼓励支持。 在现实生活中,很多人的资料是不愿意公布在互联网上的,但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢?于是我们构建自己或公司的私人GPT变得非常重要。 先看效果 一、…

JVM基础(7)——ParNew垃圾回收器

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

【LeetCode:30. 串联所有单词的子串 | 滑动窗口 + 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【踩坑】flask_uploads报错cannot import name ‘secure_filename‘

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 背景说明 截至目前,用新版的flask实现文件上传(用到flask_uploads库),会出现这个问题。 问题原因 版本问题,新的werkzeug已经把secure_filename的位置改了。 解决方法 手动修改…

绘制几何图形(Shape)

目录 1、创建绘制组件 2、形状视口viewport 3、自定义样式 4、场景示例 绘制组件用于在页面绘制图形,Shape组件是绘制组件的父组件,父组件中会描述所有绘制组件均支持的通用属性。具体用法请参考Shape。 1、创建绘制组件 绘制组件可以由以下两种形式…

【Python机器学习】分类器的不确定估计——预测概率

predict_proba的输出是每个类别的概率,通常比decision_function的输出更容易理解,对于二分类问题,它的形状始终是(n_samples,2)。 import mglearn.tools from sklearn.ensemble import GradientBoostingClassifier from sklearn.datasets im…

Vue-16、Vue列表渲染(v-for的使用)

1、vue遍历数组 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>列表渲染</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"…

C#基础-空处理

在c#中&#xff0c;值对象是没有办法赋值为null的。比如说&#xff0c;你想要定义一个布尔值&#xff0c;你的赋值数据要么得是true、要么就得是false&#xff0c;默认情况下我们永远没可能给这个布尔赋值为null&#xff0c;即使只是对这个变量进行声明而不初始化数据&#xff…

不方便拉网线,房间又没Wifi信号?按照这个教程,让你家里每个角落都有网

前言 前段时间去了一个朋友家里&#xff0c;她老是和我叨叨说她家的卧室一点Wifi信号都没有。每次一躺床上都只能用手机流量上网。 家里明明有拉宽带&#xff0c;为什么在某一些地方还是得用自己手机流量&#xff1f;哎&#xff0c;有钱人的痛就是房子太大了。 我问她为啥不多…

【Maven】002-Maven 安装和配置

【Maven】002-Maven 安装和配置 文章目录 【Maven】002-Maven 安装和配置一、官网1、官网2、历史版本列表3、Maven 仓库地址 二、下载 Maven 3.8.8 版本1、进入 Maven 3.8.8 版本发行说明页2、进入下载页3、下载4、下载得到 apache-maven-3.8.8-bin.zip 三、Maven 安装1、将安装…

jenkins环境搭建

jenkins环境搭建 1.环境说明2.环境准备1.jdk安装2.安装Git3.安装sshpass4.安装Maven 3.安装Jenkins(war包方式安装)1.安装2.镜像加速 4.官网提供的yum方式安装5.访问 1.环境说明 keyvalue环境centos7jdk版本11git2.43.0maven3.9.6jenkins最新版本http://mirrors.jenkins-ci.or…

LINUX基础培训六之磁盘和文件系统管理

前言、本章学习目标 掌握fdisk分区类型和管理分区了解parted分区类型掌握LVM模式文件系统创建、扩展、缩小文件系统 一、磁盘的分区管理 在 Linux 中有专门的分区命令 fdisk 和 parted。其中 fdisk 命令较为常用&#xff0c;但不支持大于 2TB 的分区&#xff1b;如果需要支…

C++/WinRT 入门

本主题将会根据新的 Windows 控制台应用程序 (C/WinRT) 项目演练一个简单的代码示例。 C/WinRT 快速入门 创建一个新的 Windows 控制台应用程序(C/WinRT) 项目。 根据实际选择平台 如果出现如下错误&#xff0c;需要安装正确的SDK。 找不到 Windows SDK 版本 10.0.17134.0 (o…

支付功能测试用例测试点?

支付功能测试用例测试点是指在测试支付功能时&#xff0c;需要关注和验证的各个方面。根据不同的支付场景和需求&#xff0c;支付功能测试用例测试点可能有所不同&#xff0c;但一般可以分为以下几类&#xff1a; 功能测试&#xff1a;主要检查支付功能是否符合设计和业务需求…

RTTI结构详细分析(VC++)

对于RTTI结构的资料真的屈指可数,类的逆向也一直是一个不好弄的问题.对此我只想贡献我的一份力量。 文中我不会分析类的内存布局,因为有很多资料已经分析的挺好的了(见参考资料)。但是现有我能找到的资料对RTTI结构的表述不完整,或者表述模糊不清,参考Clang的部分源码后&#…