前言

ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本。它具有对话流畅、部署门槛较低等优点。下图为所需GPU资源说明。本章介绍ChatGLM2-6B模型的安装运行部署。

量化等级 编码 2048 长度的最小显存 生成 8192 长度的最小显存
FP16 / BF16 13.1 GB 12.8 GB
INT8 8.2 GB 8.1 GB
INT4 5.5 GB 5.1 GB

准备CPU和GPU资源

准备CPU和GPU资源可参考《AI教程 LLaMA 模型部署运行(二) 第4章》。

下载安装模型

下载模型代码仓库

[点击这里] 下载ChatGLM2-6B模型代码仓库,将 **ChatGLM2-6B-main.zip** 上传到GPU资源实例的/opt目录下。或使用下面命令下载。
1
2
3
4
5
6
7
8
#切换到root用户
sudo -i

#进入/opt目录,并上传ChatGLM2-6B-main.zip
cd /opt

#解压
unzip ChatGLM2-6B-main.zip

安装模型依赖

我们会在项目代码目录创建Python虚拟环境来进行模型依赖的安装。

1
2
3
4
5
6
7
8
9
10
11
12
#切换到root用户
sudo -i

#进入项目代码目录
cd /opt/ChatGLM2-6B-main/

#创始Python虚拟环境
python3.8 -m venv venv
source venv/bin/activate

#安装依赖
pip install -r requirements.txt

安装tokenizers过程中报错,解决方法升级pip:pip install --upgrade pip

1
2
3
4
5
6
7
8
9
10
11
12
Collecting tokenizers!=0.11.3,<0.14,>=0.11.1 (from transformers==4.30.2->-r requirements.txt (line 2))
Downloading http://mirrors.tencentyun.com/pypi/packages/29/9c/936ebad6dd963616189d6362f4c2c03a0314cf2a221ba15e48dd714d29cf/tokenizers-0.13.3.tar.gz (314kB)
100% |████████████████████████████████| 317kB 12.5MB/s
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-bkflxm4d/tokenizers/setup.py", line 2, in <module>
from setuptools_rust import Binding, RustExtension
ModuleNotFoundError: No module named 'setuptools_rust'

----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-bkflxm4d/tokenizers/

安装模型依赖成功后,查看已安装的依赖。官方推荐transformers 库版本推荐为 4.30.2,torch 推荐使用 2.0 及以上

1
2
#查看安装的依赖
pip list

下载模型

ChatGLM2模型 下载地址

方式一:使用huggingface_hub下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#切换到root用户
sudo -i
cd /opt/ChatGLM2-6B-main
source venv/bin/activate

#新建目录,并进入目录
mkdir -p /opt/ChatGLM2-6B-main/THUDM/chatglm2-6b
cd /opt/ChatGLM2-6B-main/THUDM/chatglm2-6b

#从Hugging Face下载模型
pip install huggingface-hub

#进入python交互环境
python
from huggingface_hub import snapshot_download
snapshot_download(repo_id="THUDM/chatglm2-6b") #若下载报错,初步判断是由于网络问题导致

