前言

GLM-4.7-Flash 是智谱 AI 推出的一款高性能大语言模型。本文将详细介绍如何在 Ubuntu 22.04 + CUDA 12.4 环境下,使用 vLLM 框架部署 GLM-4.7-Flash 模型,支持双卡推理和工具调用功能。

环境准备

硬件要求

  • GPU: 2x NVIDIA L20 48GB
  • 内存: 至少 128GB
  • 存储: 至少 200GB(用于模型存储)

软件环境

# 操作系统
Ubuntu 22.04 LTS

# CUDA 版本
CUDA 12.4

# Docker 版本
Docker 24.0+
Docker Compose 2.0+

Dockerfile 配置

创建 Dockerfile 文件:

FROM vllm/vllm-openai:nightly
RUN pip install transformers==5.0.0 -i https://mirrors.aliyun.com/pypi/simple/

说明:

  • 基于 vllm/vllm-openai:nightly 镜像,这是 vLLM 官方提供的兼容 OpenAI API 的镜像
  • 安装 transformers==5.0.0 以支持 GLM 模型的加载
  • 使用阿里云镜像源加速 pip 安装

构建镜像

docker build -t glm-4.7-custom .

模型准备

下载 GLM-4.7-Flash 模型文件到 ./models 目录:

mkdir -p ./models/GLM-4.7-Flash
# 将模型文件放入该目录

确保目录结构如下:

./models/GLM-4.7-Flash/
├── config.json
├── tokenizer.model
├── tokenizer_config.json
├── chat_template.jinjia
└── ...

启动服务

完整启动命令

sudo docker run -itd \
  -e NCCL_DEBUG=INFO \
  -e NCCL_SHM_DISABLE=0 \
  -e OMP_NUM_THREADS=1 \
  -e CUDA_VISIBLE_DEVICES=0,1 \
  -e CUDA_DEVICE_ORDER=PCI_BUS_ID \
  --gpus all \
  -p 9998:8000 \
  --shm-size 128GB \
  -v ./models:/models \
  glm-4.7-custom:latest \
  --model /models/GLM-4.7-Flash \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.90 \
  --max-model-len 100000 \
  --served-model-name GLM-4.7-Flash \
  --reasoning-parser glm45 \
  --chat-template /models/GLM-4.7-Flash/chat_template.jinjia \
  --enable-auto-tool-choice \
  --tool-call-parser glm47 \
  --quantization fp8 \
  --generation-config vllm \
  --chat-template-content-format openai

参数详解

参数 说明
-e NCCL_DEBUG=INFO 启用 NCCL 调试信息输出
-e NCCL_SHM_DISABLE=0 启用共享内存通信
-e OMP_NUM_THREADS=1 设置 OpenMP 线程数为 1
-e CUDA_VISIBLE_DEVICES=0,1 指定使用 GPU 0 和 1
--gpus all 容器访问所有 GPU
-p 9998:8000 端口映射,宿主机 9998 映射到容器 8000
--shm-size 128GB 设置共享内存大小
-v ./models:/models 挂载模型目录

vLLM 参数详解

参数 说明
--model 模型路径
--tensor-parallel-size 2 张量并行度,使用 2 张 GPU
--gpu-memory-utilization 0.90 GPU 显存利用率 90%
--max-model-len 100000 最大序列长度
--served-model-name 服务对外暴露的模型名称
--reasoning-parser glm45 推理解析器(GLM-4.5 格式)
--chat-template 聊天模板文件路径
--enable-auto-tool-choice 启用自动工具选择
--tool-call-parser glm47 工具调用解析器(GLM-4.7 格式)
--quantization fp8 使用 FP8 量化
--generation-config vllm 生成配置使用 vLLM 格式
--chat-template-content-format openai 聊天内容格式兼容 OpenAI

测试服务

检查服务状态

# 查看容器日志
docker logs -f <container_id>

# 检查健康状态
curl http://localhost:9998/health

API 调用示例

curl http://localhost:9998/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "GLM-4.7-Flash",
    "messages": [
      {"role": "user", "content": "你好,请介绍一下你自己"}
    ],
    "temperature": 0.7
  }'

Python 调用示例

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:9998/v1",
    api_key="dummy"
)

response = client.chat.completions.create(
    model="GLM-4.7-Flash",
    messages=[
        {"role": "user", "content": "写一首关于春天的诗"}
    ],
    temperature=0.7,
    max_tokens=512
)

print(response.choices[0].message.content)

常见问题

1. 显存不足

调整 --gpu-memory-utilization--max-model-len 参数

2. NCCL 通信错误

确保 --shm-size 设置足够大,推荐 128GB+

3. 模型加载慢

首次启动需要加载模型到显存,耐心等待

总结

通过 vLLM 部署 GLM-4.7-Flash 可以获得高性能的推理服务,支持 OpenAI 兼容的 API 接口,方便集成到现有应用中。双卡张量并行可以有效提升推理吞吐量,FP8 量化进一步降低显存占用。在 2 张 NVIDIA L20 48GB 显卡上,该配置可以稳定运行并支持长文本推理。

更多推荐