ptuning v2 的 chatglm垂直领域训练记录

thunlp chatglm 6B是一款基于海量高质量中英文语料训练的面向文本对话场景的语言模型。

THUDM/ChatGLM-6B: ChatGLM-6B:开源双语对话语言模型 | An Open Bilingual Dialogue Language Model (github.com)

国内的一位大佬把chatglm ptuning 的训练改成了多层多卡并行训练的实现

zero_nlp/Chatglm6b_ModelParallel_ptuning at main · yuanzhoulvpi2017/zero_nlp (github.com)

用到了神秘的perf库

希望大家能支持一下我的工作

用我的专用邀请链接,注册 OpenBayes,双方各获得 60 分钟 RTX 3090 使用时长,支持累积,永久有效:

注册 - OpenBayes

通过我的链接注册并充值openbayes平台。

找到了一些中国大百科的一对一对的数据集来ptuning chatglm 6B的对话模型。

添加图片注释,不超过 140 字(可选)

在双卡3080环境中进行了训练后。二十五个小时二十九分钟训练了3000次迭代。多卡分层ptuning的效果感觉并不理想。可能是因为训练的轮次太少了。loss竟然高达4.1447。那我们扩大100倍步数来等一下看看拟合效果。

把我们双3080训练的参数摆出来

 
 

PRE_SEQ_LEN=8 LR=1e-2 CUDA_VISIBLE_DEVICES=0,1 python3 main_parallel.py \ --do_train \ --train_file AdvertiseGen/train.json \ --validation_file AdvertiseGen/dev.json \ --prompt_column content \ --response_column summary \ --overwrite_cache \ --model_name_or_path /root/autodl-tmp/zero_nlp/Chatglm6b_ModelParallel_ptuning/output/adgen-chatglm-6b-pt-8-1e-2/checkpoint-3000 \ --output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \ --overwrite_output_dir \ --max_source_length 256 \ --max_target_length 512 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 16 \ --predict_with_generate \ --max_steps 30000 \ --logging_steps 10 \ --save_steps 2000 \ --learning_rate $LR \ --pre_seq_len $PRE_SEQ_LEN

添加图片注释,不超过 140 字(可选)

双卡3080训练31个小时损失及学习率相关情况截图。

60小时双卡3080训练一万六千步,形成了8个训练节点checkpoint。开始面向最新一轮的展开模型效果测试。

 
 

import os import platform import signal from transformers import AutoTokenizer, AutoModel import json os_name = platform.system() clear_command = 'cls' if os_name == 'Windows' else 'clear' stop_stream = False def build_prompt(history): prompt = "欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序" for query, response in history: prompt += f"\n\n用户:{query}" prompt += f"\n\nChatGLM-6B:{response}" return prompt def signal_handler(signal, frame): global stop_stream stop_stream = True def main(): global stop_stream print("欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序") tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/zero_nlp/Chatglm6b_ModelParallel_ptuning/output/adgen-chatglm-6b-pt-8-1e-2/checkpoint-16000", trust_remote_code=True) model = AutoModel.from_pretrained("/root/autodl-tmp/zero_nlp/Chatglm6b_ModelParallel_ptuning/output/adgen-chatglm-6b-pt-8-1e-2/checkpoint-16000", trust_remote_code=True).quantize(4).half().cuda() model = model.eval() AdvertiseGen = json.load(open("/root/autodl-tmp/zero_nlp/Chatglm6b_ModelParallel_ptuning/AdvertiseGen/dev.json")) for AdvertiseGen_one in AdvertiseGen: history = [] count = 0 response, history = model.chat(tokenizer, AdvertiseGen_one['content'], history=history) print(AdvertiseGen_one) print(response) if __name__ == "__main__": main()

添加图片注释,不超过 140 字(可选)

所以这里面我感觉是因为我的数据集长短分布差异较大导致的问题。于是痛定思痛。决定下一步从两个方向改进,第一输入输出长度设置为64、128。第二我要减小十倍的学习率,观察一下减小十倍的学习率能不能提升ptuning的效果。

在预测推理阶段发生了形状错误问题。 已经解决。本来是想着tokenizer部分要用原来的tockenizer,后来发现换成了训练好的tokenizer之后才不报错。

 
 

import os from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/checkpoint-3000", trust_remote_code=True) model = AutoModel.from_pretrained("/root/autodl-tmp/checkpoint-3000", trust_remote_code=True).half().cuda() model = model.eval()

用这样的方式去加载已经ptuning训练好的模型就可以开始测试我们自己训练的数据集的效果了。

单卡官方原生ptuning训练

单卡A5000 Ptuning V2 chatglm 6B任务基于chatglm 6B官方开源ptuning V2版本代码运行。

在单卡A5000 混合精度训练推理。更改参数 --max_source_length 256 --max_target_length 512,个人感觉输入太短、输出太短,训练出来也没什么意义。所以把source和target的长度拉长到256、512。理论上只要长加起来不超过2048,就不会报错。我们把完整的训练参数show一下

 
 

