一、背景
ChatGLM2-6B发布了,官方宣称性能速度有大幅提升。
链接https://mp.weixin.qq.com/s/_h9ls_gHIgHho1RBwUlhsA
之前是直接下载 B站UP主封装好的 懒人包测试的,这次打算 参考官网 自己部署。
软硬件环境如下:
CPU:11700KF
GPU:3090ti 24G
RAM:DDR4 3200 64G(32G X2)
OS:Win10 Pro 22H2 19045.2673
二、准备工作
1、工程文件准备
整个工程需要从两个远程仓库克隆,一个是 github 上的源码,一个是 HuggingFace 上的模型。
对于源码,由于总体积较小,因此可直接从网页下载 zip 包后解压,也可使用 git 命令(电脑需要提前装好 git )克隆至本地文件夹中:
git clone https://github.com/THUDM/ChatGLM2-6B
对于模型,由于存在7个体积较大的 checkpoint 文件,若直接 clone 可能耗时过久或网络连接不够稳定,可以采用大、小文件分别下载的方式。其中大文件可从 清华云 手动下载,小文件主要为模型实现文件,数量不多且体积较小(算上 tokenizer.model
一共11个文件),可采用两种方式下载,一种是在 HuggingFace 页面手动一个一个下载,另一种是利用 GIT_LFS_SKIP_SMUDGE
参数跳过大文件一次性克隆整个工程(电脑需要提前装好 Git LFS):
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b
最后再将前面手动下载好的大文件拷入替换,构成完整的模型。
需要注意的坑:
1)该命令在 powershell 中会报错,提示不认识 GIT_LFS_SKIP_SMUDGE
命令,放在 git bash 终端中则可顺利执行;
2)被该命令跳过的“大文件”不仅有 7 个 .bin 文件,还包括 1.02MB 的 tokenizer.model
。
模型文件理论上可存放于任意位置,参考官方演示视频将其平行于源码文件夹,即整个工程文件的目录结构如下:
- [chatglm2_6b]
- [src]
- api.py
- cli_demo.py
- web_demo.py
- ……
- [model]
- config.json
- modeling_chatglm.py
- pytorch_model-00001-of-00007.bin
- ……
- [src]
根据目录结构,修改源码目录下的 web_demo.py 文件,将两处 THUDM/chatglm2-6b
替换为 ..\\model
:
tokenizer = AutoTokenizer.from_pretrained("..\\model", trust_remote_code=True)
model = AutoModel.from_pretrained("..\\model", trust_remote_code=True).cuda()
如果想使用命令行与模型交互,则需要修改 cli_demo.py。web_demo2.py
同理 。
需要注意的坑:
在 windows 下,表示目录层级的斜杠需写为双反斜杠,而非 Linux 下的单一正斜杠。
2、python环境准备
安装 miniconda,给 pip 和 conda 换清华源,新建环境,预装 pip:
conda create -n chatglm2-6b pip
使用 pip 安装所有依赖:
pip install -r requirements.txt
需要注意的坑:
对于使用 Nvidia GPU 的用户,ChatGLM 官网并没有明确给出手动安装 torch 的方法,以下操作如不进行,将无法启动模型:
1)下载安装 CUDA Toolkit,本次部署采用的安装包为 cuda_12.1.0_531.14_windows.exe
2)根据 CUDA 版本安装编译 torch,本次部署采用的命令为:
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu121
即分别勾选 Preview(Nightly)、Windows、Pip、Python、CUDA 12.1(如不选 Preview,则CUDA版本无法选12;如选 Conda,则安装过程中可能会出现 Conflicts)。
三、运行模型
文件夹层面 cd 至 src 文件夹,环境层面激活 chatglm2-6b,然后执行:
python .\web_demo.py
需要注意的坑:
1)使用 web_demo 时不能开 VPN,否则会弹出 Expecting value: line 1 column 1 (char 0)
错误;
2)如使用 web_demo2,则需要按官网提示额外安装 streamlit
和 streamlit-chat
,且启动命令为 streamlit run web_demo2.py
。
四、体验
推理速度相比上一代有明显的提升,但性能提升感知不强。期待团队未来推出13B、30B、65B等更大规模的模型。