Skip to content

使用 vLLM 部署 Qwen3 通用推理服务

本文介绍如何使用固定版本的 vLLM 镜像部署 Qwen3 通用推理服务。使用 NVIDIA Data Center GPU 时,可以先评估平台的 推理服务基础镜像 | vllm0.11.0、torch2.8.0、cuda12.8、ubuntu22.04;RTX 4090 或需要其它 vLLM 功能时,再准备经过验证的自定义镜像。镜像、模型挂载、GPU 和启动参数仍需通过本文步骤共同验证,不能只根据 vLLM 版本判断兼容性。

注意

本文以 Qwen3-8B 为示例。若改用 Qwen3-14B、Qwen3-32B 或其他 Qwen3 模型,请同步调整 GPU 规格、模型路径、上下文长度和并发参数。若您需要 SGLang 的特定能力,可参考使用 SGLang 部署推理服务

推荐配置

配置项建议
推理类型推理服务
资源类型包年包月资源或 Spot 资源
GPU 起步配置RTX 4090 可用于功能验证;A100、H100、H800、H200 更适合较长上下文或更高并发
推理引擎vLLM。若需要 SGLang 特定能力,例如高吞吐、长上下文优化或 DFlash 推理调优,可改用 SGLang
镜像NVIDIA Data Center GPU 优先使用平台预置 vLLM 0.11.0 镜像;其它 GPU 或版本需求使用自定义 vLLM 镜像
模型文件/infini-data/Qwen3-8B 或共享高性能存储中的 Qwen3-8B 模型目录
监听端口8000
调用端口80
监控端口8000

警告

公共数据仅在部分可用区提供,且为只读挂载。如果当前可用区没有公共数据,或公共数据中没有目标模型,请先将模型文件准备到共享高性能存储,并在创建推理服务时挂载到容器内路径,例如 /mnt/models

选择固定版本的镜像

选择镜像时,先根据 GPU 和功能需求确定一条路径:

  1. 使用 NVIDIA Data Center GPU 做首次功能验证时,选择 推理服务基础镜像 | vllm0.11.0、torch2.8.0、cuda12.8、ubuntu22.04。vLLM 0.11.0 的上游支持矩阵包含 Qwen3 架构,但仍需通过实际服务确认该平台镜像、模型路径、驱动和 GPU 组合能够加载 Qwen3-8B。启动命令不要包含仅在更新版本提供的 --shutdown-timeout

  2. 使用 RTX 4090,或者需要预置版本没有提供的功能时,打开镜像中心。

  3. 参考使用 uv 的 vLLM Dockerfile构建并验证自定义镜像。

  4. 创建推理服务时选择已确定的预置镜像或自定义镜像,并在验证记录中保存实际 vLLM 版本。更换镜像、vLLM、CUDA 或 GPU 后,需要重新验证服务。

重要

请勿在推理服务启动命令中临时安装 vLLM 或下载大型依赖。应使用固定的预置镜像版本,或在自定义镜像中固定推理框架版本。

准备模型路径

本文启动命令默认读取:

language-shell
/infini-data/Qwen3-8B

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

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

language-shell
/mnt/models/Qwen3-8B

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

创建推理服务

进入推理服务创建页。

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

  1. 推理类型:选择推理服务
  2. 资源类型:选择包年包月资源或 Spot 资源。使用 Spot 资源时,请确认业务能接受资源回收导致的短暂不可用。
  3. 实例规格:Qwen3-8B 功能验证可从单卡规格开始。若使用更长上下文、更高并发或更大 Qwen3 模型,请选择更大显存或更多 GPU 的规格。
  4. 镜像:使用 NVIDIA Data Center GPU 时,选择 推理服务基础镜像 | vllm0.11.0、torch2.8.0、cuda12.8、ubuntu22.04;使用 RTX 4090 或需要其它版本时,选择已经验证的自定义镜像。
  5. 存储:挂载公共数据或包含模型文件的共享高性能存储。
  6. 外网访问:首次验证保持关闭。使用同可用区 AICoder 调用内网地址,不需要平台 API Key。
  7. 内网配置:监听端口填写 8000,调用端口填写 80。如需 LLM 场景业务监控,监控端口填写 8000

启动命令

以下命令会启动 OpenAI 兼容的 vLLM 服务。若模型路径不同,请修改 MODEL_PATH

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

export PYTHONUNBUFFERED=1
export MODEL_PATH="${MODEL_PATH:-/infini-data/Qwen3-8B}"
export SERVED_MODEL_NAME="${SERVED_MODEL_NAME:-Qwen3-8B}"

exec vllm serve "${MODEL_PATH}" \
  --host 0.0.0.0 \
  --port 8000 \
  --dtype bfloat16 \
  --tensor-parallel-size 1 \
  --served-model-name "${SERVED_MODEL_NAME}" \
  --max-model-len 8192 \
  --gpu-memory-utilization 0.85 \
  --max-num-seqs 32

