在矩池云使用 ChatGLM2-6B ptuning

news2024/11/23 3:42:39

本文参考 ChatGLM2-6B 官方文档,在矩池云复现了对于 ChatGLM2-6B 模型基于 P-Tuning v2 的微调。P-Tuning v2 将需要微调的参数量减少到原来的 0.1%,再通过模型量化、Gradient Checkpoint 等方法,最低只需要 7GB 显存即可运行。

官方文档地址:https://github.com/THUDM/ChatGLM2-6B/tree/main/ptuning

下面以 ADGEN (广告生成) 数据集为例介绍代码的使用方法。

租用机器

我们所使用的环境是矩池云 ChatGLM2-6B 环境,该环境预装好了运行 ChatGLM2-6B 需要的 Python 依赖,并包含了 ChatGLM2-6B 文件。

租用机器的时候还可以在高级选项-自定义端口里添加2个自定义端口:

  • 7860 用于部署 web 服务,测试训练模型效果
  • 6006 用于部署 tensorboard 服务,查看训练可视化日志

配置依赖和数据集

机器启动成功后,我们点击租用页面 Jupyterlab 点击打开

在 Jupyterlab 新建一个 Terminal,然后执行下面指令安装训练需要的依赖。

cd /ChatGLM2-6B/ptuning
pip install rouge_chinese nltk jieba datasets

然后输入下面指令下载并解压测试数据 AdvertiseGen 。

wget https://cloud.tsinghua.edu.cn/seafhttp/files/bf53f70f-c8b6-4304-9e07-2791d522e0f8/AdvertiseGen.tar.gz
tar -xzvf AdvertiseGen.tar.gz 

开始训练

打开/ChatGLM2-6B/ptuning/train.sh文件,因为我们租用的是2卡 A30,所以将NUM_GPUS设置成2即可,其余路径默认设置即可。(数据集路径是官方代码设置好的,使用AdvertiseGen数据集时不需要修改,使用自己数据集请改成对应数据集目录)

另外模型目录需要从THUDM/chatglm2-6b改为 /ChatGLM2-6B/THUDM/chatglm2-6b

更多参数可以查看官方文档介绍:

官方文档地址:https://github.com/THUDM/ChatGLM2-6B/tree/main/ptuning

再回到 Terminal 输入以下指令开始训练:

# 注意,此时你在 /ChatGLM2-6B/ptuning 目录下
# 如果不在,请先运行 cd /ChatGLM2-6B/ptuning 进入对应目录
nohup bash train.sh > train.log 2>&1 &

输入上面指令挂后台训练后,即使本地网络波动也不会影响程序运行,在 Terminal 里输入tail -f train.log即可看到程序运行日志,正常训练~

tail -f train.log

训练时显存占用和GPU利用率情况。

watch -n 0.5 nvidia-smi

查看训练数据

训练完成后,所有输出会存放在/ChatGLM2-6B/ptuning/output目录下,包括训练保存的模型和运行日志、其他结果数据。

我们可以使用 tensorboard 查看日志可视化图,在 Terminal 输入下面指令即可开启 tensorboard 。

# 注意,此时你在 /ChatGLM2-6B/ptuning 目录下
# 如果不在,请先运行 cd /ChatGLM2-6B/ptuning 进入对应目录
tensorboard --logdir ./output/adgen-chatglm2-6b-pt-128-2e-2/runs --bind_all

tensorboard 启动成功后,再访问租用页面 6006 端口链接即可查看 tensorboard 可视化结果了。

  • 点击打开页面

  • 看训练数据可视化图

模型部署

官方提供了一个脚本web_demo.sh,我们打开这个文件,只需要修改下model_name_or_pathptuning_checkpoint即可。

  • model_name_or_path 值改成 /ChatGLM2-6B/THUDM/chatglm2-6b
  • ptuning_checkpoint 值改成你自己微调保存模型路径

为了能公网正常访问,还需要改下web_demo.py,将该文件162行代码改为:

    demo.queue().launch(server_name="0.0.0.0", share=False, inbrowser=False)

