Skip to content

部署 GLM-4.7-FP8 工具调用与推理服务

提示

本文中的平台预置镜像地址是示例。使用前,请在镜像中心或当前实例的预置镜像列表中确认当前可用区提供了对应仓库及 tag;如果列表中不存在,请改用页面显示的可用镜像地址。替换 Registry 域名并不能保证相同仓库或 tag 在其他环境或可用区中存在。

本文介绍如何使用 vLLM 稳定版镜像部署 GLM-4.7-FP8,并验证普通聊天和工具调用。该方案适合评估 GLM-4.7 的代码、推理、工具调用和智能体任务能力。

警告

GLM-4.7-FP8 是版本敏感模型。请使用 vLLM 0.24.0 或更新稳定版;更早的通用 vLLM 镜像可能不支持 GLM-4.7 的 tool parser、reasoning parser 或 speculative decoding 参数。

推荐配置

配置项建议
推理类型推理服务
资源类型包年包月资源或 Spot 资源
GPU 起步配置H200 4 卡优先;H100、H800 可从 4 卡或 8 卡规格验证;不建议 RTX 4090 或单卡 A100
推理引擎vLLM 0.24.0 或更新稳定版
镜像按本文 Dockerfile 构建 GLM-4.7-FP8 专用 vLLM 稳定版镜像
模型文件/infini-data/GLM-4.7-FP8 或共享高性能存储中的 GLM-4.7-FP8 模型目录
监听端口8000
监控端口8000

信息

官方 vLLM 示例使用 --tensor-parallel-size 4。如果您使用 8 卡规格,可根据显存、吞吐和服务稳定性调整 tensor parallel 参数。

准备模型路径

本文启动命令默认读取:

language-shell
/infini-data/GLM-4.7-FP8

/infini-data/ 是平台公共数据的容器内挂载路径,用于只读访问平台维护的公共模型和数据集。公共数据仅在部分可用区提供;创建推理服务时,还需要在存储配置中勾选挂载公共数据,容器内才会出现该路径。

如果当前可用区没有公共数据,或公共数据中没有目标模型,请将模型放在共享高性能存储中,并在创建推理服务时挂载到容器内路径。例如:

language-shell
/mnt/models/GLM-4.7-FP8

随后在启动命令中把 MODEL_PATH 改为实际路径。

构建 vLLM 稳定版镜像

参考以下 Dockerfile 构建 GLM-4.7-FP8 专用 vLLM 稳定版镜像。

language-dockerfile
FROM ghcr.io/astral-sh/uv:latest AS builder

FROM cr.infini-ai.com/infini-ai/ubuntu:24.04

COPY --from=builder /uv /uvx /bin/

ENV UV_COMPILE_BYTECODE=1
ENV VIRTUAL_ENV=/opt/vllm-env
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

WORKDIR /app

RUN --mount=type=cache,target=/root/.cache/uv \
    uv venv "$VIRTUAL_ENV" && \
    uv pip install --upgrade \
      "vllm==0.24.0" \
      --torch-backend=auto && \
    uv pip check && \
    vllm --version

警告

该 Dockerfile 会下载 vLLM、PyTorch 和 CUDA 相关 wheel。本文不手动强制 cu130,而是保留 --torch-backend=auto,让 uv 尽量选择与环境兼容的 PyTorch CUDA 后端。镜像首次运行后,请通过服务日志确认 PyTorch CUDA 版本和 GPU 可用性;不要强制安装 CUDA 13 wheel,除非目标运行环境的驱动版本已经满足 CUDA 13 要求。若镜像中心无法访问所需 Python 包源,请改用在开发机中使用 Dockerfile 构建镜像,或在外部构建后导入镜像

创建推理服务

进入推理服务创建页。

按以下方式填写关键配置:

  1. 推理类型:选择推理服务
  2. 资源类型:选择包年包月资源或 Spot 资源。使用 Spot 资源时,请确认调用方具备超时、重试或降级策略。
  3. 实例规格:优先选择 H200 4 卡规格。若使用 H100 或 H800,可从 4 卡或 8 卡规格开始验证。
  4. 镜像:选择已构建的 GLM-4.7-FP8 专用 vLLM 稳定版镜像。
  5. 存储:挂载公共数据或包含 GLM-4.7-FP8 的共享高性能存储。
  6. 内网配置:监听端口填写 8000。如需 LLM 场景业务监控,监控端口也填写 8000

启动命令

以下命令会启动 OpenAI 兼容的 vLLM 服务,并启用 GLM-4.7 的工具调用与 reasoning parser。

language-shell
#!/bin/bash
set -euo pipefail

