准备工作
- 操作系统:CentOS 7
- 浏览器访问
https://github.com/THUDM/ChatGLM3
下载代码 - 浏览器访问
https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/files
下载模型文件,需要先安装lfs
才能下载大文件:
git lfs install
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
- 模型大小24G,下载很慢,下载后删除
.git
文件夹可以减少11G空间 - 将代码和模型上传至主机,我上传的代码目录为
/home/deploy/ChatGLM3/ChatGLM3
,模型目录为/home/deploy/ChatGLM3/chatglm3-6b-models
,docker
容器需要挂载这两个目录
使用docker启动环境
- 可以使用CPU或GPU启动,推荐使用GPU,对话速度更快
使用CPU启动
- 如果主机没有显卡或显卡不满足要求,可以使用CPU启动容器(根据实际代码文件和模型文件的目录,修改
-v
中的路径):
//使用CPU启动
docker run --restart always -it -d -p 8501:8501 -p 8000:8000 --name chatglm3 \
-v /home/deploy/ChatGLM3/ChatGLM3:/ChatGLM3 \
-v /home/deploy/ChatGLM3/chatglm3-6b-models:/chatglm3-6b \
python:3.11.6
使用GPU启动
- 宿主机需要安装NVIDIA驱动,不需要安装cuda和cudnn,因为
pytorch/pytorch:2.0.1-cuda11.7-cudnn8-devel
这个镜像内已经包含cuda11.7
和cudnn8
- 用
nvidia-smi
命令查看支持的cuda版本,要求cuda版本>=11.7,如下可以看到CUDA Version: 12.2
满足要求:
[root@localhost ~]# nvidia-smi
Tue Dec 26 15:02:39 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03 Driver Version: 535.129.03 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 Tesla P100-PCIE-16GB Off | 00000000:05:00.0 Off | 0 |
| N/A 36C P0 33W / 250W | 10950MiB / 16384MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
| 1 Tesla P100-PCIE-16GB Off | 00000000:08:00.0 Off | 0 |
| N/A 36C P0 31W / 250W | 12190MiB / 16384MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
| 2 Tesla P100-PCIE-16GB Off | 00000000:09:00.0 Off | 0 |
| N/A 37C P0 33W / 250W | 12190MiB / 16384MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
| 3 Tesla P100-PCIE-16GB Off | 00000000:84:00.0 Off | 0 |
| N/A 39C P0 32W / 250W | 11410MiB / 16384MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
- 使用GPU启动容器(根据实际代码文件和模型文件目录,修改
-v
中的路径):
//使用GPU启动
docker run --restart always -it -d -p 8501:8501 -p 8000:8000 --name chatglm3 \
-v /home/deploy/ChatGLM3/ChatGLM3:/ChatGLM3 \
-v /home/deploy/ChatGLM3/chatglm3-6b-models:/chatglm3-6b \
--gpus=all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all \
pytorch/pytorch:2.0.1-cuda11.7-cudnn8-devel
- 如果
--gpus all
报错如下:
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
- 说明需要安装
nvidia-container-runtime
才能使用GPU,安装后记得执行sudo systemctl restart docker
重启docker
启动ChatGLM3
安装代码依赖
- 进入容器:
docker exec -it chatglm3 bash
- 进入目录:
cd /ChatGLM3
,这个目录为宿主机代码在容器内的映射路径 - 安装依赖:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt
启动交互页面
- 进入容器:
docker exec -it chatglm3 bash
- 根据容器映射的路径,修改
/ChatGLM3/basic_demo/web_demo2.py
中的模型路径:- 找到
MODEL_PATH = os.environ.get('MODEL_PATH', 'THUDM/chatglm3-6b')
- 改为
MODEL_PATH = os.environ.get('MODEL_PATH', '/chatglm3-6b')
- 找到
- 进入目录:
cd /ChatGLM3/basic_demo
- 执行:
streamlit run web_demo2.py
启动交互页面 - 如果是多个GPU,根据
web_demo2.py
文件中的注释修改GPU数量 - 启动后通过浏览器访问
http://ip:8501
即可使用,第一次访问会加载模型文件,需要等待加载完成
启动API服务
- 如果不需要交互页面,只是想使用api接口,则需要启动
openai_api.py
- 修改
/ChatGLM3/openai_api_demo/openai_api.py
中的模型路径:- 找到
MODEL_PATH = os.environ.get('MODEL_PATH', 'THUDM/chatglm3-6b')
- 改为
MODEL_PATH = os.environ.get('MODEL_PATH', '/chatglm3-6b')
- 找到
- 进入目录
cd /ChatGLM3/openai_api_demo
- 执行
python openai_api.py
,启动成功如下:
[root@localhost ChatGLM3]# python openai_api.py
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:06<00:00, 1.01it/s]
INFO: Started server process [29]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
多主机部署时,通过DockerFile生成镜像
-
使用
Dockerfile
生成镜像,在其他服务器再部署时,免去pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt
这一步安装依赖的过程,可以直接启动 -
Dockerfile
内容如下,这里用的是GPU环境:
FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-devel
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
#添加代码,仅用于安装依赖
ADD ChatGLM3 /ChatGLM3
# 设置工作目录
WORKDIR /ChatGLM3
# 安装依赖
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt
- 执行
docker build -t my-chatglm3:1.0.0 .
创建镜像,完成后执行docker images
查看是否创建成功,如下:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-chatglm3 1.0.0 9ea4121255bc 3 days ago 13.8GB
- 执行
docker save -o image-chatglm3.tar my-chatglm3:1.0.0
将镜像导出到当前目录 -
将镜像文件上传至其他主机后,执行
docker load -i image-chatglm3.tar
导入镜像,导入后执行docker images
查看是否导入成功 - 执行命令启动容器:
docker run --restart always -it -d -p 8501:8501 -p 8000:8000 \
--name chatglm3 \
-v /home/deploy/ChatGLM3/ChatGLM3:/ChatGLM3 \
-v /home/deploy/ChatGLM3/chatglm3-6b-models:/chatglm3-6b \
--gpus=all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all \
my-chatglm3:1.0.0
- 执行
docker exec -it chatglm3 bash
进入容器,根据需要启动web_demo2.py
或openai_api.py