ChatGLM2-6B在Windows下的微调

ChatGLM2-6B在Windows下的微调

零、重要参考资料

1、ChatGLM2-6B! 我跑通啦!本地部署+微调(windows系统):这是最关键的一篇文章,提供了Windows下的脚本
2、LangChain + ChatGLM2-6B 搭建个人专属知识库:提供了基本的训练思路。

一、前提

1、已完成ChatGLM2-6B的部署,假设部署位置为D:_ChatGPT\langchain-chatglm_test\ChatGLM2-6B
2、部署环境
Windows 10 专业版、已安装CUDA11.3、Anaconda3,有显卡NVIDIA GeForce RTX 3060 Laptop GPU。

二、总体思路

由于官方文档和一般博客中都是在Linux环境下完成,所以在Windows下主要注意两点:
1、huggingface下载的chatglm2-6b模型的目录不能有减号存在,否则报错。
2、使用bat文件替代官方文档中的sh文件。

三、安装依赖及环境准备

1、进入Anaconda Powershell Prompt

2、进入虚拟环境

conda activate langchain-chatglm_test

3、安装依赖

pip install rouge_chinese nltk jieba datasets

4、禁用W&B,如果不禁用可能会中断微调训练,以防万一

setx WANDB_DISABLED true

四、准备数据集

1、在ChatGLM2-6B的ptuning目录下创建train.json 和 dev.json这两个文件,文件中的数据如下:

{"content": "你好,你是谁", "summary": "你好,我是树先生的助手小6。"}
{"content": "你是谁", "summary": "你好,我是树先生的助手小6。"}
{"content": "树先生是谁", "summary": "树先生是一个程序员,热衷于用技术探索商业价值,持续努力为粉丝带来价值输出,运营公众号《程序员树先生》。"}
{"content": "介绍下树先生", "summary": "树先生是一个程序员,热衷于用技术探索商业价值,持续努力为粉丝带来价值输出,运营公众号《程序员树先生》。"}
{"content": "树先生", "summary": "树先生是一个程序员,热衷于用技术探索商业价值,持续努力为粉丝带来价值输出,运营公众号《程序员树先生》。"}

2、这里为了简化,只准备了5条测试数据,实际使用的时候肯定需要大量的训练数据。如下为train.json和dev.json的

五、创建训练和推理脚本

1、ChatGLM2-6B默认只提供了Linux下训练和推理使用的train.sh和evaluate.sh脚本,没有提供WIndows下的脚本,因此需要自己创建脚本。
2、在ptuning目录下创建train.bat脚本,文件内容如下:

set PRE_SEQ_LEN=128
set LR=2e-2
set NUM_GPUS=1python main.py ^--do_train ^--train_file train.json ^--validation_file dev.json ^--preprocessing_num_workers 10 ^--prompt_column content ^--response_column summary ^--overwrite_cache ^--model_name_or_path D:\_ChatGPT\_common\chatglm2_6b ^--output_dir output/adgen-chatglm2-6b-pt-%PRE_SEQ_LEN%-%LR% ^--overwrite_output_dir ^--max_source_length 128 ^--max_target_length 128 ^--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 4

注意model_name_or_path后跟的是实际的从huggingface下载的chatglm2-6b模型文件的位置,这个路径里不能有减号存在。
train.json、dev.json这里放的是两个文件的实际位置,可以根据需要修改。

3、在ptuning目录下创建evaluate.bat脚本,文件内容如下:

set PRE_SEQ_LEN=128
set CHECKPOINT=adgen-chatglm2-6b-pt-128-2e-2
set STEP=3000
set NUM_GPUS=1python main.py ^--do_predict ^--validation_file dev.json ^--test_file dev.json ^--overwrite_cache ^--prompt_column content ^--response_column summary ^--model_name_or_path D:\_ChatGPT\_common\chatglm2_6b ^--ptuning_checkpoint ./output/%CHECKPOINT%/checkpoint-%STEP% ^--output_dir ./output/%CHECKPOINT% ^--overwrite_output_dir ^--max_source_length 128 ^--max_target_length 128 ^--per_device_eval_batch_size 1 ^--predict_with_generate ^--pre_seq_len %PRE_SEQ_LEN% ^--quantization_bit 4

六、训练和推理

1、进入Anaconda Powershell Prompt

2、进入虚拟环境

conda activate langchain-chatglm_test

3、进入ptuning目录

cd D:\_ChatGPT\langchain-chatglm_test\ChatGLM2-6B\ptuning

4、训练:训练需要比较长的时间,大概几个小时。

.\train.bat

5、推理:由于数量小,所以推理比较快

.\evaluate.bat

执行完成后,会生成评测文件,评测指标为中文 Rouge score 和 BLEU-4。生成的结果保存在 ./output/adgen-chatglm2-6b-pt-32-2e-2/generated_predictions.txt。我们准备了 5 条推理数据,所以相应的在文件中会有 5 条评测数据,labels 是 dev.json 中的预测输出,predict 是 ChatGLM2-6B 生成的结果,对比预测输出和生成结果,评测模型训练的好坏。如果不满意调整训练的参数再次进行训练。

