今天给大家介绍下如何在矩池云使用ChatGLM3-6B模型。
1 简介
GitHub:https://github.com/THUDM/ChatGLM3
魔搭:https://modelscope.cn/models/ZhipuAI/chatglm3-6b/
ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:
更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。
更完整的功能支持: ChatGLM3-6B 采用了全新设计的 Prompt 格式,除正常的多轮对话外,同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。
更全面的开源序列: 除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM3-6B-Base、长文本对话模型 ChatGLM3-6B-32K。以上所有权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。
2 矩池云快速使用ChatGLM3
(1)选用机器
进入矩池云官网https://matpool.com/, 以此点击“产品服务”、“GPU”,如图所示
(2)租用机器
在列表中,选用还是的机器,需要选择显存大于 13G 的机器,比如 V100、A4000、RTX3090、RTX4090等,不然ChatGLM-6B模型会因为显存不够而报错(CUDA out of Memory)
(3)选择镜像
点击租用后,在搜索框中输入“chatglm”以快速查找镜像,在系统镜像中选择“ChatGLM3-6B”后,即可下单租用。
(4)Web UI
镜像启动完成后,机器状态更变为“运行中”,如下所示,打开8501端口对应链接,即可进入ChatGLM3-6B的Web UI
(5)测试
进入Web UI后,即可与模型对话,如下图所示
(6)使用
ChatGLM3 Demo 拥有三种模式,使用案例参考https://github.com/THUDM/ChatGLM3/blob/main/composite_demo/README.md
Chat: 对话模式,在此模式下可以与模型进行对话。
Tool: 工具模式,模型除了对话外,还可以通过工具进行其他操作。
Code Interpreter: 代码解释器模式,模型可以在一个 Jupyter 环境中执行代码并获取结果,以完成复杂任务。
(7)对话模式参数调整
Temperature:从生成模型中抽样包含随机性,因此每次点击“生成”时,相同的提示可能会产生不同的输出。温度是用于调整随机程度的数字。
Top_p: 从top token中挑选的贪心解码策略,该值越高,约有可能选中概率低的token,
repetition_penalty:重复惩罚参数,对先前生成过的token,又重复的生成了该token进行惩罚(降低概率),以减少生成文本中的重复性,越大重复性越小,一般推荐设置 >1
Output length: 输出文本的长度,默认256,该值越大则输出可能的文本长度越长
3 模型微调
微调教程参考https://github.com/THUDM/ChatGLM3/blob/main/finetune_chatmodel_demo/README.md
(1)
进入Jupyter notebook,找到在根目录找到ChatGLM3代码文件,并新建终端
(2)
进入目录 /ChatGLM3/finetune_chatmodel_demo
(3)
# /ChatGLM3/finetune_chatmodel_demo
pip install -r requirements.txt
(4)
进入scripts,新建text file
(5)
填入微调数据
[{"conversations": [{"role": "system","content": "矩池云如何租用机器"},{"role": "user","content": "矩池云如何租用机器"},{"role": "assistant","content": "进入矩池云官网后,注册账号,点击产品服务即可选用机器。矩池云是一家专注于人工智能领域的云服务商。提供稳定的人工智能云服务器、人工智能教学实训环境、高速网盘等服务。"}, {"role": "user","content": "矩池云如何租用机器"},{"role": "assistant","content": "进入矩池云官网后,注册账号,点击产品服务即可选用机器。矩池云是一家专注于人工智能领域的云服务商。提供稳定的人工智能云服务器、人工智能教学实训环境、高速网盘等服务。"}]},{"conversations": [{"role": "system","content": "如何使用矩池云"},{"role": "user","content": "如何使用矩池云"},{"role": "assistant","content": "进入矩池云官网后,注册账号,点击产品服务即可选用机器。矩池云是一家专注于人工智能领域的云服务商。提供稳定的人工智能云服务器、人工智能教学实训环境、高速网盘等服务。"}, {"role": "user","content": "如何使用矩池云器"},{"role": "assistant","content": "进入矩池云官网后,注册账号,点击产品服务即可选用机器。矩池云是一家专注于人工智能领域的云服务商。提供稳定的人工智能云服务器、人工智能教学实训环境、高速网盘等服务。"}]}]
(6)
Ctrl+S 保存文件,并将文件重命名, 这里的示例是my_data.json,用户可根据自己的喜好更改
(7)
修改微调的数据集路径,修改 /ChatGLM3/finetune_chatmodel_demo/scripts/finetune_pt_multiturn.sh
(如果使用全量微调,则修改 finetune_ds_multiturn.sh)
BASE_MODEL_PATH=/ChatGLM3/chatglm3-6b-32k
DATASET_PATH=/ChatGLM3/finetune_chatmodel_demo/scripts/my_data.json
(8)
执行微调,有全量微调和P-Tuning v2 微调两种
参考显存用量
P-Tuning V2: PRE_SEQ_LEN=128, DEV_BATCH_SIZE=1, GRAD_ACCUMULARION_STEPS=16, MAX_SEQ_LEN=2048 配置下约需要 21GB 显存。
全量微调:./scripts/finetune_ds_multiturn.sh 中的配置(MAX_SEQ_LEN=2048, DEV_BATCH_SIZE=16, GRAD_ACCUMULARION_STEPS=1)恰好用满 4 * 80GB 显存。
# ./scripts/finetune_ds_multiturn.sh # 全量微调
# ./scripts/finetune_pt_multiturn.sh # P-Tuning v2 微调cd /ChatGLM3/finetune_chatmodel_demo
chmod 777 ./scripts/finetune_pt_multiturn.sh
./scripts/finetune_pt_multiturn.sh
(9)
启动微调后模型
cd /ChatGLM3/finetune_chatmodel_demo
python inference.py \--pt-checkpoint "/ChatGLM3/finetune_chatmodel_demo/output/tool_alpaca_pt-20240103-075859-128-2e-2" \--model /ChatGLM3/chatglm3-6b-32k
如果是全量微调,则执行下面的指令
python inference.py \--tokenizer /ChatGLM3/chatglm3-6b-32k \--model "/ChatGLM3/finetune_chatmodel_demo/output/tool_alpaca_pt-20240103-075859-128-2e-2"
(10)
在Web UI中部署
首先我们需要 kill 掉系统开启自启的 ChatGLM3-6B 服务,Jupyterlab 里新建一个 Terminal,然后输入下面指令查看 ChatGLM3 综合 Demo 服务器进程id,该程序通过 streamlit 启动,所以我们可以查下 streamlit 相关进程即可。
ps aux | grep streamlit
kill 掉相关进程,从上面运行结果可以看出,streamlit
相关进程id是963,执行下面指令即可 kill 相关进程
# 注意 963 换成你自己租用服务器里查出来的 streamlit 程序的进程id
# 注意 963 换成你自己租用服务器里查出来的 streamlit 程序的进程id
# 注意 963 换成你自己租用服务器里查出来的 streamlit 程序的进程id
kill 963
PT_PATH需要根据自己output下文件夹生成的名称做调整
在Web UI中部署
注意,MODEL_PATH和PT_PATH的设置要和 streamlit run main.py在同一行,不能将命令分开输入,否则不会加载我们微调后的模型
cd /ChatGLM3/composite_demo
MODEL_PATH="/ChatGLM3/chatglm3-6b-32k" PT_PATH="/ChatGLM3/finetune_chatmodel_demo/output/tool_alpaca_pt-20240104-005002-128-2e-2" streamlit run main.py