27B 超越 397B,Qwen3.6 模型 vLLM vs SGLang 部署指南与性能表现

0 阅读12分钟

Qwen 团队最新开源 Qwen3.6-27B 稠密多模态模型,在智能体编程任务上直接超过了前代 Qwen3.5-397B-A17B。在 SWE-bench、Terminal-Bench 等一系列基准中,它以更小的参数规模大幅完成了对更大模型的超越,让“模型规模与能力线性增长”的经验不断被打破。

qwen3.6_27b_score

从工程视角看,27B 稠密模型的规格既没有 MoE 架构的路由与调度复杂度,也没有超大模型那种多机分片带来的部署负担,但又足够强大,可以稳定承载高质量的代码生成、推理与多模态能力。这使得它天然适合作为一个“易于部署的旗舰模型规格”,进入真实生产环境。

本文将以 GPUStack 为统一部署管理入口,分别使用 vLLM 和 SGLang 对 Qwen3.6-27B 进行部署,提供完整部署测试流程,包括环境准备、模型加载、启动参数配置以及基准压测,对两种推理后端的实际表现做一轮对比,作为一份可以直接复现的部署实践参考。

GPUStack 安装与集群初始化

GPUStack 是一个开源 GPU 集群管理与 AI 模型服务平台,旨在高效部署 AI 模型。它可以配置并编排多种推理引擎——如 vLLM、SGLang、TensorRT-LLM,甚至自定义引擎——以在 GPU 集群上实现最佳性能。核心功能包括多 GPU 集群管理可插拔推理引擎架构Day 0 模型支持性能优化配置(低延迟/高吞吐)、以及企业级运维能力,如故障恢复、负载均衡、监控与权限管理。

GPUStack 可以帮助我们高效地管理 vLLM、SGLang 等推理引擎,并推动模型从部署走向企业生产落地运营。在开始部署 Qwen3.6 之前,首先完成 GPUStack 控制面的安装,并将 NVIDIA GPU 节点纳入管理。

准备容器环境

GPUStack 以容器方式运行,因此需要提前准备好容器运行环境(如 Docker、Podman 或 Kubernetes)。本文以 Docker 为例进行说明。

在各节点上安装 Docker,确保服务已正常启动:

docker info

启动 GPUStack Server

GPUStack Server 无需依赖 GPU,可运行在普通 CPU 节点上,也可运行在 GPU 节点。本文以两台双卡 NVIDIA 4090 48G 节点为实验环境,在该节点上启动 GPUStack Server 容器:

sudo docker run -d --name gpustack \
  --restart unless-stopped \
  -p 80:80 \
  --volume gpustack-data:/var/lib/gpustack \
  swr.cn-south-1.myhuaweicloud.com/gpustack/gpustack:v2.1.2 \
  --debug --bootstrap-password GPUStack@123

关键参数说明:

  • -p 80:80:用于对外暴露 Web 控制台端口;如需修改为其他端口(例如 9999),可调整为 -p 9999:80。
  • --volume:持久化平台数据(包括模型服务、计量数据、API Key 等)
  • --bootstrap-password:初始化 admin 用户密码
  • --debug:开启调试日志,便于排查问题

容器启动后,可以通过日志确认服务是否正常运行:

docker logs -f gpustack

访问控制台并初始化

打开浏览器访问:http://<Server 主机 IP>:80

使用默认账号登录:

  • 用户名:admin
  • 密码:GPUStack@123

登录后,首先创建一个 Docker 类型的集群,用于统一管理后续接入的 GPU 节点。

image-20260404155239420

添加 NVIDIA GPU Worker 节点

在集群创建完成后,可以接入 NVIDIA GPU 节点。

在添加节点之前,先完成基础环境检查。

(1)驱动版本检查

在目标节点上执行以下命令:

nvidia-smi

该命令会显示当前安装的 NVIDIA 驱动版本。请确认驱动版本 ≥ 575,以保证对 Qwen 3.6 模型的兼容性和稳定性。

(2)Nvidia Container Toolkit 检查

执行以下命令检查 Docker 是否正确配置了 Nvidia Container Toolkit