七、创建脚本,部署微调后的模型

1、本来在Linux下可以修改ptuning目录下的web_demo.sh脚本即可实现部署,在Windows下需要在ptuning目录下自行创建web_demo.bat脚本,内容如下:

python web_demo.py ^--model_name_or_path D:\_ChatGPT\_common\chatglm2_6b ^--ptuning_checkpoint output\adgen-chatglm2-6b-pt-128-2e-2\checkpoint-3000 ^--pre_seq_len 128

2、修改ptuning目录下的web_demo.py脚本,使模型能被本地访问:

demo.queue().launch(share=False, inbrowser=True, server_name='0.0.0.0', server_port=7860)

八、启动应用

1、进入Anaconda Powershell Prompt

2、进入虚拟环境

conda activate langchain-chatglm_test

3、进入ptuning目录

cd D:\_ChatGPT\langchain-chatglm_test\ChatGLM2-6B\ptuning

4、启动微调后的模型(注意启动前关闭fanqiang软件cd)

.\web_demo.bat

5、这时问他你训练过的问题,发觉已经使用的是微调后的模型了。

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

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

相关文章

Linux 性能分析之iostat命令详解

Linux 性能分析之iostat命令详解 iostat命令是IO性能分析的常用工具,其是input/output statistics的缩写。本文将着重于下面几个方面介绍iostat命令: iostat的安装iostat命令行选项说明iostat输出内容分析如何确定磁盘IO的瓶颈iostat实际案例 命令的安…

2023-08-14 LeetCode每日一题(合并二叉树)

2023-08-14每日一题 一、题目编号 617. 合并二叉树二、题目链接 点击跳转到题目位置 三、题目描述 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会…

Tomcat的部署及优化(多实例和动静分离)

目录 绪论 1、tomact 1.1 核心组件 1.2 什么是 servlet 1.3 什么是 JSP? 1.4 Tomcat 功能组件结构 1.5 Tomcat 请求过程 2、Tomcat 服务部署 2.1 tomcat自身优化: 2.2 内核优化 2.3 jvm 2.3.1 jvm配置 2.3.2 Tomcat配置JVM参数 2.3.3 jvm优化 3、tom…

redis的事务和watch机制

这里写目录标题 第一章、redis事务和watch机制1.1)redis事务,事务的三大命令语法:开启事务 multi语法:执行事务 exec语法:取消事务 discard 1.2)redis事务的错误和回滚的情况1.3)watch机制语法&…

tk-mybatis使用介绍,springboot整合tk-mybatis、PageHelper实现分页查询

Mybatis-Plus极大简化了我们的开发,作为mybatis的增强版,Mybatis-Plus确实帮我们减少了很多SQL语句的编写,通过其提高的API,可以方便快捷第完成增删查改操作。但是,其实除了Mybatis-Plus以外,还有一个技术t…

2023.8.14论文阅读

文章目录 ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation摘要本文方法实验结果 DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection摘要本文方法实验结果 ESPNet: Efficient Spatial Pyramid of Dilated Convo…

zabbix案例--zabbix监控Tomcat

目录 一、 部署tomcat 二、配置zabbix-java-gateway 三、配置zabbix-server 四、配置zabbix-web界面 一、 部署tomcat tar xf apache-tomcat-8.5.16.tar.gz -C /usr/local/ ln -sv /usr/local/apache-tomcat-8.5.16/ /usr/local/tomcat cd /usr/local/tomcat/bin开启JMX…

这四种订货系统不能选(四):不能源码交付

订货系统在现代企业管理中具备着重要的地位和作用。通过订货系统,企业能够更好地掌握市场需求,提高订单的准确性和及时性,优化企业的供应链管理,并加强与供应商之间的合作与沟通。今天我们分享最后一个不能选的、也是最重要的一点…

Python-OpenCV中的图像处理-GrabCut算法交互式前景提取

Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 cv2.grabCut(img: Mat, mask: typing.Optional[Mat], rect, bgdModel, fgdModel, iterCount, mode…) img…

STM32定时器TIM控制

一、CubeMX的设置 1、新建工程,进行基本配置 2、配置定时器TIM2 1)定时器计算公式:(以下两条公式相同) Tout ((ARR1) * PSC1)) / Tclk TimeOut ((Prescaler 1) * (Period 1)) / TimeClockFren Tout TimeOut&…

SQLyog中导入CSV文件入库到MySQL中

1.在数据库中新建一个表,设置列名(与待导入文件一致),字段可以多出几个都可以 2.右键表名,导入- - >导入使用本地加载的CSV数据 选择使用加载本地CVS数据 3.指定好转义字符,将终止设置为,号(英文状态下…

9-AJAX-1入门

AJAX 目录 AJAX 概念和 axios 使用认识 URLURL 查询参数常用请求方法和数据提交HTTP协议-报文接口文档案例 - 用户登录form-serialize 插件 01.AJAX 概念和 axios 使用 目标 了解 AJAX 概念并掌握 axios 库基本使用 讲解 什么是 AJAX ? mdn 使用浏览器的 XMLHttpRequest…