Qwen-VL-Dense(Qwen3-VL-8B/32B)¶
1 简介¶
阿里云推出的Qwen-VL(视觉-语言)系列包含一系列强大的大型视觉语言模型(LVLM),专为全面的多模态理解而设计。它们接受图像、文本和边界框作为输入,并输出文本和检测框,从而实现图像检测、多模态对话和多图像推理等高级功能。
本文档将展示该模型的主要验证步骤,包括支持的特性、特性配置、环境准备、NPU部署、精度和性能评估。
本教程使用 vLLM-Ascend v0.11.0rc3-a3 版本进行演示,以 Qwen3-VL-8B-Instruct 模型为例,展示单NPU和多NPU部署。
Note
对于Atlas推理产品,Qwen3-VL Dense需要vLLM-Ascend v0.18.0或更高版本(对于Ascend950DT,该模型从vllm-ascend:v0.23.0rc1开始支持)。请勿在此硬件上使用上述演示版本。
2 支持的特性¶
请参考支持的特性列表获取模型支持的特性矩阵。
请参考特性指南获取特性的配置。
3 前提条件¶
3.1 模型权重¶
在 Atlas 800I A2(64GB × 8)、Atlas 800 A3(64GB × 16)或 Atlas 300I DUO 上需要 1 张卡:
Qwen3-VL-8B-Instruct:下载模型权重
在 Ascend950DT 系列(96GB × 8)节点上需要 1 张卡。
Qwen3-VL-8B-Instruct-w8a8(量化版本):下载模型权重
在 Atlas 800I A2(64GB × 8)、Atlas 800 A3(64GB × 16)或 Atlas 推理产品上需要 2 张卡:
Qwen3-VL-32B-Instruct:下载模型权重
在 Ascend950DT 系列(96GB × 8)节点上需要 1 张卡。
Qwen3-VL-32B-Instruct-w8a8(量化版本):下载模型权重
建议将模型权重下载到多节点的共享目录,例如 /root/.cache/。
4 安装¶
4.1 Docker镜像安装¶
根据您的机器类型选择镜像,并在您的节点上启动 docker 镜像,请参阅使用 docker。
在每个节点上启动docker镜像。
export IMAGE=quay.io/ascend/vllm-ascend:|vllm_ascend_version|-#TODO
export NAME=vllm-ascend
docker run --rm \
--name $NAME \
--net=host \
--shm-size=1g \
--privileged=true \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci4 \
--device /dev/davinci5 \
--device /dev/davinci6 \
--device /dev/davinci7 \
--device /dev/davinci_manager \
--device /dev/hisi_hdc \
--device /dev/ummu \
--device /dev/uburma \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /etc/hccl_rootinfo.json:/etc/hccl_rootinfo.json \
-v /etc/hixlep/:/etc/hixlep/ \
-v /root/.cache:/root/.cache \
-v /usr/local/sbin:/usr/local/sbin \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/bin/urma_admin:/usr/bin/urma_admin \
-v /lib/route.conf:/lib/route.conf \
-v /usr/lib64:/usr/lib64 \
-itd $IMAGE bash
# Update the vllm-ascend image
# A2: quay.io/ascend/vllm-ascend:v0.23.0
# A3: quay.io/ascend/vllm-ascend:v0.23.0-a3
export IMAGE=quay.io/ascend/vllm-ascend:v0.23.0
docker run --rm \
--name vllm-ascend \
--shm-size=1g \
--device /dev/davinci0 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-p 8000:8000 \
-it $IMAGE bash
# Use the vllm-ascend image
export IMAGE=quay.io/ascend/vllm-ascend:v0.23.0-310p
docker run --rm \
--name vllm-ascend \
--shm-size=10g \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci4 \
--device /dev/davinci5 \
--device /dev/davinci6 \
--device /dev/davinci7 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-p 8000:8000 \
-it $IMAGE bash
安装验证:
启动容器后,运行以下命令验证安装:
预期结果:容器被列出,状态为 Up。您还可以在容器内验证 vllm-ascend 版本:
预期结果:显示版本信息,与拉取的镜像版本匹配。
4.2 源码安装¶
如果您不想使用Docker镜像,可以从源码构建。首先从源码安装vLLM:
- 克隆并安装vLLM:
- 克隆并安装vLLM-Ascend仓库:
Note
Atlas 300I DUO 不支持 triton 或 triton-ascend。源码安装可能会自动引入它们;运行前请手动卸载:
安装验证:
预期结果:显示两个包的版本信息,确认安装成功。
Note
如果部署多节点环境,请在每个节点上设置环境。
更多详情,请参阅安装指南。
5 在线服务部署¶
5.1 单节点在线部署¶
运行docker容器以在单NPU上启动vLLM服务:
export HCCL_OP_EXPANSION_MODE="AIV"
export ASCEND_RT_VISIBLE_DEVICES=$1
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
vllm serve Qwen/Qwen3-VL-8B-Instruct \
--host 0.0.0.0 \
--port $2 \
--quantization ascend \
--served-model-name qwen3vl \
--no-enable-prefix-caching \
--data-parallel-size $3 \
--tensor-parallel-size $4 \
--trust-remote-code \
--max-num-seqs 128 \
--max-model-len 32768 \
--max-num-batched-tokens 16384 \
--gpu-memory-utilization 0.91 \
--async-scheduling \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [1,2,4,8,16,32]}' \
--mm-processor-cache-gb 0
export HCCL_OP_EXPANSION_MODE="AIV"
export ASCEND_RT_VISIBLE_DEVICES=$1
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
vllm serve Qwen/Qwen3-VL-8B-Instruct \
--host 0.0.0.0 \
--port $2 \
--dtype bfloat16 \
--served-model-name qwen3vl \
--no-enable-prefix-caching \
--data-parallel-size $3 \
--tensor-parallel-size $4 \
--trust-remote-code \
--max-num-seqs 128 \
--max-model-len 32768 \
--max-num-batched-tokens 16384 \
--gpu-memory-utilization 0.91 \
--async-scheduling \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [1,2,4,8,16,32]}' \
--mm-processor-cache-gb 0
export HCCL_OP_EXPANSION_MODE="AIV"
export ASCEND_RT_VISIBLE_DEVICES=$1
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
vllm serve Qwen/Qwen3-VL-8B-Instruct \
--dtype float16 \
--max_model_len 16384 \
--host 0.0.0.0 \
--port $2 \
--dtype bfloat16 \
--served-model-name qwen3vl \
--no-enable-prefix-caching \
--data-parallel-size $3 \
--tensor-parallel-size $4 \
--trust-remote-code \
--max-num-seqs 128 \
--max-model-len 32768 \
--max-num-batched-tokens 16384 \
--gpu-memory-utilization 0.91 \
--async-scheduling \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [1,2,4,8,16,32]}' \
--additional-config '{"ascend_compilation_config": {"enable_npugraph_ex":false}}' \
--mm-processor-cache-gb 0
Note
在 Atlas 300I DUO 上:
- 仅支持
float16数据类型。 - 图编译(
--compilation-config)需要 CANN 版本 >= 9.0.0。如果您的 CANN 版本较低,请将--compilation-config替换为--enforce-eager。 - 必须使用
--additional-config并设置"ascend_compilation_config": {"enable_npugraph_ex": false},因为 Atlas 300I DUO 不支持enable_npugraph_ex。
关键参数说明:
- 添加
--max_model_len选项,以避免当 Qwen3-VL-8B-Instruct 模型的最大序列长度(256000)超过 KV 缓存可存储的最大 token 数时出现的 ValueError。该值因不同 NPU 系列的片上内存大小而异,请根据您的 NPU 系列调整为一个合适的值。
如果您的服务启动成功,您可以看到如下信息:
INFO: Started server process [2736]
INFO: Waiting for application startup.
INFO: Application startup complete.
6 功能验证¶
服务器启动后,您可以使用输入提示查询模型:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen3-VL-8B-Instruct",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": [
{"type": "image_url", "image_url": {"url": "https://modelscope.oss-cn-beijing.aliyuncs.com/resource/qwen.png"}},
{"type": "text", "text": "What is the text in the illustration?"}
]}
]
}'
预期结果:
服务返回HTTP 200 OK。
{"id":"chatcmpl-d3270d4a16cb4b98936f71ee3016451f","object":"chat.completion","created":1764924127,"model":"Qwen/Qwen3-VL-8B-Instruct","choices":[{"index":0,"message":{"role":"assistant","content":"The text in the illustration is: **TONGYI Qwen**","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning_content":null},"logprobs":null,"finish_reason":"stop","stop_reason":null,"token_ids":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":107,"total_tokens":123,"completion_tokens":16,"prompt_tokens_details":null},"prompt_logprobs":null,"prompt_token_ids":null,"kv_transfer_params":null}
7 精度评估¶
部分模型的精度已在我们的CI监控范围内,包括:
Qwen3-VL-8B-Instruct
使用 Language Model Evaluation Harness
以 mmmu_val 数据集作为测试数据集为例,在离线模式下运行 Qwen3-VL-8B-Instruct 的精度评估。
-
请参考使用lm_eval了解
lm_eval安装的更多详情。 -
运行
lm_eval执行精度评估。 -
执行后,您将获得结果,以下是
Qwen3-VL-8B-Instruct在vllm-ascend:0.11.0rc3中的结果,仅供参考。
| 任务 | 值 | 标准误差 |
|---|---|---|
| mmmu_val | 0.5389 | 0.0159 |
使用 AISBench
以 text_vqa 数据集为例,运行 Qwen3-VL-8B-Instruct 的精度评估。
-
参考 使用 AISBench 了解安装、数据集下载和配置详情。
-
运行
ais_bench执行精度评估。 -
执行后,您可以获取结果,以下为
vllm-ascend:0.23.0rc1中Qwen3-VL-8B-Instruct的结果,仅供参考。
| 数据集 | 指标 | 模式 | vllm-api-general-chat |
|---|---|---|---|
| text_vqa | accuracy | gen | 80.57 |
8 性能评估¶
使用vLLM基准测试¶
更多详情请参考vLLM基准测试。
有三个 vllm bench 子命令:
latency:基准测试单批次请求的延迟。serve:基准测试在线服务吞吐量。throughput:基准测试离线推理吞吐量。
性能评估必须以在线模式进行。以 serve 为例,运行代码如下。
vllm bench serve --model Qwen/Qwen3-VL-8B-Instruct --dataset-name random --random-input 200 --num-prompts 200 --request-rate 1 --save-result --result-dir ./
几分钟后,您将获得性能评估结果。
9 性能调优¶
9.1 推荐配置¶
注意:以下配置在特定测试环境中验证,仅供参考。最佳配置取决于最大输入/输出长度、前缀缓存命中率、精度要求和部署机器比例等因素。建议参考第9.2节根据实际情况进行调优。
表1:场景概览¶
| 场景 | 部署模式 | *NPU总数 | 权重版本 | 关键考量 |
|---|---|---|---|---|
| 高吞吐量 (16k 上下文) |
单节点混合 | 1 (A3) | Qwen3-VL-8B-Instruct | 对高分辨率文本输入使用 tp2 |
| 长上下文 (128k,无前缀缓存) |
单节点混合 | 1 (A3) | Qwen3-VL-8B-Instruct | 对高分辨率文本输入使用 tp2 |
| 长上下文 (128k,带前缀缓存) |
单节点混合 | 1 (A3) | Qwen3-VL-8B-Instruct | 对高分辨率文本输入使用 tp2 |
| 多模态 (1080p) |
单节点混合 | 1 (A3) | Qwen3-VL-8B-Instruct | 对高分辨率视觉输入使用 tp2 |
*NPU总数表示所有节点上使用的 NPU 总数。1 个节点 = 1 台 Atlas 800 A3 服务器(64GB × 16 个 NPU)。
表2:详细节点配置¶
| 场景 | 配置 | NPU数 | TP | DP | 最大模型长度 | MTP推测数 | 权重版本 |
|---|---|---|---|---|---|---|---|
| High Throughput / Low Latency (16k) | Server / Single Machine | 1 | 1 | 1 | ~16k | 3 | Qwen3-VL-8B-Instruct |
| Long Context (128k, no cache) | Server / Single Machine | 1 | 1 | 1 | 128k | 3 | Qwen3-VL-8B-Instruct |
| Long Context (128k, with cache) | Server / Single Machine | 1 | 1 | 1 | 128k | 3 | Qwen3-VL-8B-Instruct |
| Multimodal (1080p) | Server / Single Machine | 1 | 1 | 1 | ~16k | 3 | Qwen3-VL-8B-Instruct |
完整的启动命令和参数说明请参考第5章中的部署示例。
注意:
max-model-len 和 max-num-seqs 需要根据实际使用场景设置。其他设置请参考 部署 章节。
9.2 调优指南¶
9.2.1 通用调优参考¶
调优方法请参考优化与调优。
请参阅特性矩阵了解详细的功能描述。
10 常见问题解答¶
对于常见的环境、安装和一般参数问题,请参阅公共FAQ。