sudo docker info 2>/dev/null | grep -q "Runtime.*nvidia" && echo "Nvidia Container Toolkit OK" || (echo "Nvidia Container Toolkit not configured"; exit 1)
  • 该命令会从 docker info 输出中查找是否存在 nvidia 运行时配置。
  • 如果输出 "Nvidia Container Toolkit OK",说明 Docker 已正确配置,可在容器中访问 GPU。
  • 如果输出 "Nvidia Container Toolkit not configured",则说明未正确配置,需要安装并启用 Nvidia Container Toolkit,否则推理容器无法使用 GPU 资源。
(3)接入 Worker 节点

在 GPUStack 控制台中,选择添加节点(Worker),并复制系统生成的接入命令,在目标节点执行。

image-20260404154936516

该命令本质上会启动一个 Worker 容器,并自动注册到 Server。

(4)验证 Worker 状态

节点接入后,可以在节点上查看容器日志:

docker logs -f gpustack

同时,在 GPUStack 控制台中也可以看到节点状态是否为 Ready

至此,GPUStack 的控制面已成功部署,NVIDIA GPU 节点也顺利接入集群,并能够正常采集 GPU 名称、索引、厂商信息、温度、利用率及显存使用等指标。接下来即可在该环境中部署具体的推理服务。

image-20260423003638002

添加自定义 vLLM 和 SGLang 版本

GPUStack 支持可插拔的推理引擎架构,允许自定义推理后端及其版本,用于引入 GPUStack 未内置的 vLLM / SGLang / MindIE 版本,或接入其他自定义推理引擎镜像。

为了部署 Qwen3.6 模型,需要添加 vLLM 最新发布的 v0.19.1 和 SGLang 最新发布的 v0.5.10.post1 版本。

vLLM

推理后端菜单,编辑 vLLM,在版本配置中选择添加版本,添加一个新的 vLLM 版本,指向 vLLM 官方镜像:

配置
版本0.19.1
镜像名称vllm/vllm-openai:v0.19.1
框架CUDA
覆盖镜像入口命令(ENTRYPOINT)vllm serve
执行命令{{model_path}} --host {{worker_ip}} --port {{port}} --served-model-name {{model_name}}

自定义添加 vLLM 0.19.1 配置如图所示:

image-20260422225637546

SGLang

推理后端菜单,编辑 SGLang,在版本配置中选择添加版本,添加一个新的 SGLang 版本,指向 SGLang 官方镜像:

配置
版本0.5.10.post1
镜像名称lmsysorg/sglang:v0.5.10.post1
框架CUDA
覆盖镜像入口命令(ENTRYPOINT)sglang serve
执行命令--model-path {{model_path}} --host {{worker_ip}} --port {{port}}

自定义添加 SGLang 0.5.10.post1 配置如图所示:

image-20260422225606789

注意:

  1. GPUStack 会自动调用主机容器运行时拉取容器镜像,需要确保 Worker 节点可访问 Docker Hub,或者提前拉取好并重新 tag,并按需修改 UI 配置中的镜像地址;
  2. 保持执行命令中的 {{}} 变量内容不变,此为模板化配置。

也可以切换到 YAML 模式,直接使用以下的 YAML 导入(公众号复制可能存在特殊格式,可以发送给 AI 重新整理 YAML 格式):

vLLM

backend_name: vLLM
version_configs:
  0.19.1-custom:
    image_name: vllm/vllm-openai:v0.19.1
    entrypoint: vllm serve
    run_command: >-
      {{model_path}} --host {{worker_ip}} --port {{port}} --served-model-name
      {{model_name}}
    env: {}
    custom_framework: cuda

SGLang

backend_name: SGLang
version_configs:
  0.5.10.post1-custom:
    image_name: lmsysorg/sglang:v0.5.10.post1
    entrypoint: sglang serve
    run_command: '--model-path {{model_path}} --host {{worker_ip}} --port {{port}}'
    env: {}
    custom_framework: cuda

注意:如果当前已经有其它自定义版本,需要将其它自定义版本一同添加在 version_configs 中一起导入。

image-20260422225937866

部署 Qwen 3.6 模型

vLLM 和 SGLang 均已提供关于 Qwen3.6 模型的部署与使用教程,详情可参考:

vLLM

docs.vllm.ai/projects/re…

SGLang

docs.sglang.io/cookbook/au…

