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、这时问他你训练过的问题,发觉已经使用的是微调后的模型了。

相关文章:
ChatGLM2-6B在Windows下的微调
ChatGLM2-6B在Windows下的微调 零、重要参考资料 1、ChatGLM2-6B! 我跑通啦!本地部署微调(windows系统):这是最关键的一篇文章,提供了Windows下的脚本 2、LangChain ChatGLM2-6B 搭建个人专属知识库:提供…...
聊聊火车的发展
目录 1.火车的概念 2.火车的发展历史 3.火车对战争的影响 4.火车对人们出行造成的影响 1.火车的概念 火车是一种由机械动力驱动的陆上交通工具,通常用来运输人员和货物。它由一列或多列的连接在一起的车厢组成,有轨道作为其行驶的基础,并通…...
IDEA使用@Autowired为什么会警告?
在使用IDEA编写Spring相关的项目时,当在字段上使用Autowired注解时,总会出现一个波浪线提示:”Field injection is not recommended.” 这让我不禁疑惑:我每天都在使用这种方式,为何不被推荐呢?今天&#x…...
npm如何设置淘宝的镜像源模式
1. 查看当前npm的下载源 npm config get registry2. 全局配置npm使用淘宝镜像作为默认下载源 npm config set registry https://registry.npm.taobao.org --global3. 安装依赖包 npm install <package-name> 添加到devDependencies字段中: npm install &l…...
浅谈Redis的maxmemory设置以及淘汰策略
推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间 https://dr…...
考虑分布式电源的配电网无功优化问题研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Cpp异常概述
异常概述 1. 异常处理的重要性和作用: 异常处理是编程中的一个核心组成部分,因为它提供了一种方法来处理程序运行时可能遇到的意外情况,例如文件未找到、网络连接丢失或无效的用户输入等。当这些情况发生时,程序可以优雅地处理它…...
山东布谷科技直播软件源码Nginx服务器横向扩展:搭建更稳定的平台服务
在直播软件源码平台中,服务器扮演着重要的角色,关系着视频传输、数据处理、用户管理等工作的顺利完成。随着互联网的迅猛发展,直播行业也随之崛起,全世界的人们都加入到了直播软件源码平台中,用户流量的增加让服务器的…...
SystemVerilog之接口详解
1.入门实例 测试平台连接到 arbiter的例子:包括测试平台, arbiter仲裁器, 时钟发生器 和连接的信号。 ㅤㅤㅤ ㅤ ㅤㅤㅤㅤㅤ Arbiter里面可以自定义发送的权重, 是轮询还是自定义 grant表示仲裁出来的是哪一个,也即只有0,1&am…...
RabbitMq-1基础概念
RabbitMq-----分布式中的一种通信手段 1. MQ的基本概念(message queue,消息队列) mq:消息队列,存储消息的中间件 分布式系统通信的两种方式:直接远程调用,借助第三方完成间接通信 消息的发送方是生产者,…...
深度学习1:通过模型评价指标优化训练
P(Positive)表示预测为正样本,N(negative)表示预测为负样本,T(True)表示预测正确,F(False)表示预测错误。 TP:正样本预测正确的数量(正确检测) FP:负样本预测正确数量(误检测) TN…...
excel隔行取数求和/均值
问题描述 如图有好多组数据,需要求每组数据对应位置的平均值 解决方法 SUM(IF(MOD(ROW(C$2:C$81), 8) MOD(ROW(C2), 8), C$2:C$81, 0))/10然后下拉右拉扩充即可,其中需要根据自身需要修改一些数据 SUM(IF(MOD(ROW(起始列$起始行:结束列$结束行), 每…...
批量记录收支明细,轻松通过收支占比图表轻松分析支出项目占比!
您是否希望更加直观地了解个人或企业的支出项目占比情况?是否想通过图表分析,快速定位支出的主要项目,并做出相应的调整?现在,我们的智能收支分析大师为您提供了一种智能化的解决方案!只需几步操作…...
pdf怎么压缩?一分钟学会文件压缩方法
PDF文件过大一般主要原因就是内嵌大文件、重复的资源或者图片比较多,随之而来的问题就是占用存储空间、被平台限制发送等等,这时候我们可以通过压缩的方法缩小PDF文件大小,下面就一起来看看具体的操作方法吧。 方法一:嗨格式压缩大…...
信息安全:防火墙技术原理与应用.
信息安全:防火墙技术原理与应用. 防火墙是网络安全区域边界保护的重要技术。为了应对网络威胁,联网的机构或公司将自己的网络与公共的不可信任的网络进行隔离,其方法是根据网络的安全信任程度和需要保护的对象,人为地划分若干安全…...
PG-DBA培训14:PostgreSQL数据库升级与迁移
一、风哥PG-DBA培训14:PostgreSQL数据库升级与迁移 课程目标: 本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL备份恢复与迁移升级阶段之PostgreSQL数据库升级与迁移,学完本课程可以PostgreSQL数据库升…...
selenium语法进阶+常用API
目录 浏览器操作 浏览器回退,前进 与刷新 浏览器窗口设置大小 浏览器设置宽高 浏览器窗口最大化 浏览器控制滚动条 信息打印 打印页面的标题和当前页面的URL 定位一组元素 鼠标和键盘事件 键盘 鼠标 下拉框操作 通过索引定位(se…...
iOS UIAlertController控件
ios 9 以后 UIAlertController取代UIAlertView和UIActionSheet UIAlertControllerStyleAlert和UIAlertControllerStyleActionSheet。 在UIAlertController中添加按钮和关联输入框 UIAlertAction共有三种类型,默认(UIAlertActionStyleDefault࿰…...
C语言好题解析(二)
目录 递归类型例题1例题2例题3例题4例题5例题6 递归类型 例题1 根据下面递归函数:调用函数Fun(2),返回值是多少( )int Fun(int n) {if (n 5)return 2;elsereturn 2 * Fun(n 1); } A.2 B.4 C.8 D.16【答案】 D 【分析】 …...
数据结构介绍
1、什么是数据结构呢? 计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的。数据结构是为了更方便的管理和使用数据,需要结合具体的业务来进行选择。一般情况下,精心选择的数据结构可以带来更高的运行或者存储效率。…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
