【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库
1.背景
大家好啊,上次给大家写了ChatGLM-6B的部署使用教程,【奶奶看了都会】云服务器部署开源ChatGLM-6B,让你拥有自己的ChatGPT
但是因为模型比较小的问题,所以日常工作中可能用不上。而且大家更希望的是模型能训练自己的数据,为自己服务。比如:公司内部用自己的知识库数据进行微调,训练成内部知识问答机器人,这样对于各种业务问题答疑,机器人立马就能给出对应的答案,比单纯的问题搜索好太多了。
还是老规矩,先让大家看看微调前后ChatGLM对不同业务问题的回答:
2.部署ChatGLM
详细部署教程可以参考上一篇文章:【奶奶看了都会】云服务器部署开源ChatGLM-6B,让你拥有自己的ChatGPT,这里我们简单说说部署步骤,重点讲微调教程
2.1创建空间
这里我们还是用揽睿星舟的云服务器进行操作,主要还是便宜嘛,一台3090-24G显存的机器只需要1.9元/小时,适合咱们这种口袋不鼓的小白玩家。
注册地址:揽睿云注册地址
注册账号时邀请码填写4104
通过我的链接注册的用户,登陆后点击右上角机器人图标,点击“充值”,选择其他金额输入“3.8“,即可获得免费3.8元算力
目前平台还有一个用户邀请用户的活动。如果邀请一个充值用户,平台会自动返 10元现金券。邀请方法就是在“个人设置”里面找到邀请码,分享出去,有用户通过个人邀请码充值,分享者就能获得10元的现金券~
然后我们选择一台3090-24G的服务器,创建工作空间,链接:
https://www.lanrui-ai.com/console/workspace/create?mode=after&resource_name=ark.gpu.3090
配置选择可以看下图,公有镜像、挂载网盘即可
2.2部署ChatGLM-6B
1.创建完工作空间后,进入jupyter页面,并创建一个终端,然后我们开始下载代码,执行命令
//1.进入data目录
cd data
//2.下载代码
git clone https://github.com/THUDM/ChatGLM-6B.git
2.下载代码后,修改requirements.txt
文件,加上需要安装的依赖
icetk
chardet
streamlit
streamlit-chat
rouge_chinese
nltk
jieba
datasets
然后执行 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
安装依赖
3.下载模型文件
//下载小文件
cd ChatGLM-6B
git clone https://huggingface.co/THUDM/chatglm-6b
// 删除不用的空文件
rm -rf ice_text.model
rm -rf pytorch_model-0000*
接着进入到chatglm-6b目录下,新建一个down.py
的文件,把下面的代码拷贝进去。我们准备下载大文件了
import requests
url='https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/files/?p=%2Fice_text.model&dl=1'
save_path='ice_text.model'
# 设置header
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
# 获取文件并写入
res = requests.get(url,headers=headers)
file1 =open(save_path,'wb')
file1.write(res.content)
file1.close()
url1='https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/files/?p=%2Fpytorch_model-0000'
url2='-of-00008.bin&dl=1'
save_path1='pytorch_model-0000'
save_path2='-of-00008.bin'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
# 循环获取models,总共有8个基础模型
for i in range(8):
url=url1+str(i+1)+url2
save_path=save_path1+str(i+1)+save_path2
res = requests.get(url,headers=headers)
file1 =open(save_path,'wb')
file1.write(res.content)
file1.close()
print("第{}个模型下载已完成".format(i+1))
保存后,命令行执行python3 down.py
等待10分钟左右,文件下载完成后如下图:
下面我们开始微调的流程
3.模型微调
3.1数据集准备
要想训练自己的数据,需要准备提问和回答的内容,数据格式为Json,如下是示例:
ADGEN 数据集任务为根据输入(content)生成一段广告词(summary)
{"content": "类型#裤*版型#宽松*风格#性感*图案#线条*裤型#阔腿裤",
"summary": "宽松的阔腿裤这两年真的吸粉不少,明星时尚达人的心头爱。毕竟好穿时尚,谁都能穿出腿长2米的效果宽松的裤腿,当然是遮肉小能手啊。上身随性自然不拘束,面料亲肤舒适贴身体验感棒棒哒。系带部分增加设计看点,还让单品的设计感更强。腿部线条若隐若现的,性感撩人。颜色敲温柔的,与裤子本身所呈现的风格有点反差萌。"}
当然,我们想训练自己的数据时,也可以写脚本将自己内部数据洗成上面的Json格式,对于大批量数据可能需要用到大数据的知识了。
这里为了方便快速看到效果,我们直接用网上已有的数据集进行测试
下载过程如下:
//进入到ptuning目录下
cd ChatGLM-6B/ptuning
//下载数据集文件
wget -O AdvertiseGen.tar.gz https://cloud.tsinghua.edu.cn/f/b3f119a008264b1cabd1/?dl=1
//解压数据集
tar -xzvf AdvertiseGen.tar.gz
解压后在ptuning/AdvertiseGen
目录下能看到train.json
和dev.json
两个文件,就是数据集了。
3.2修改训练脚本
详细说明可以看官方Github说明ChatGLM官方文档
我们使用train.sh
脚本训练,需要修改2个参数
- model_name_or_path 模型文件路径,修改为
/home/user/data/ChatGLM-6B/chatglm-6b
即刚才下载的模型文件 - per_device_train_batch_size 每台设备训练的批处理大小,这里设成24,因为咱们的显存有24G,充分利用
- gradient_accumulation_steps 修改为2
修改完后,脚本如下:
3.3训练数据
执行下面命令开始训练数据
bash train.sh
训练时间大概4个小时,训练完成后会生成output文件夹,在该文件夹下可看到生成的checkpoint文件夹
3.4推理
小卷毕竟不是专业算法工程师,这一步简单理解验证模型与自己预想的输出结果一致程度。我们这一步进行evaluate过程,修改evaluate.sh
脚本,需要修改的内容如下:
//修改模型路径
--model_name_or_path /home/user/data/ChatGLM-6B/chatglm-6b \
然后执行bash evaluate.sh
执行推理脚本,等待1小时后,生成的结果保存在./output/adgen-chatglm-6b-pt-8-1e-2/generated_predictions.txt
3.5使用
我们运行ptuning文件夹下的web_demo.sh
文件,通过网页访问使用模型,脚本文件需要修改模型路径,修改后如下:
PRE_SEQ_LEN=128
CUDA_VISIBLE_DEVICES=0 python3 web_demo.py \
--model_name_or_path /home/user/data/ChatGLM-6B/chatglm-6b \
--ptuning_checkpoint output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-3000 \
--pre_seq_len $PRE_SEQ_LEN
修改web_demo.py
文件里的监听IP为0.0.0.0
,端口号改为27777
,方便我们从浏览器访问
修改后的启动代码是
demo.queue().launch(share=True, inbrowser=True, server_port=27777, server_name="0.0.0.0")
如图:
接着命令行执行bash web_demo.sh
开始运行模型,出现http://0.0.0.0:27777
字样的日志说明运行成功
接着回到揽睿星舟的工作空间页面,复制调试地址
后在浏览器打开,就能用我们微调后的模型玩耍了
3.6测试效果
我们输入预先设计的提问,对比微调前后的回答
可以看到微调后的回答,和我们喂给模型的回答是一样的
3.7其他注意
通过上图也可以发现,模型微调后出现了灾难性的遗忘,输入你好
,开始胡言乱语了。
即除了你教它的东西外,它原本的知识已经混乱了。所以微调后的模型只能用于单一的场景了,非常适合知识库问答这种。
4.写在最后
AI技术的发展真是太快了,距离我上次写文才过去一个月,这个月的时间就涌现了各种新东西。AutoGPT、Midjourney、各种ChatGPT相关的课程、文心一言、讯飞大模型、Claude等等。
有微调需求的可以在 公众号卷福同学
内联系
【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库的更多相关文章
- [奶奶看了都会]ChatGPT保姆级注册教程
大家好,我是小卷 最近几天OpenAI发布的ChatGPT聊天机器人火出天际了,连着上了各个平台的热搜榜.这个聊天机器人最大的特点是模仿人类说话风格同时回答大量问题. 有人说ChatGPT是真正的人工 ...
- 云服务器上利用Docker部署Django项目
转载别人的,请看下面链接 云服务器上利用Docker部署Django项目
- 选择困难症必看!云服务器如何选择操作系统,Windows和Linux哪个更好?
在购买云服务器时,会有一个必选的配置,就是操作系统的选择,如何选择操作系统?操作系统选择错了怎么办?这是不少用户会遇到的问题,今天我们就来教大家如何选择操作系统,以及操作系统选择错了,该怎么切换. W ...
- mqtt网关服务器连接阿里云关联物模型
mqtt网关服务器连接阿里云关联物模型 卓岚专门为工业环境设计的RS485设备数据采集器/物联网网关,兼具串口服务器.Modbus网关.MQTT网关.RS485转JSON等多种功能于一体. 可以连接阿 ...
- 阿里云服务器Windows Server 2008/2012部署Office Web Server 2013
以前成功将Office Web Server 2013部署在了本地服务器上,此次是将Office Web Server 2013部署在阿里云服务器Windows Server 2008和2012上,中 ...
- 环境配置-云服务器jdk与tomcat配置
我所实践的主机是麻花疼云的主机,第一次试用30天,装了个centos6.5,其实已经用商用专用镜像配置好环境了,包括jdk.tomcat等常用的内容,但是我实在是找不到他们安装在哪个目录下了,我就自己 ...
- vsts + XX云服务器构建netcore+docker持续集成交付部署
持续集成交付部署是什么意思,它给我们带来什么好处? 先贴一张图 持续集成(Continuous Integration) 持续集成强调开发人员提交了新代码之后,立刻进行构建.(单元)测试(这个要看情况 ...
- 1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))
容器化部署一套云服务系列 1. 容器化部署一套云服务之Jenkins 一.购买服务器 服务器
- 阿里云一 第一篇:云服务器ECS
阿里云(www.aliyun.com)创立于2009年,是全球领先的云计算及人工智能科技公司,为200多个国家和地区的企业.开发者和政府机构提供服务.截至2017年3月,阿里云付费云计算用户达87.4 ...
- 虚拟主机、VPS、ECS云服务器 区别
在阿里云上买了个云服务器. ssh命令都没通,找服务端同事帮我看,说我买错了.应该买ECS. 1.虚拟主机 虚拟主机就是利用虚拟化的技术,将一台服务器划分出一定大小的空间,每个空间都给予单独的 FTP ...
随机推荐
- freeswitch的事件引擎实现分析
概述 freeswitch是由事件驱动的,fs内部有各种事件来标识状态的变化包括呼叫的变化.配置的变化.号码的变化等等. 而一个框架内的事件引擎需要实现哪些基本的功能呢? 让我们来看一下fs的事件引擎 ...
- 【日常踩坑】Debug 从入门到入土
写代码难免遇到 bug,调试解决 bug 的快慢很影响开发的效率.本文主要是梳理并记录下个人经常用的调试方法(主要以 C/C++ 的 segment fault 为例) 分类 根据调试时机与 bug ...
- python3查看文件是否存在,以及读、写与执行的属性
技术背景 在使用python对系统文件进行操作的项目中,经常需要用到对本地文件的存在和读写进行判断的操作.最常用的比如os.exists函数,可以很方便的判断给定的文件名是否存在于系统中.但是这里我们 ...
- Cortex M3 CORE
Cortex CM3 内核架构 CM3内核主要包含几个部分:取指(Fetch)\指令译码(Decoder/DEC)\执行(EXEC)\ALU 内存取数通过load & store指令,就是通过 ...
- phpcms : Uncaught Error: [] operator not supported for strings... 的解决方案
打开/phpcms/modules/admin/classes/push_api.class.php,大概在约 141行, $fields_arr = $fields_value = ''; 将它改为 ...
- [转帖]minio 的 warp
3 benchmarking tool. Download Download Binary Releases for various platforms. Configuration Warp can ...
- 【转帖】nginx变量使用方法详解-2
https://www.diewufeiyang.com/post/576.html 关于 Nginx 变量的另一个常见误区是认为变量容器的生命期,是与 location 配置块绑定的.其实不然.我们 ...
- [转帖]Arm发布CortexX4,功耗可降低40%
https://www.eet-china.com/mp/a224124.html ARM 发布了新一代的移动处理器内核,包括 Cortex-X4.Cortex-A720.Cortex-A520,预计 ...
- [转帖]VCSA证书过期问题处理
1. 故障现象 2022年10月25日,登陆VC报错. 按照报错信息,结合官方文档,判断为STS证书过期导致. vCenter Server Appliance (VCSA) 6.5.x, 6.7. ...
- [转帖]SkyWalking集成logback
1.引入skywalking的jar包,导入的包和agent版本一致 <dependency> <groupId>org.apache.skywalking</group ...