利用 GPUStack + vLLM 在 Ascend 910B4 上部署 Qwen3-VL 推理实战

Author Avatar
Administrator
发表:2026-01-29 10:16:27
修改:2026-01-29 11:02:43

摘要: 本文将引导您完成在华为 Atlas 910B4 (昇腾910B4) 服务器集群上,利用 GPUStack 框架管理和调度资源,结合 vLLM 引擎的高性能推理能力,部署 Qwen3-VL 多模态大模型的完整流程。我们将从环境准备、私有镜像仓库搭建、模型下载到服务部署与测试进行详细讲解。

一、 环境准备 (Ascend 910B4)

在开始部署之前,我们需要确保所有节点(包括主节点和工作节点)的 Ascend 环境配置正确。

1.  确认硬件与驱动

使用 npu-smi info 命令检查 NPU 驱动状态,确保所有 910B4 芯片状态正常。

2.  安装 CANN Toolkit 和 Kernel

访问华为昇腾社区或官方镜像源,下载与您的系统和驱动版本匹配的 CANN Toolkit 和针对 910B 系列的 Kernel 安装包。

安装步骤示例

sudo chmod +x Ascend-cann-toolkit_8... && sudo ./Ascend-cann-toolkit_8... --install --install-for-all

sudo chmod +x Ascend-cann-kernels-910b_8... && sudo ./Ascend-cann-kernels-910b_8... --install --install-for-all

3.  配置环境变量

将以下内容添加到 /etc/profile 并执行 source 命令使其生效:

source /usr/local/Ascend/ascend-toolkit/set_env.sh

确保 Python 环境(建议 3.8+)和 pip 工具已安装并配置好国内镜像源。

二、 部署私有 Docker 仓库并推送镜像

为了GPUStack能够自动拉取推理后端,需要在内网环境中搭建一个私有仓库,便于快速分发镜像。

1.  部署私有 Registry

在一台拥有足够存储空间的服务器上运行:

docker run -d -p 5000:5000 --restart=always --name registry registry:3

假设该服务器 IP 为 192.168.1.100

2.  准备并推送镜像

下载必须的镜像:

docker pull gpustack/gpustack:v2.0.2

docker pull gpustack/runner:cann8.3-910b-vllm0.13.0

docker pull gpustack/runtime:pause

注意:需要根据CPU架构自行增加--platform参数,如arm64需要增加--platform=arm64。

修改镜像tag:

docker tag gpustack/gpustack:v2.0.2 192.168.1.100:5000/gpustack/gpustack:v2.0.2

docker tag gpustack/runner:cann8.3-910b-vllm0.13.0 192.168.1.100:5000/gpustack/runner:cann8.3-910b-vllm0.13.0

docker tag gpustack/runtime:pause 192.168.1.100:5000/gpustack/runtime:pause

推送到私有仓库:

docker push 192.168.1.100:5000/gpustack/gpustack:v2.0.2

docker push 192.168.1.100:5000/gpustack/runner:cann8.3-910b-vllm0.13.0

docker push 192.168.1.100:5000/gpustack/runtime:pause

三、 下载模型权重文件

Qwen3-VL 模型权重可以在 Hugging Face 或 ModelScope (魔搭社区) 上找到。

创建模型保存目录并切换到该目录,mkdir /data/models && cd /data/models

1.  安装 git-lfsapt-get install/git lfs install (确保能处理大文件)。

2.  下载模型

例如,使用 git clone 下载 Qwen3-VL-32B 模型:

git clone https://www.modelscope.cn/Qwen/Qwen3-VL-32B-Instruct.git

如果您希望跳过 lfs 大文件下载,可以使用如下命令

GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/Qwen/Qwen3-VL-32B-Instruct.git

四、 部署 GPUStack 主服务和节点

1.  部署主服务 (Master)

sudo docker run -d --name gpustack \
    --restart unless-stopped \
    -p 80:80 \
    --volume gpustack-data:/var/lib/gpustack \
    192.168.1.100:5000/gpustack/gpustack:v2.0.2 \
    --system-default-container-registry 192.168.1.100:5000

安装完成后,查看初始密码:cat /var/lib/gpustack/initial_admin_password

访问 http://<主节点IP>:端口(本次以80为例),使用 admin 和初始密码登录。