export PYTHONUNBUFFERED=1
export MODEL_PATH="${MODEL_PATH:-/infini-data/GLM-4.7-FP8}"
export SERVED_MODEL_NAME="${SERVED_MODEL_NAME:-glm-4.7-fp8}"

exec vllm serve "${MODEL_PATH}" \
  --host 0.0.0.0 \
  --port 8000 \
  --tensor-parallel-size 4 \
  --speculative-config.method mtp \
  --speculative-config.num_speculative_tokens 1 \
  --tool-call-parser glm47 \
  --reasoning-parser glm45 \
  --enable-auto-tool-choice \
  --served-model-name "${SERVED_MODEL_NAME}" \
  --max-model-len 16384 \
  --gpu-memory-utilization 0.85 \
  --shutdown-timeout 60

信息

如果您使用的规格不是 4 卡,请根据实际 GPU 数量和显存调整 --tensor-parallel-size。如果启动失败,先查看实例日志中的显存、parser、speculative config 和模型路径报错。

调用验证

推理服务运行后,按以下顺序验证服务。

Step 1 获取调用地址和认证方式

  1. 进入推理服务详情页。
  2. 点击调用,复制推理服务调用地址。
  3. 如果使用外网访问,请准备 API Key。默认情况下,请求需要使用 Authorization: Bearer <API Key>
  4. 如果创建服务时将 Auth Header 配置为 X-Infini-Auth,请把下面示例中的 Authorization Header 改为 X-Infini-Auth
language-shell
export BASE_URL="<推理服务调用地址>"
export API_KEY="<API Key>"

Step 2 检查模型列表

language-shell
curl -X GET "${BASE_URL}/v1/models" \
  -H "Authorization: Bearer ${API_KEY}"

如果返回中能看到 glm-4.7-fp8,说明服务已经暴露 OpenAI 兼容接口。

Step 3 验证普通聊天

language-shell
curl -X POST "${BASE_URL}/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${API_KEY}" \
  --data '{
    "model": "glm-4.7-fp8",
    "messages": [
      {
        "role": "user",
        "content": "请用三句话说明 GLM-4.7 适合哪些代码和工具调用场景。"
      }
    ],
    "temperature": 0.7,
    "max_tokens": 1024
  }'

Step 4 验证工具调用

以下请求定义一个模拟天气查询工具。模型应返回工具调用,而不是直接编造天气。

language-shell
curl -X POST "${BASE_URL}/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${API_KEY}" \
  --data @- <<'JSON'
{
  "model": "glm-4.7-fp8",
  "messages": [
    {
      "role": "user",
      "content": "帮我查询上海今天的天气,并告诉我是否适合夜跑。"
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "查询指定城市的天气。",
        "parameters": {
          "type": "object",
          "properties": {
            "city": {
              "type": "string",
              "description": "城市名称,例如上海。"
            }
          },
          "required": ["city"]
        }
      }
    }
  ],
  "tool_choice": "auto",
  "temperature": 0,
  "max_tokens": 1024
}
JSON

如果返回中包含 tool_calls,说明工具调用 parser 基本可用。真实业务中,您的服务端还需要执行工具函数,并把工具结果作为下一轮消息传回模型。

Step 5 排查常见问题

现象可能原因处理方式
启动命令不识别 glm47 或 speculative 参数vLLM 版本过旧确认镜像使用 vLLM 0.24.0 或更新稳定版,并查看 vllm --version
日志提示 NVIDIA driver too old,或 torch.cuda.is_available()False镜像中的 PyTorch CUDA 后端与运行环境驱动不匹配查看镜像内 torch.version.cuda 和运行日志;重新构建时使用与目标驱动兼容的 PyTorch CUDA 后端,优先保留 --torch-backend=auto;不要强制安装 CUDA 13 wheel,除非目标运行环境驱动满足 CUDA 13 要求
模型加载失败MODEL_PATH 错误,或公共数据未挂载检查公共数据可用区和存储配置
显存不足或初始化很慢规格不足、TP 参数不匹配或上下文过长降低 --max-model-len,或使用更多 GPU/更大显存规格
工具调用没有返回 tool_calls启动命令缺少 tool parser,或请求工具定义不符合 OpenAI 格式确认包含 --tool-call-parser glm47--enable-auto-tool-choice,检查请求 JSON

Thinking 参数提示

GLM-4.7 默认适合复杂推理和工具调用。若某些低延迟请求不需要思考模式,可在请求中添加:

language-json
{
  "chat_template_kwargs": {
    "enable_thinking": false
  }
}

如果需要在多轮智能体任务中保留模型思考过程,请先确认所选推理引擎是否支持该能力。