你的浏览器不支持canvas

做你害怕做的事情,然后你会发现,不过如此。

Docker部署ChatGLM3-6B

时间: 作者: 黄运鑫

本文章属原创文章,未经作者许可,禁止转载,复制,下载,以及用作商业用途。原作者保留所有解释权。


准备工作

  • 操作系统: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-modelsdocker容器需要挂载这两个目录

使用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.7cudnn8
  • 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.pyopenai_api.py

对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。