以下将介绍在 GPUStack 上部署 Qwen3.6 模型的配置流程。

  1. 在在线环境下,可直接通过 HuggingFace 或 ModelScope 搜索 Qwen3.6 模型并进行部署,具体步骤参考下方。

  2. 在离线环境中,需要提前下载好模型权重,并将其分发到所有 Worker 节点,同时挂载到对应的 Worker 容器中。随后,在 GPUStack 控制台 - 模型文件菜单中,选择添加模型文件 - 本地路径,填写对应的模型权重路径。需要注意,这里填写的应为容器内路径,例如:

image-20260422230924087

联网环境:在 GPUStack 控制台 - 部署菜单下,选择 部署模型 → ModelScope,直接搜索 Qwen3.6 模型进行部署。

离线环境:可从 GPUStack 控制台 - 模型文件菜单中,选择已添加的 Qwen3.6 模型进行部署。

此处部署 Qwen/Qwen3.6-27B 模型,建议至少 80GB 显存(部署 Qwen/Qwen3.5-35B-A3B 配置一致):

vLLM

  • 后端:选择 vLLM

  • 版本:选择前面自定义添加的 0.19.1-custom

  • GPU:2 块 4090 48GB GPU

使用以下后端参数启动,后端参数支持单行或多行形式(注意 --tensor-parallel-size 2 已设置双卡张量并行,请确保有两块 GPU 可分配;其它环境请根据实际情况调整并行策略):

--tensor-parallel-size 2 --mm-encoder-tp-mode data --mm-processor-cache-type shm --reasoning-parser qwen3 --enable-auto-tool-choice --tool-call-parser qwen3_coder --speculative-config '{"method":"mtp","num_speculative_tokens":2}' --default-chat-template-kwargs '{"enable_thinking": false}'

SGLang

  • 后端:选择 SGLang
  • 版本:选择前面自定义添加的 0.5.10.post1-custom
  • GPU:2 块 4090 48GB GPU

使用以下后端参数和环境变量启动,后端参数支持单行或多行形式(注意 --tp-size 2 已设置双卡张量并行,请确保有两块 GPU 可分配;其它环境请根据实际情况调整并行策略):

# 后端参数
--tp-size 2 --reasoning-parser qwen3 --tool-call-parser qwen3_coder --speculative-algorithm EAGLE --speculative-num-steps 3 --speculative-eagle-topk 1 --speculative-num-draft-tokens 4 --mamba-scheduler-strategy extra_buffer --mem-fraction-static 0.9

# 环境变量
SGLANG_ENABLE_SPEC_V2=1

等待模型启动时,可以在操作中点击查看日志,实时观察启动过程:

vLLM

image-20260422231949603

SGLang

image-20260422232027553

当模型实例状态显示为 Running 时,说明模型已经成功启动,可以进行后续的测试。

image-20260422232108663

模型测试

试验场

性能对比
文本生成

vLLM:70 Tokens/s

SGLang:82 Tokens/s

image-20260422232314609

图像理解

vLLM:51 Tokens/s

SGLang:51 Tokens/s

image-20260422232622108

基准测试

通过 GPUStack 提供的基准测试功能对模型进行一键性能压测,此处选择吞吐模式:

image-20260422233607153

image-20260423003938203

压测结果对比如下,在并发吞吐压测场景,vLLM 的吞吐性能大幅超越 SGLang:

image-20260423000911007

API 调用

GPUStack 控制台 - 路由菜单中,选择对应模型,点击操作 → API 接入信息,即可查看模型 API 的调用说明:

image-20260422232800351

  • 接入地址:统一通过 GPUStack 的认证 API 入口访问。
  • 模型名称:调用时在请求中填写对应的 model。
  • API 密钥:用于身份认证和权限校验。可按指引跳转到API 密钥管理页面创建 API Key,并可设置访问控制,仅允许访问指定模型。

image-20260422232903776

在试验场右上角点击查看代码,即可根据当前输入和参数设置,动态生成调用该模型的示例代码:

image-20260422232949551

思考模式

vLLM 已通过 --default-chat-template-kwargs '{"enable_thinking": false}' 启动参数默认关闭思考。

