当前位置: 首页 > news >正文

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字段中&#xff1a; npm install &l…...

浅谈Redis的maxmemory设置以及淘汰策略

推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 「java、python面试题」来自UC网盘app分享&#xff0c;打开手机app&#xff0c;额外获得1T空间 https://dr…...

考虑分布式电源的配电网无功优化问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Cpp异常概述

异常概述 1. 异常处理的重要性和作用&#xff1a; 异常处理是编程中的一个核心组成部分&#xff0c;因为它提供了一种方法来处理程序运行时可能遇到的意外情况&#xff0c;例如文件未找到、网络连接丢失或无效的用户输入等。当这些情况发生时&#xff0c;程序可以优雅地处理它…...

山东布谷科技直播软件源码Nginx服务器横向扩展:搭建更稳定的平台服务

在直播软件源码平台中&#xff0c;服务器扮演着重要的角色&#xff0c;关系着视频传输、数据处理、用户管理等工作的顺利完成。随着互联网的迅猛发展&#xff0c;直播行业也随之崛起&#xff0c;全世界的人们都加入到了直播软件源码平台中&#xff0c;用户流量的增加让服务器的…...

SystemVerilog之接口详解

1.入门实例 测试平台连接到 arbiter的例子&#xff1a;包括测试平台, arbiter仲裁器, 时钟发生器 和连接的信号。 ㅤㅤㅤ ㅤ ㅤㅤㅤㅤㅤ Arbiter里面可以自定义发送的权重&#xff0c; 是轮询还是自定义 grant表示仲裁出来的是哪一个&#xff0c;也即只有0&#xff0c;1&am…...

RabbitMq-1基础概念

RabbitMq-----分布式中的一种通信手段 1. MQ的基本概念&#xff08;message queue,消息队列&#xff09; mq:消息队列&#xff0c;存储消息的中间件 分布式系统通信的两种方式&#xff1a;直接远程调用&#xff0c;借助第三方完成间接通信 消息的发送方是生产者&#xff0c…...

深度学习1:通过模型评价指标优化训练

P(Positive)表示预测为正样本&#xff0c;N(negative)表示预测为负样本&#xff0c;T(True)表示预测正确,F(False)表示预测错误。 TP&#xff1a;正样本预测正确的数量&#xff08;正确检测&#xff09; FP&#xff1a;负样本预测正确数量&#xff08;误检测&#xff09; TN…...

excel隔行取数求和/均值

问题描述 如图有好多组数据&#xff0c;需要求每组数据对应位置的平均值 解决方法 SUM(IF(MOD(ROW(C$2:C$81), 8) MOD(ROW(C2), 8), C$2:C$81, 0))/10然后下拉右拉扩充即可&#xff0c;其中需要根据自身需要修改一些数据 SUM(IF(MOD(ROW(起始列$起始行:结束列$结束行), 每…...

批量记录收支明细,轻松通过收支占比图表轻松分析支出项目占比!

您是否希望更加直观地了解个人或企业的支出项目占比情况&#xff1f;是否想通过图表分析&#xff0c;快速定位支出的主要项目&#xff0c;并做出相应的调整&#xff1f;现在&#xff0c;我们的智能收支分析大师为您提供了一种智能化的解决方案&#xff01;只需几步操作&#xf…...

pdf怎么压缩?一分钟学会文件压缩方法

PDF文件过大一般主要原因就是内嵌大文件、重复的资源或者图片比较多&#xff0c;随之而来的问题就是占用存储空间、被平台限制发送等等&#xff0c;这时候我们可以通过压缩的方法缩小PDF文件大小&#xff0c;下面就一起来看看具体的操作方法吧。 方法一&#xff1a;嗨格式压缩大…...

信息安全:防火墙技术原理与应用.

信息安全&#xff1a;防火墙技术原理与应用. 防火墙是网络安全区域边界保护的重要技术。为了应对网络威胁&#xff0c;联网的机构或公司将自己的网络与公共的不可信任的网络进行隔离&#xff0c;其方法是根据网络的安全信任程度和需要保护的对象&#xff0c;人为地划分若干安全…...

PG-DBA培训14:PostgreSQL数据库升级与迁移

一、风哥PG-DBA培训14&#xff1a;PostgreSQL数据库升级与迁移 课程目标&#xff1a; 本课程由风哥发布的基于PostgreSQL数据库的系列课程&#xff0c;本课程属于PostgreSQL备份恢复与迁移升级阶段之PostgreSQL数据库升级与迁移&#xff0c;学完本课程可以PostgreSQL数据库升…...

selenium语法进阶+常用API

目录 浏览器操作 浏览器回退&#xff0c;前进 与刷新 浏览器窗口设置大小 浏览器设置宽高 浏览器窗口最大化 浏览器控制滚动条 信息打印 打印页面的标题和当前页面的URL 定位一组元素 鼠标和键盘事件 键盘 鼠标 下拉框操作 通过索引定位&#xff08;se…...

iOS UIAlertController控件

ios 9 以后 UIAlertController取代UIAlertView和UIActionSheet UIAlertControllerStyleAlert和UIAlertControllerStyleActionSheet。 在UIAlertController中添加按钮和关联输入框 UIAlertAction共有三种类型&#xff0c;默认&#xff08;UIAlertActionStyleDefault&#xff0…...

C语言好题解析(二)

目录 递归类型例题1例题2例题3例题4例题5例题6 递归类型 例题1 根据下面递归函数&#xff1a;调用函数Fun(2)&#xff0c;返回值是多少&#xff08; &#xff09;int Fun(int n) {if (n 5)return 2;elsereturn 2 * Fun(n 1); } A.2 B.4 C.8 D.16【答案】 D 【分析】 …...

数据结构介绍

1、什么是数据结构呢&#xff1f; 计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的。数据结构是为了更方便的管理和使用数据&#xff0c;需要结合具体的业务来进行选择。一般情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...