PRE_SEQ_LEN=4 LR=1e-2 CUDA_VISIBLE_DEVICES=0 python3 main.py \ --do_train \ --train_file ./train.json \ --validation_file ./dev.json \ --prompt_column content \ --response_column summary \ --overwrite_cache \ --model_name_or_path THUDM/chatglm-6b \ --output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR-dev \ --overwrite_output_dir \ --max_source_length 256 \ --max_target_length 512 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 16 \ --predict_with_generate \ --max_steps 30000000 \ --logging_steps 1000 \ --save_steps 10000\ --learning_rate $LR \ --pre_seq_len $PRE_SEQ_LEN \ --quantization_bit 8

那么按照这个参数,模型将会占用A5000多少显存呢?

添加图片注释,不超过 140 字(可选)

显存占用10GB左右。

大家肯定很好奇10000步的时候ptuning V2 在chatglm 6B模型上的表现。

添加图片注释,不超过 140 字(可选)

而结果中的损失依旧让人看起来比较窒息。损失一直降不下去。

2023 04 07 实验

控制语料严格符合输入长度小于128输出长度小于512、学习率1e-3。

添加图片注释,不超过 140 字(可选)

前4000个epoch表现效果如上。依旧不理想。损失竟然变得更大了。

把官方代码通过修改bash为多卡运行。

 
 

PRE_SEQ_LEN=128 LR=2e-2 CUDA_VISIBLE_DEVICES=0,1 python3 main.py \ --do_train \ --train_file AdvertiseGen/train.json \ --validation_file AdvertiseGen/dev.json \ --prompt_column content \ --response_column summary \ --overwrite_cache \ --model_name_or_path THUDM/chatglm-6b \ --output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \ --overwrite_output_dir \ --max_source_length 64 \ --max_target_length 64 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 16 \ --predict_with_generate \ --max_steps 3000 \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate $LR \ --pre_seq_len $PRE_SEQ_LEN \ --quantization_bit 8

添加图片注释,不超过 140 字(可选)

不过目前看如果是简单的将训练代码中的显卡序号添加为多卡。

单卡训练需要两个小时

多卡需要30个小时

单卡两小时训练完,多卡30个小时训练完成。而多卡的显卡利用率竟然是百分之百。所以简单的将模型横向并行在某些设备上是不可取的。

20230408,zero_nlp的多卡分层并行训练目前出现了一些小问题。

痛定思痛,为什么官方的数据集表现得很好,但是我的数据集表现得并不是那么好呢。于是我准备给我的数据集截图看一看到底是哪里出现了问题。

添加图片注释,不超过 140 字(可选)

从中国大百科爬下来的数据,有一些标题的输入是比较短的。那么好,接下来我准备加入数据最短长度的限制。

喜欢大模型的小伙伴可以加我的 15246115202 一起交流训练大模型所需要的细节都有哪些。

目前官方给了三个交互解决方案。基于终端的交互,基于简单界面的交互,基于fastapi框架提供的接口进行交互。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

期刊论文图片代码复现【由图片还原代码】(OriginMatlab)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…

【Golang入门】简介与基本语法学习

下面是一篇关于Golang新手入门的博客,记录一下。(如果有语言基础基本可以1小时入门) 一、什么是Golang? Golang(又称Go)是一种由谷歌公司开发的编程语言。它是一种静态类型、编译型、并发型语言&#xff0…

【JLink仿真器】盗版检测、连接故障、检测不到芯片问题

【JLink仿真器】盗版检测、连接故障、检测不到芯片问题一、问题描述二、解决方法1、降低驱动(解决非法问题以及连接故障)2、SWD引脚被锁(解决检测不到芯片)三、说明一、问题描述 盗版检测:the connected probe appear…

【Linux】网络原理

本篇博客让我们一起来了解一下网络的基本原理 1.网络发展背景 关于网络发展的历史背景这种东西就不多bb了,网上很容易就能找到参考资料,我的专业性欠缺,文章参考意义也不大。这里只做简单说明。 网络发展经过了如下几个模式 独立模式&…

几何算法——4.交线(intersection curve)的表达与参数化、微分性质

几何算法——4.曲面求交的交线(intersection curve)的表达与参数化、微分性质1 关于曲面求交的交线表达2 交线的微分性质3 交线的参数化4 修正弦长参数化的微分性质1 关于曲面求交的交线表达 两个曲面求交,比较经典的方法是用跟踪法&#xf…

【CSS】绝对定位元素设置 水平 / 垂直 居中 ( 绝对定位元素居中设置 - 先偏移 50% 再回退子元素一半尺寸 | 绝对定位居中设置 )

文章目录一、问题提出二、绝对定位 居中设置1、设置固定尺寸2、先偏移50%再回退固定值三、绝对定位元素 水平 / 垂直 居中一、问题提出 绝对定位 不能通过 设置 margin: auto; 样式的方式 , 设置盒子模型水平居中 ; 相对定位 的 盒子模型 , 并没有脱离标准流限制 , 仍然可以使…

