乐趣区

关于人工智能:奶奶看了都会云服务器ChatGLM模型finetuning微调让你拥有自己的知识库

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…

配置抉择能够看下图,私有镜像、挂载网盘即可

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

批改完后,脚本如下:

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 等等。

有微调需要的能够在 公众号 卷福同学 内分割

退出移动版