本地容器化快速部署GLM-4-9B-chat教程

本文需要有一定的docker 基础知识,且会修改python代码,不是新手向的教程

第一步:下载官方项目

GitHub - THUDM/GLM-4: GLM-4 series: Open Multilingual Multimodal Chat LMs | 开源多语言多模态对话模型

 然后在官方项目的根目录下,添加dockerfile文件,docker file 文件的内容如下

# 使用nvidia/cuda:12.4.1-devel-ubuntu22.04作为基础镜像
FROM nvidia/cuda:12.4.1-devel-ubuntu22.04 AS dev

# 更新包索引并安装Python 3的pip和Git
RUN apt-get update -y \
    && apt-get install -y python3-pip git \
    && rm -rf /var/lib/apt/lists/*

# 运行ldconfig命令以确保CUDA库可以被正确找到
RUN ldconfig /usr/local/cuda-12.4/compat/

# 设置工作目录
WORKDIR /glm4

# 复制文件夹和文件到容器的工作目录
COPY basic_demo /glm4/basic_demo
COPY composite_demo /glm4/composite_demo
COPY finetune_demo /glm4/finetune_demo
COPY LICENSE /glm4/LICENSE
COPY resources /glm4/resources

# 进入到/basic_demo目录
WORKDIR /glm4/basic_demo

# 安装requirements.txt中指定的Python依赖
RUN python3 -m pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

# 回到之前的工作目录
WORKDIR /glm4

# 声明容器将监听的端口
EXPOSE 8000

然后在项目的根目录下,构建容器

docker build -t you_need_name/glm4-9b:tag .

然后等待容器构建成功。

容器构建成功后,需要提前下载好模型。

下载模型后,需要修改openai_api_server.py文件,修改的位置如下。

修改的内容如下,修改这些内容是为了方便在容器启动时,直接设置模型路径,

 

MODEL_PATH = os.environ.get('LOCAL_MODEL_PATH','THUDM/glm-4-9b-chat')
MAX_MODEL_LENGTH = os.environ.get('LOCAL_MAX_MODEL_LENGTH','8192')

修改完成后使用如下docker-compose.yml文件,在该文件的目录下运行 ‘docker compose up -d’命令

version: '3.8'
services:
  glm4_vllm_server:
    image: jjck/glm4-9b:20240606
    runtime: nvidia
    ipc: host
    restart: always
    environment:
      - LOCAL_MODEL_PATH=/glm4/glm-4-9b-chat
      - LOCAL_MAX_MODEL_LENGTH=8192
    ports:
      - "8101:8000"
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/home/aicode/logs/AI_Order/glm-4-9b-chat:/glm4/glm-4-9b-chat"
      - "/home/pythonproject/GLM-4-main/basic_demo:/glm4/basic_demo"
    command: python3 basic_demo/openai_api_server.py
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['0']
              capabilities: [gpu]
  • "/home/aicode/logs/AI_Order/glm-4-9b-chat:/glm4/glm-4-9b-chat" - "/home/pythonproject/GLM-4-main/basic_demo:/glm4/basic_demo"

这两个路径,第一个是模型的存放路径,这个路径根据你的实际情况自行修改。

第二个是代码路径,这个也是根据自身情况自行修改。

或者是这个命令

docker run --runtime nvidia --gpus device=0 \
    --name glm4_vllm_server \
    -p 8101:8000 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /home/aicode/logs/AI_Order/glm-4-9b-chat:/glm4/glm-4-9b-chat \
    -v /home/pythonproject/GLM-4-main/basic_demo:/glm4/basic_demo \
    -itd xxx/glm4-9b:20240606 

我尝试用他们的api_server demo的过程中出现的问题。

用清华官方的这个demo会出现异步线程的问题,导致用户访问异常,异常的日志如下

 

glm4_vllm_api_server-glm4_vllm_server-1  |   File "/usr/local/lib/python3.10/dist-packages/fastapi/routing.py", line 191, in run_endpoint_function
glm4_vllm_api_server-glm4_vllm_server-1  |     return await dependant.call(**values)
glm4_vllm_api_server-glm4_vllm_server-1  |   File "/glm4/basic_demo/openai_api_server.py", line 344, in create_chat_completion
glm4_vllm_api_server-glm4_vllm_server-1  |     async for response in generate_stream_glm4(gen_params):
glm4_vllm_api_server-glm4_vllm_server-1  |   File "/glm4/basic_demo/openai_api_server.py", line 199, in generate_stream_glm4
glm4_vllm_api_server-glm4_vllm_server-1  |     async for output in engine.generate(inputs=inputs, sampling_params=sampling_params, request_id="glm-4-9b"):
glm4_vllm_api_server-glm4_vllm_server-1  |   File "/usr/local/lib/python3.10/dist-packages/vllm/engine/async_llm_engine.py", line 662, in generate
glm4_vllm_api_server-glm4_vllm_server-1  |     async for output in self._process_request(
glm4_vllm_api_server-glm4_vllm_server-1  |   File "/usr/local/lib/python3.10/dist-packages/vllm/engine/async_llm_engine.py", line 756, in _process_request
glm4_vllm_api_server-glm4_vllm_server-1  |     stream = await self.add_request(
glm4_vllm_api_server-glm4_vllm_server-1  |   File "/usr/local/lib/python3.10/dist-packages/vllm/engine/async_llm_engine.py", line 561, in add_request
glm4_vllm_api_server-glm4_vllm_server-1  |     self.start_background_loop()
glm4_vllm_api_server-glm4_vllm_server-1  |   File "/usr/local/lib/python3.10/dist-packages/vllm/engine/async_llm_engine.py", line 431, in start_background_loop
glm4_vllm_api_server-glm4_vllm_server-1  |     raise AsyncEngineDeadError(
glm4_vllm_api_server-glm4_vllm_server-1  | vllm.engine.async_llm_engine.AsyncEngineDeadError: Background loop has errored already.

所以,不要把demo放在生产环境中使用。需要在生产环境的,等官方适配吧

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要下载 Chat-GLM-6B-Int4 模型文件和相应的配置文件。然后,你需要在你的 Linux 系统上安装 PyTorch 和 Transformers 库。你可以使用以下命令安装这两个库: ``` pip install torch pip install transformers ``` 接下来,你需要编写一个 Python 脚本来部署 Chat-GLM-6B-Int4 模型。你可以使用以下代码作为脚本的基础: ```python import torch from transformers import GPT2Tokenizer, GPT2LMHeadModel # 加载模型和分词器 tokenizer = GPT2Tokenizer.from_pretrained('chat-glm-6b-int4/config') model = GPT2LMHeadModel.from_pretrained('chat-glm-6b-int4/model') # 指定设备 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) # 对话循环 while True: # 获取用户输入 user_input = input("You: ") # 把用户输入转换成模型的输入格式 input_ids = tokenizer.encode(user_input, return_tensors='pt').to(device) # 在模型上生成回复 output = model.generate(input_ids, max_length=1000, do_sample=True, temperature=0.7) response = tokenizer.decode(output[0], skip_special_tokens=True) # 输出回复 print("Chat-GLM-6B-Int4: " + response) ``` 在这个脚本中,我们首先加载 Chat-GLM-6B-Int4 模型和相应的分词器。然后,我们检查可用的设备并将模型移动到相应的设备上。最后,我们开始一个对话循环,其中用户输入被转换为模型的输入格式,并在模型上生成回复。回复被解码并输出给用户。 注意,这个脚本只是一个基础示例,你需要根据你的具体需求进行修改。例如,你可能需要添加一个 Web 接口来允许用户通过浏览器与 Chat-GLM-6B-Int4 进行交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值