然后在 Terminal 里运行以下指令启动服务。

# 注意,此时你在 /ChatGLM2-6B/ptuning 目录下
# 如果不在,请先运行 cd /ChatGLM2-6B/ptuning 进入对应目录
bash web_demo.sh

启动成功后,再访问租用页面 7869 端口链接即可访问模型服务了,测试结果如下:

  • 点击打开页面

  • 测试训练效果

微调自己的数据集

首先需要在/ChatGLM2-6B/ptuning下新建一个目录用于存放训练用的数据,如果你数据已经上传到了矩池云网盘也可以不创建,train.sh 里路径直接指定你网盘路径即可,服务器内网盘对应/mnt目录。

训练需要两个数据集,一个 train.json 训练用,一个 dev.json 验证用。

注意数据格式,每一行是一个字典,键和键值都必须使用"(双引号)包裹,不能使用单引号,不然数据读取会出错。

{"content": "你的问题", "summary": "问题答案"}

数据集都准备好,接下来就是修改train.sh,主要修改以下几个参数,其他大家可以根据需要修改:

  • train_file、validation_file 训练、验证数据集路径,需要改成你自己的,最好写绝对路径
  • output_dir 训练结果输出目录,可以改下,避免覆盖之前训练结果
  • quantization_bit 如果租用机器显存够(大于13g)可以去掉,无量化训练结果更好,对应需要更大显存

再回到 Terminal 输入以下指令开始训练:

# 注意,此时你在 /ChatGLM2-6B/ptuning 目录下
# 如果不在,请先运行 cd /ChatGLM2-6B/ptuning 进入对应目录
nohup bash train.sh > train_me.log 2>&1 &

输入上面指令挂后台训练后,即使本地网络波动也不会影响程序运行,在 Terminal 里输入tail -f train.log即可看到程序运行日志,正常训练~

tail -f train_me.log

训练时显存占用和GPU利用率情况,可以看到无量化模型训练显存占用14g多。

watch -n 0.5 nvidia-smi

训练完成后,可以像前面一样使用 tensorboard查看训练数据 和 部署模型web服务,测试效果如下:

Github 还有很多其他微调项目,欢迎大家评论区交流。

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

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

相关文章

一百五十六、Kettle——Linux上安装的Kettle9.3连接ClickHouse数据库(亲测,附流程截图)

一、目标 kettle9.3在Linux上安装好后,需要与ClickHouse数据库建立连接 二、前提准备 (一)在Linux已经安装好kettle并可以启动kettle (二)已知kettle和ClickHouse版本 1、kettle版本是9.3 2、ClickHouse版本是21…

深度学习优化器

1、什么是优化器 优化器用来寻找模型的最优解。 2、常见优化器 2.1. 批量梯度下降法BGD(Batch Gradient Descent) 2.1.1、BGD表示 BGD 采用整个训练集的数据来计算 cost function 对参数的梯度: 假设要学习训练的模型参数为W,代价函数为J(W),…

项目管理工具探析:详细介绍四种常用选择

市场上的项目管理工具,主要是解决项目计划制定、任务协作、文档协作这几方面的问题, 下面简单聊聊一些自己用过的工具: 1、Excel/在线协作表格 如果项目简单,任务数少,没什么依赖,那么就可以用Excel来做项目…

静电放电发生器的操控模式和释放模式有哪些方式

静电放电是一种自然现象 ,当两种不同介电强度的材料相互摩擦时,就会产生静电电荷,当其中一种材料上的静电荷积累到一定程度,在与另外一个物体接触时,就会通过这个物体到大地的阻抗而进行放电。静电放电及影响是电子设备…

四大运营商的大流量卡测评,看完您会选哪个运营商?

很多朋友都说网上的流量卡资费是真的便宜,但是小编认为资费便宜归便宜,但是运营商的小心思也有不少。 ​ 今天小编就带大家看一看三大运营商推出的正规流量卡都有哪些小心思? 首先,移动推出的线上大流量卡数量是最少的&#xff…

算法|Day37 动态规划5

LeetCode 1049- 最后一块石头的重量 II 题目链接:力扣 题目描述:有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量…

Blazor : Component parameter should be auto property,无法修改get;set;

文章目录 Blazor 无法在get;set;里面定义方法 Blazor 无法在get;set;里面定义方法 Blazor Component组件 其实原因就是微软觉得你在get;set;里面放自定义逻辑,太容易出现无限父子回调的问题。如果你要在get时候进行某种逻辑,那你就在OnParameterSetAs…

归并排序 与 计数排序

目录 1.归并排序 1.1 递归实现归并排序: 1.2 非递归实现归并排序 1.3 归并排序的特性总结: 1.4 外部排序 2.计数排序 2.1 操作步骤: 2.2 计数排序的特性总结: 3. 7种常见比较排序比较 1.归并排序 基本思想: 归并排序(MERGE-SORT)是建立在归并操作上的一种…

Qgis统计面要素内点的数量,不同类型点的数量

简单: 统计面要素内点的数量。 工具栏直接搜索:统计点在多边形中的数量 统计面要素内不同类型点的数量。 查看QGIS-11 “按位置连接属性工具”——“按类别统计工具”——pandas透视表统计 数据透视表参考链接 参考链接: QGIS入门-9 统计面…

leetcode375. 猜数字大小 II(动态规划-java)

猜数字大小 II lc - 375 猜数字大小 II题目描述暴力递归 记忆化搜索代码演示动态规划 动态规划 lc - 375 猜数字大小 II 题目描述 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字&…

开学季 | 新生入学必备好物,快来看看你漏掉了哪些!

一转眼年就过完了,又到了开学季。有很多学生又要重新走进校园,开始自己的学生宿舍生活。作为一个从初中就开始住宿舍的过来人,有一些东西确实是我当时在学校里用过的,非常好用的神器,可以非常好的帮助我们生活、学习或…

界面组件DevExpress Reporting——支持图表本地化和可绑定属性

DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。 在最近的更新(v23.1)中,官方扩展了…

无脑入门pytorch系列(三)—— nn.Linear

本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…

智能设备管理系统对企业设备管理效果有作用吗?

智能设备管理系统对企业设备管理效果具有显著的作用和积极的影响。它可以提高设备管理的效率、准确性和可靠性,帮助企业降低运营成本、提高生产效率,并为企业提供更好的决策支持。以下是智能设备管理系统对企业设备管理效果的几个方面影响: …

手机图片怎么转换成pdf?这几个转换方法看看

手机图片怎么转换成pdf?如果你在手机上需要将一些图片转换成PDF文件,将图片转为PDF文档有多种优点。首先,PDF格式是一种通用的文件格式,可以在几乎所有设备上进行查看和打印,而且保留了原始文件的格式和布局。其次&…

为什么很多人认为ChatGPT最好的替代工具是Claude?

ChatGPT引领着生成式AI聊天机器人领域,但Claude AI看起来是一个有力的竞争者。 前段时间,ChatGPT的强劲竞争对手Claude2面世。当时很多人认为它可能会取代ChatGPT,在体验过一段时间之后,深以为然。原因如下: 更强大的…

使用vscode进行远程调试

官方调试手册:vscode官方调试手册 1.安装python扩展 如果是远程连接的话,一定要在ssh上启用扩展。不然创建基于python的配置文件时就会提示,无python扩展。 2.新建配置文件,并修改参数 点击左侧第四个按钮,运行与调试…

一、Dubbo 简介与架构

一、Dubbo 简介与架构 1.1 应用架构演进过程 单体应用:JEE、MVC分布式应用:SOA、微服务化 1.2 Dubbo 简介一种分布式 RPC 框架,对专业知识(序列化/反序列化、网络、多线程、设计模式、性能优化等)进行了更高层的抽象和…

“new出对象“原理的深层解密

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 &#x1f…

网络安全(自学)

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…