2.  添加工作节点 (Worker)

点击GPUStack左侧菜单里的节点,点击右上角添加节点,按照提示一步步选择,架构——Ascend,挂载模型地址——/data/models,名称等按照默认来就行。

在每台拥有 Ascend 910B4 卡的工作节点服务器上执行该命令,本次仅以单机举例。

稍等片刻,您应该能在 UI 上看到状态为“Ready”的工作节点,且显示了 NPU 资源。

五、 自定义后端镜像版本 (0.13-vllm)

为了让 GPUStack 能使用 vLLM 来调度 Qwen3-VL,我们需要注册一个自定义的后端。

1.  在 GPUStack 中注册后端

登录 GPUStack UI,进入“模型后端”页面。选择需要创建的自定义后端类型,本次是vLLM。点击“创建”,选择“自定义”。

填写名称(如 vllm-0.13-ascend),填写版本(0.13),填写架构(CANN),填写镜像地址 192.168.1.100:5000/gpustack/runner:cann8.3-910b-vllm0.13.0

启动命令留空即可。

六、 运行推理服务

现在我们可以部署 Qwen3-VL 模型了。

首先在节点添加模型文件,点击添加模型文件,本地路径,输入模型路径,如/models/Qwen3-VL-32B-Instruct,注意此处是容器路径,不是宿主机路径。点击保存。

点击已保存的模型文件后面的小火箭按钮进行部署,基本信息:名称填写后面API接口调用时使用的模型名称,如(qwen3-vl-32b),后端版本改为自定义的0.13;调度:调度方式建议选择手动,并指定到具体NPU卡,每副本GPU数量建议为4;高级:模型类别为LLM,后端参数填写以下参数

--dtype=bfloat16

--max_model_len=16384

--max-num-batched-tokens=16384

--gpu-memory-utilization=0.8

上述参数输入过程中,gpustack会提示补全,按照补全来填,有时会有-和_的区别

参考链接:https://docs.vllm.ai/projects/ascend/zh-cn/main/tutorials/Qwen-VL-Dense.html

首次推理建议取消错误时重启,否则自动重启就看不到报错信息了。

点击左边的下拉箭头,可以看到开始启动的副本,状态为Running即表示服务启动成功。

七、 测试验证

1.  检查状态

在 UI 的“部署”页面,观察实例状态是否变为“Running”。

查看日志,确认没有报错,且模型已成功加载到 NPU 上。

2.  竞技场测试:

点击竞技场里的对话,在右侧选择qwen3-vl-32b模型。(注:部署时,模型类别如果是自动,此处可能看不到该模型,但不影响API调用)

在对话框输入文字,点击上传图片,进行对话测试,能够正常理解图片内容证明推理服务启动成功。

3. 发送推理请求

获取服务的访问地址(通常是主节点 IP + 端口,或通过 Ingress 配置的域名)。

使用 curl 或 Python 脚本发送测试请求。

示例请求 (多模态)

curl http: //<gpustack-master-ip>:<port>/v1/chat/completions \
- H "Content-Type: application/json" \
- d '{
  "max_tokens": 100,
  "messages": [
    {
      "content": [
        {
          "text": "描述这张图片",
          "type": "text"
        },
        {
          "image_url": {
            "url": "https://path/to/your/image.jpg"
          },
          "type": "image_url"
        }
      ],
      "role": "user"
    }
  ],
  "model": "qwen3-vl-32b"
}'

预期结果:

模型应返回对图片的描述性文本,证明推理服务工作正常。

结语

通过以上步骤,我们成功利用 GPUStack 框架在 Ascend 910B4 集群上部署了 Qwen3-VL 的 vLLM 推理服务。GPUStack 提供了友好的资源管理和调度界面,而 vLLM 则保证了推理的高吞吐量。您可以根据实际业务需求,进一步调整参数或扩展集群规模。

注意事项

   兼容性: 请确保您使用的 vLLM 版本支持 Ascend NPU 和 Qwen3-VL 模型结构。
   网络: 确保所有节点之间以及节点与私有仓库、存储之间的网络畅通。
   资源: Qwen3-VL 是多模态模型,对显存和内存要求较高,请根据实际情况调整 tensor_parallel_size 等参数。

评论