chatglm3的docker部署
github源码:chatglm3
模型下载:modelscope下载chatglm3-6b。由于模型文件比较大(47G)直接 git clone xx 会导致文件下载不完整,需要先安装lfs
来支持大文件下载:
git lfs install
(允许git下载大文件,linux要先执行sudo apt-get git-lfs
)- chatglm3(47g)模型文件下载,chatglm3-6b使用时间4h左右
1、查看文件大
du -h --max-depth=1
2、时时查看docker容器日志
docker logs -f -t 容器id或name
chatglm3的docker发布
glm3的openai的接口:openai_api_demo/api_server.py 明确指定要使用cuda,所以docker容器必须可用gpu
环境!
1、先构建基础环境python和cuda
(1)py310-cuda12.0镜像构建
docker build -t py310-cuda12.0 -f Dockfile_env .
(2)Dockerfile_env文件内容
# 基础环境
FROM python:3.10.2
# 安装 CUDA 工具包:把nvidia/cuda:12.0.0-devel-ubuntu20.04镜像目录/usr/local/下的内容复制到目标镜像的/usr/local/目录下。
COPY --from=nvidia/cuda:12.0.0-devel-ubuntu20.04 /usr/local/ /usr/local/
# 确保 CUDA 库在运行时可以找到
ENV PATH=/usr/local/nvidia/bin:${PATH}
ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib64:${LD_LIBRARY_PATH}
# 更新系统包并安装 CUDA 运行时所需的依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
&& rm -rf /var/lib/apt/lists/*
# 安装 PyTorch GPU 版本
RUN pip3 install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu118
(3)启动容器,验证安装效果
① 加--gpus all
才可以使用 gpu!!!
② 容器启动
方式一 :
step1:先指定容器名称,并启动
( -d 后台运行)
docker run -itd --name cuda-test --gpus all py310-cuda12.0
step2:再进入容器
docker exec -it cuda-test /bin/bash
方式二:
直接进入无名容器
nvidia-docker run --gpus all -it py310-cuda12.0
③ 容器内测试
python -V # python3.10.2
python
import torch
print(torch.cuda.is_available()) # true
2、叠加chatglm3环境
(1)py310-cuda12.0-glm3 镜像构建
docker build -t py310-cuda12.0-glm3 -f Dockfile_glm .
(2)Dockfile_glm文件内容
FROM py310-cuda12.0
WORKDIR /chatglm3
COPY ./requirements.txt /chatglm3/
RUN pip3 install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
(3)启动容器,验证安装效果
step1:先指定容器名称,并启动
docker run --gpus all -itd --name glm-test py310-cuda12.0-glm3
step2:再进入容器
docker exec -it glm-test /bin/bash
3、chatglm3项目启动
(1)前提
cuda12.0_py310
镜像 + 指定--gpus
在容器内启用cuda环境;- git lfs 大文件模型下载到
Chatglms/models
下; - 修改ChatGLM3/openai_api_demo/api_server.py, 把模型路径改成本地地址:
# set LLM path
# MODEL_PATH = os.environ.get('MODEL_PATH', 'THUDM/chatglm3-6b')
# TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)
# EMBEDDING_PATH = os.environ.get('EMBEDDING_PATH', 'BAAI/bge-m3')
## 2024/7/19 cf修改成绝对路径
import os
# 获取当前文件所在的目录
current_directory = os.path.dirname(__file__)
# 获取父目录
parent_directory = os.path.dirname(current_directory)
MODEL_PATH = os.environ.get('MODEL_PATH', os.path.join(parent_directory, 'models/chatglm3-6b'))
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)
# set Embedding Model path
EMBEDDING_PATH = os.environ.get('EMBEDDING_PATH', os.path.join(parent_directory,'models/bge-large-zh-v1.5'))
(2)启动命令
docker run --gpus all -p 7680:8000 -v /data/algo/cf.chen/ChatGLM3:/chatglm3 -dit --name glm3 py310-cuda12.0-glm3 python /chatglm3/openai_api_demo/api_server.py
(3)访问测试
curl -X POST "http://127.0.0.1:7680/v1/chat/completions" \ -H "Content-Type: application/json" \ -d "{\"model\": \"chatglm3-6b\", \"messages\": [{\"role\": \"system\", \"content\": \"You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the user's instructions carefully. Respond using markdown.\"}, {\"role\": \"user\", \"content\": \"你好,给我讲一个故事,大概100字\"}], \"stream\": false, \"max_tokens\": 100, \"temperature\": 0.8, \"top_p\": 0.8}"
回答效果: