利用 GPUStack + vLLM 在 Ascend 910B4 上部署 Qwen3-VL 推理实战
摘要: 本文将引导您完成在华为 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-lfs: apt-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 等参数。