使用 cURL 测试时,vLLM 可以通过 "chat_template_kwargs": {"enable_thinking": true} 开启思考,示例如下(注意修改 URL,Bearer token 和 model):

curl http://192.168.50.15/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer gpustack_55cf6e779eb843fc_0205c5e2543415dd29ab8b68515aa51e" \
-d '{
  "max_tokens": 4096,
  "model": "Qwen3.6-27B-vLLM",
  "messages": [
    {
      "role": "user",
      "content": "鸡兔同笼问题,40个头,130只脚,分别有几只鸡和兔子?"
    }
  ],
  "chat_template_kwargs": {"enable_thinking": true}
}' | jq

SGlang 默认开启思考,cURL 可以通过 "chat_template_kwargs": {"enable_thinking": false} 关闭思考,示例如下(注意修改 URL,Bearer token 和 model):

curl http://192.168.50.15/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer gpustack_55cf6e779eb843fc_0205c5e2543415dd29ab8b68515aa51e" \
-d '{
  "max_tokens": 4096,
  "model": "Qwen3.6-27B-SGLang",
  "messages": [
    {
      "role": "user",
      "content": "鸡兔同笼问题,40个头,130只脚,分别有几只鸡和兔子?"
    }
  ],
  "chat_template_kwargs": {"enable_thinking": false}
}' | jq
工具调用

安装 OpenAI 依赖:

pip install openai

创建测试 Python 脚本:

vim toolcalling.py

填写以下内容(注意根据实际环境修改 base_url、api_key 以及两处 model 参数):

from openai import OpenAI
import json

client = OpenAI(
    base_url="http://192.168.50.15/v1",
    api_key="gpustack_55cf6e779eb843fc_0205c5e2543415dd29ab8b68515aa51e"
)

# Define tools
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather for a location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "City name, e.g. 'San Francisco, CA'"
                    },
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "Temperature unit"
                    }
                },
                "required": ["location"]
            }
        }
    }
]

# Step 1: Send user message with tools
response = client.chat.completions.create(
    model="Qwen3.6-27B-vLLM",
    messages=[
        {"role": "user", "content": "What is the weather in Tokyo today?"}
    ],
    tools=tools,
    max_tokens=1024
)

message = response.choices[0].message

# Step 2: Process tool calls
if message.tool_calls:
    tool_call = message.tool_calls[0]
    print(f"Tool: {tool_call.function.name}")
    print(f"Args: {tool_call.function.arguments}")
    
    # Step 3: Feed back tool result and get final answer
    response = client.chat.completions.create(
        model="Qwen3.6-27B-vLLM",
        messages=[
            {"role": "user", "content": "What is the weather in Tokyo today?"},
            message,  # assistant's tool call message
            {
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": json.dumps({"temperature": 22, "condition": "Partly cloudy", "unit": "celsius"})
            }
        ],
        tools=tools,
        max_tokens=1024
    )

    print(f"\nFinal answer: {response.choices[0].message.content}")

分别将模型名称修改为 Qwen3.6-27B-vLLMQwen3.6-27B-SGLang 并进行测试:

python toolcalling.py

image-20260422233301160

总结

GPUStack 采用可插拔的推理引擎架构,将平台与具体推理引擎解耦。当有新模型发布且依赖特定版本或定制推理环境时,可以直接通过接入对应的引擎镜像或自定义后端来完成部署,而不需要等待平台侧适配或升级。

这样做的好处是,在实际使用中可以更灵活地应对模型和引擎版本的变化。一方面可以更快验证和上线新模型,另一方面也避免了不同模型之间因运行环境不一致带来的冲突问题,使整体部署和运维更加可控

如果希望进一步了解 GPUStack 的功能和使用方式,可以参考以下资源:

image-20260404112334023

加入 GPUStack 社区

GPUStack 社区聚焦 AI 基础设施与大模型实践

社区中持续分享真实环境下的部署经验、问题排查案例,以及推理引擎、算力管理和系统架构相关讨论。

欢迎扫码加入 GPUStack 社区,与更多关注 AI Infra 与大模型推理实践的伙伴一起交流、学习与分享

wecom-temp-120129-3e20d58ceb1c6d7282e95504e2236733

若群聊已满或二维码失效,请访问以下页面查看最新群二维码: github.com/gpustack/gp…