若使用huggingface_hub的snapshot_download函数下载报错 ConnectionResetError(104, 'Connection reset by peer),请使用下面方式。

方式二:使用Git LFS下载

1
2
3
4
5
6
7
#安装Git LFS
(venv) root@VM-0-13-ubuntu:/opt/ChatGLM2-6B-main# apt install git-lfs

#下载报错,初步判断是由于网络问题导致
(venv) root@VM-0-13-ubuntu:/opt/ChatGLM2-6B-main# git clone https://huggingface.co/THUDM/chatglm2-6b
Cloning into 'chatglm2-6b'...
fatal: unable to access 'https://huggingface.co/THUDM/chatglm2-6b/': gnutls_handshake() failed: Error in the pull function.

若使用Git LFS下载报错,请使用下面方式。

方式三:

步骤1:[点此下载] ChatGLM2-6B模型Hugging Face仓库。将下载 chatglm2-6b.zip 的上传到GPU资源实例的/opt目录下

1
2
3
cd /opt
#解压
unzip chatglm2-6b.zip -d /opt/ChatGLM2-6B-main/THUDM/

步骤2:使用 清华大学云盘 链接下载chatglm2-6b目录下模型权重,将下载的所有文件上传到GPU资源实例的 /opt/ChatGLM2-6B-main/THUDM/chatglm2-6b 目录下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#进入目录
cd /opt/ChatGLM2-6B-main/THUDM/chatglm2-6b

#最终文件列表如下
(venv) root@VM-0-13-ubuntu:/opt/ChatGLM2-6B-main/THUDM/chatglm2-6b# ll -h
total 12G
drwxr-xr-x 2 root root 4.0K Jul 19 14:23 ./
drwxr-xr-x 3 root root 4.0K Jul 19 07:56 ../
-rw-r--r-- 1 root root 1.2K Jul 19 11:32 config.json
-rw-r--r-- 1 root root 2.2K Jul 19 11:32 configuration_chatglm.py
-rw-r--r-- 1 root root 50K Jul 19 11:32 modeling_chatglm.py
-rw-r--r-- 1 root root 4.1K Jul 19 11:32 MODEL_LICENSE
-rw------- 1 root root 16M Jul 19 12:03 nohup.out
-rw-r--r-- 1 root root 1.8G Jul 19 11:47 pytorch_model-00001-of-00007.bin
-rw-r--r-- 1 root root 1.9G Jul 19 14:10 pytorch_model-00002-of-00007.bin
-rw-r--r-- 1 root root 1.8G Jul 19 11:50 pytorch_model-00003-of-00007.bin
-rw-r--r-- 1 root root 1.7G Jul 19 11:53 pytorch_model-00004-of-00007.bin
-rw-r--r-- 1 root root 1.9G Jul 19 11:55 pytorch_model-00005-of-00007.bin
-rw-r--r-- 1 root root 1.8G Jul 19 11:58 pytorch_model-00006-of-00007.bin
-rw-r--r-- 1 root root 1005M Jul 19 12:01 pytorch_model-00007-of-00007.bin
-rw-r--r-- 1 root root 20K Jul 19 11:32 pytorch_model.bin.index.json
-rw-r--r-- 1 root root 15K Jul 19 11:32 quantization.py
-rw-r--r-- 1 root root 8.0K Jul 19 11:32 README.md
-rw-r--r-- 1 root root 9.9K Jul 19 11:32 tokenization_chatglm.py
-rw-r--r-- 1 root root 244 Jul 19 11:32 tokenizer_config.json
-rw-r--r-- 1 root root 995K Jul 19 12:03 tokenizer.model
-rw-r--r-- 1 root root 590 Jul 19 09:46 wget-log

运行测试模型

方式一 命令行

使用命令行交互运行测试模型

1
2
3
4
5
6
7
8
9
10
ubuntu@VM-0-13-ubuntu:~$ sudo -i
root@VM-0-13-ubuntu:~# cd /opt/ChatGLM2-6B-main/
root@VM-0-13-ubuntu:/opt/ChatGLM2-6B-main# source venv/bin/activate
(venv) root@VM-0-13-ubuntu:/opt/ChatGLM2-6B-main# python cli_demo.py
Loading checkpoint shards: 100%|████████████████████████████████████████████████████████████████| 7/7 [00:09<00:00, 1.37s/it]
欢迎使用 ChatGLM2-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序

用户:你好

ChatGLM:你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。

ChatGLM-6B模型加载期间,内存最大用量约13GB,加载完成后内存用量约2GB。ChatGLM-6B模型运行推理期间,显存用量约13GB,GPU使用率接近100%,显卡功耗约90W。

方式二 网页版

使用网页版运行测试模型,使用了Gradio库。

1
2
3
4
5
6
7
8
9
10
ubuntu@VM-0-13-ubuntu:~$ sudo -i
root@VM-0-13-ubuntu:~# cd /opt/ChatGLM2-6B-main/
root@VM-0-13-ubuntu:/opt/ChatGLM2-6B-main# source venv/bin/activate
(venv) root@VM-0-13-ubuntu:/opt/ChatGLM2-6B-main# python web_demo.py
Loading checkpoint shards: 100%|████████████████████████████████████████████████████████████████| 7/7 [00:09<00:00, 1.38s/it]
web_demo.py:89: GradioDeprecationWarning: The `style` method is deprecated. Please set these arguments in the constructor instead.
user_input = gr.Textbox(show_label=False, placeholder="Input...", lines=10).style(
Running on local URL: http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

默认只监听本地7860端口,若想通过IP进行远程访问,修改web_demo.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vim web_demo.py
#最后一行修改为:
demo.queue().launch(share=False, inbrowser=True, server_name='0.0.0.0')

#重新运行
(venv) root@VM-0-13-ubuntu:/opt/ChatGLM2-6B-main# python web_demo.py
Loading checkpoint shards: 100%|████████████████████████████████████████████████████████████████| 7/7 [00:09<00:00, 1.40s/it]
web_demo.py:89: GradioDeprecationWarning: The `style` method is deprecated. Please set these arguments in the constructor instead.
user_input = gr.Textbox(show_label=False, placeholder="Input...", lines=10).style(
Running on local URL: http://0.0.0.0:7860

To create a public link, set `share=True` in `launch()`.

MobaXterm X11 proxy: Unsupported authorisation protocol

打开浏览器,通过 IP:7860 方式进行远程访问

小结

已成功使用命令行交互和网页版运行ChatGLM2-6B模型,对话输出质量和速度可以接受。由于网络原因,下载模型占了整个测试70%以上时间,有待优化。