注意

--max-model-len 8192 更适合第一次验证服务是否能稳定启动。确认可用后,可根据 GPU 显存和业务需要逐步调高到 1638432768

上述命令使用 vLLM 0.11.0 已提供的参数。平台预置镜像、当前模型路径和所选 GPU 是否能共同运行,仍以服务日志和下文 API 验证为准。--shutdown-timeout 需要 vLLM 0.18.0 或更高版本;只有在已经验证更新版本时才添加该参数。

调用验证

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

Step 1 从 AICoder 获取内网调用地址

  1. 打开与推理服务相同可用区的 AICoder
  2. 进入推理服务详情页,点击调用,复制内网访问地址。
  3. 确认地址使用创建服务时设置的调用端口 80。同可用区内网调用不需要平台 API Key。

在 AICoder 中把地址写入环境变量:

language-shell
export BASE_URL="<推理服务调用地址>"

注意

如果调用地址末尾已经包含 /,下面命令中的路径拼接可能出现双斜线。通常不影响 HTTP 调用,但建议把 BASE_URL 末尾的 / 去掉。

Step 2 检查 OpenAI 兼容接口是否可用

先调用 /v1/models。这一步用于确认地址、认证和服务进程是否可用。

language-shell
curl -X GET "${BASE_URL}/v1/models" \
  -H "Accept: application/json"

如果返回中能看到 Qwen3-8B,说明服务已经暴露 OpenAI 兼容接口。如果连接失败,请确认 AICoder 与服务位于同一可用区、服务状态、内网地址,以及监听端口 8000 与调用端口 80 的映射。

Step 3 发送短文本摘要请求

使用较短的 max_tokens 做第一次文本生成验证。

language-shell
curl -X POST "${BASE_URL}/v1/chat/completions" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "Qwen3-8B",
    "messages": [
      {
        "role": "user",
        "content": "请用三句话总结:大模型推理服务上线前,需要确认模型文件、镜像版本、GPU 显存、监听端口和服务监控。"
      }
    ],
    "temperature": 0.2,
    "max_tokens": 512
  }'

如果返回中包含 choices[0].message.content,说明模型已能正常生成文本。

Step 4 发送代码生成请求

再发送一条稍复杂的代码生成请求,确认模型能处理目标场景。

language-shell
curl -X POST "${BASE_URL}/v1/chat/completions" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "Qwen3-8B",
    "messages": [
      {
        "role": "user",
        "content": "写一个 Python 函数,输入字符串列表,返回出现次数最多的前 3 个字符串。"
      }
    ],
    "temperature": 0,
    "max_tokens": 1024
  }'

Step 5 可选:从外网调用

只有跨可用区或从本地设备调用时,才开启外网访问。先准备平台 API Key,再按以下步骤升级服务:

  1. 进入推理服务详情页,在页面上方点击升级
  2. 开启外网访问,选择默认地址,并将 Auth 配置保持为 Authorization。只有调用链路与该 Header 冲突时,才选择 X-Infini-Auth
  3. 确认镜像、启动命令、存储和端口等其它配置没有被意外修改,然后点击确认升级
  4. 等待服务恢复为运行中,并确认全部实例健康。
  5. 点击调用,复制外网访问地址,然后用下面的请求验证访问。

警告

开启外网访问后,服务可以通过公网访问,且升级会生成新的服务版本。单实例服务在替换实例时可能暂时不可用。不再需要公网调用时,再次升级服务并关闭外网访问。完整安全边界见访问推理服务

language-shell
export PUBLIC_BASE_URL="<推理服务外网访问地址>"
export API_KEY="<API Key>"

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

Step 6 排查常见调用问题

现象可能原因处理方式
外网调用返回 401403API Key 错误,或 Header 名称与服务配置不一致检查 API Key;确认使用 Authorization 还是 X-Infini-Auth
内网连接超时或连接失败服务未运行、AICoder 不在同一可用区、地址或端口错误查看服务状态和内网地址;确认监听端口为 8000、调用端口为 80
返回 model not found请求中的 model--served-model-name 不一致确认启动命令中的 SERVED_MODEL_NAME,或把请求中的 model 改为实际名称
服务异常或重启模型路径错误、显存不足、镜像版本不匹配查看实例日志;先降低 --max-model-len 或换更大显存规格

常见调整

  • 需要更长上下文:逐步调大 --max-model-len,同时观察显存使用率和请求延迟。
  • 需要更高并发:先确认单请求稳定,再通过实例数、GPU 规格和 vLLM 参数逐步扩展。
  • 需要监控指标:创建服务时配置监控端口。详见LLM 场景业务监控
  • 服务停止或升级时请求被切断:确认启动命令使用 exec,并阅读优化推理服务启动命令