1.背景

咱们好啊,前次给咱们写了ChatGLM-6B的布置运用教程,【奶奶看了都会】云服务器布置开源ChatGLM-6B,让你具有自己的ChatGPT

但是由于模型比较小的问题,所以日常作业中可能用不上。并且咱们更期望的是模型能练习自己的数据,为自己服务。比如:公司内部用自己的常识库数据进行微调,练习成内部常识问答机器人,这样对于各种事务问题答疑,机器人立马就能给出对应的答案,比单纯的问题查找好太多了。

仍是老规矩,先让咱们看看微调前后ChatGLM对不同事务问题的回答:

【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库

2.布置ChatGLM

具体布置教程能够参考上一篇文章:【奶奶看了都会】云服务器布置开源ChatGLM-6B,让你具有自己的ChatGPT

这儿咱们简略说说布置进程,要点讲微调教程

2.1创立空间

这儿咱们仍是用揽睿星舟的云服务器进行操作,主要仍是便宜嘛,一台3090-24G显存的机器只需求1.9元/小时,合适咱们这种口袋不鼓的小白玩家。

注册地址:揽睿云注册地址

然后咱们挑选一台3090-24G的服务器,创立作业空间,链接:www.lanrui-ai.com/console/wor…

装备挑选能够看下图,公有镜像、挂载网盘即可

【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库

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分钟左右,文件下载完成后如下图:

【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库

下面咱们开端微调的流程

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.jsondev.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

修正完后,脚本如下:

【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库

3.3练习数据

履行下面指令开端练习数据

bash train.sh

练习时刻大约4个小时,练习完成后会生成output文件夹,在该文件夹下可看到生成的checkpoint文件夹

【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库

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

【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库

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")

如图:

【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库

接着指令行履行bash web_demo.sh开端运转模型,呈现http://0.0.0.0:27777字样的日志阐明运转成功

接着回到揽睿星舟的作业空间页面,复制调试地址后在浏览器打开,就能用咱们微调后的模型游玩了

3.6测试作用

咱们输入预先规划的发问,比照微调前后的回答

【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库

能够看到微调后的回答,和咱们喂给模型的回答是相同的

3.7其他注意

通过上图也能够发现,模型微调后呈现了灾难性的遗忘,输入你好,开端胡说八道了。

即除了你教它的东西外,它本来的常识已经紊乱了。所以微调后的模型只能用于单一的场景了,非常合适常识库问答这种。

4.写在最终

AI技能的发展真是太快了,距离我前次写文才过去一个月,这个月的时刻就涌现了各种新东西。AutoGPT、Midjourney、各种ChatGPT相关的课程、文心一言、讯飞大模型、Claude等等。