2023-数据质量管理方法总结

一、数据质量保障原则 如何评估数据质量的好坏,业界有不同的标准,阿里主要从4个方面进行评估:完整性、准确性、一致性、及时性; 1.完整性 数据完整性是数据最基础的保障; 完整性:指数据的记录和信息是否…

d2l 文本预处理textDataset

这一节极其重要,重要到本来是d2l的内容我也要归到pyhon封面,这里面class的操作很多,让我娓娓道来! 目录 1.要实现的函数 2.读取数据集 3.词元化 4.Vocab类 4.1count_corpus(tokens) 4.2class中的各种self 4.2.1 _token_fr…

KIOPTRIX: LEVEL 4通关详解

环境配置 vulnhub上下载的文件没有vmx 去3的文件里偷一个 记事本打开把所有Kioptrix3_vmware改成Kioptrix4_vmware 然后网卡地址随便改一下 打开后会提示找不到虚拟机,手动选一下就行了 信息收集 漏洞发现 web一上去就是一个登录框 扫路径发现database.sql 但是密码是错的…

Amazon SageMaker简直就是机器学习平台的天花板

一、前言 最近参与了亚马逊云科技【云上探索实验】活动,通过Amazon SageMaker基于Stable Diffusion模型,非常简单快速搭建的第一个AIGC,一开始以为非常复杂,不懂动手操作,但实际上操作非常简单,没有想象中…

【嵌入式Linux】Jetson nano GPIO应用 | 驱动开发 | 官方gpiolib、设备树与chip_driver

GPIO子系统 0.暴露给应用层 应用 $ echo 79 > /sys/class/gpio/export //导出79号gpio 引脚,使得可在应用层访问 $ echo out > /sys/class/gpio/gpio79/direction //设置 为输出 $ echo 1 > /sys/class/gpio/gpio79/value //输出高电平 开灯 $ echo 0…

Spark对正常日志文件清洗并分析

目录 日志文件准备: 一.日志数据清洗: 第一步:数据清洗需求分析: 二.代码实现 2.1 代码和其详解 2.2创建jdbcUtils来连接Mysql数据库 2.3 运行后结果展示: 三、留存用户分析 3.1需求概览 3.2.代码实现 3…

T 级数据量迁移!知名云巨头如何从 Jira 切换至 ONES?

2021 年,Atlassian 旗下 Jira&Confluence 等系列产品 Server 版(本地私有化部署版)全面停售,并将在 2024 年停止维护,Server 版客户必须迁移至 Cloud(云)或 Data Center(数据中心…

全网最详细,Jmeter性能测试-性能基础详解,控制器不同选择(四)

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 逻辑控制器 提前说…

一篇文章让你搞懂TypeScript中的??和?:和?.和!.是什么意思

TypeScript中的??和?:和?.和!.是什么意思?知识回调(不懂就看这儿!)场景复现核心干货???:?.!.知识回调(不懂就看这儿!) 知识专栏专栏链接TypeScript知识专栏https://blog.csdn.net/xsl_…

Scrapy爬虫框架(概念)

Scrapy 入门教程 | 菜鸟教程 (runoob.com) Scrapy是一个快速功能强大的网络爬虫框架 Scrapy的安装 通过 pip 安装 Scrapy 框架: pip install Scrapy 安装后小测: 执行 scrapy ‐h Scrapy不是一个函数功能库,而是一个爬虫框架。 Scrapy架构图(绿线是…

CentOS7 虚拟机 双网卡绑定

一、网卡绑定模式 模式类型特点mode0round-robin(平衡轮询策略)基于per packet方式,轮询往每条链路发送报文。提供负载均衡和容错的能力,当有链路出问题,会把流量切换到正常的链路上。交换机端需要配置聚合口。mode1a…

【论文笔记】CRN: Camera Radar Net for Accurate, Robust, Efficient 3D Perception

原文链接:https://arxiv.org/abs/2304.00670 1. 引言 本文提出两阶段融合方法CRN,能使用相机和雷达生成语义丰富且位置精确的BEV特征。具体来说,首先将图像透视特征转换到BEV下,该步骤依赖雷达,称为雷达辅助的视图变换…

C#基础复习

语句 目录 语句 switch: 跳转语句 标签语句 标签: 标签语句的作用域 goto语句 using 语句 资源的包装使用 using 语句示例: 多个资源和嵌套 语句是描述某个类型或让程序执行某个动作的源代码指令 块在语法上算作一个单条嵌入语句。任何语…

电脑无法正常关机?点了关机又会自动重启

“真木马”相信不少朋友遇到过电脑关机自动重启现象,一点关机,但随后电脑有会进入重启状态,就是一直不会停,属实是很难崩。 目录 一、问题症状 二、问题原因 三、解决方案 方法一: 1.关闭系统发生错误时电脑自动…