Qwen3-Dense (Qwen3-0.6B/1.7B/4B/8B/14B/32B)¶
1 简介¶
Qwen3 是 Qwen 系列最新一代大语言模型,提供全面的稠密模型和混合专家(MoE)模型套件。基于大规模训练,Qwen3 在推理、指令遵循、智能体能力和多语言支持方面实现了突破性进展。本文档涵盖的 Dense 变体包括 Qwen3-0.6B、1.7B、4B、8B、14B 和 32B,以及针对 Ascend NPU 部署优化的量化版本(W8A8、W4A4 和 W8A8SC-310)。
本文档将演示在 vLLM-Ascend 环境中对 Qwen3 Dense 模型进行主要验证的步骤,包括支持的功能、环境准备、模型量化、单节点和多节点部署,以及精度和性能评估。通过针对不同用例定制服务级配置,您可以在各种场景中确保最佳性能。
Qwen3 Dense 模型首次支持于 v0.8.4rc2。W8A8 量化首次支持于 v0.8.4rc2,W4A4 自 v0.11.0rc1 起支持。Atlas 300I DUO 使用本教程中列出的 W8A8SC-310 量化权重。本文档基于 vLLM-Ascend v0.21.0 进行验证和编写。v0.21.0 及更高版本均可稳定运行。如需使用最新功能,建议使用最新的发布候选版本或官方版本。
2 支持的功能¶
有关模型支持矩阵,请参阅支持功能列表。
有关功能配置信息,请参阅功能指南。
3 前提条件¶
3.1 模型权重¶
以下模型变体可用。建议将模型权重下载到所有节点均可访问的共享目录。
BF16 版本:
| 模型 | 硬件要求 | 下载 |
|---|---|---|
| Qwen3-0.6B | 1 台 Atlas A3 推理产品(64GB × 16)、1 台 Atlas A2 推理产品(64GB × 8) | Modelers |
| Qwen3-1.7B | 1 台 Atlas A3 推理产品(64GB × 16)、1 台 Atlas A2 推理产品(64GB × 8) | Modelers |
| Qwen3-4B | 1 台 Atlas A3 推理产品(64GB × 16)、1 台 Atlas A2 推理产品(64GB × 8) | Modelers |
| Qwen3-8B | 1 台 Atlas A3 推理产品(64GB × 16)、1 台 Atlas A2 推理产品(64GB × 8) | Modelers |
| Qwen3-14B | 1 台 Atlas A3 推理产品(64GB × 16)、1 台 Atlas A2 推理产品(64GB × 8) | Modelers |
| Qwen3-32B | 1 台 Atlas A3 推理产品(64GB × 16)、1 台 Atlas A2 推理产品(64GB × 8) | Modelers |
适用于 Atlas A2/A3 推理产品的量化版本:
| 模型 | 量化 | 硬件要求 | 下载 |
|---|---|---|---|
| Qwen3-32B-W4A4 | W4A4 | 1 台 Atlas A3 推理产品(64GB × 16)或 1 台 Atlas A2 推理产品(64GB × 8) | ModelScope |
| Qwen3-32B-W8A8 | W8A8 | 1 台 Atlas A3 推理产品(64GB × 16)或 1 台 Atlas A2 推理产品(64GB × 8) | ModelScope |
适用于 Atlas 300I DUO 的量化版本:
| 模型 | 量化 | 硬件要求 | 下载 |
|---|---|---|---|
| Qwen3-8B-W8A8SC | W8A8SC | Atlas 300I DUO(TP1) | ModelScope |
| Qwen3-14B-W8A8SC | W8A8SC | Atlas 300I DUO(TP1) | ModelScope |
| Qwen3-32B-W8A8SC | W8A8SC | Atlas 300I DUO(TP4) | ModelScope |
这些是推荐的卡数,可根据实际情况进行调整。
路径说明:将模型权重下载到您选择的目录并记录下来。确保后续部署命令中的模型路径与该目录一致。
4 安装¶
4.1 Docker 镜像安装¶
您可以使用 Qwen3 Dense 模型的官方一体化 Docker 镜像。
Docker 拉取:
Docker 运行:
在每个节点上启动 Docker 镜像。
export IMAGE=quay.io/ascend/vllm-ascend:v0.23.0-a3
docker run --rm \
--name vllm-ascend-env \
--shm-size=1g \
--net=host \
--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/davinci8 \
--device /dev/davinci9 \
--device /dev/davinci10 \
--device /dev/davinci11 \
--device /dev/davinci12 \
--device /dev/davinci13 \
--device /dev/davinci14 \
--device /dev/davinci15 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
-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 \
-it $IMAGE bash
Note
Atlas A3 推理产品具有 8 个 NPU,采用双 die 设计(共 16 个芯片:/dev/davinci[0-15])。
如果你使用的是共享机器,请仅映射所需的芯片(例如,NPU 0-3 对应 /dev/davinci[0-7])。
export IMAGE=quay.io/ascend/vllm-ascend:v0.23.0
docker run --rm \
--name vllm-ascend-env \
--shm-size=1g \
--net=host \
--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/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
-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 \
-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 8080:8080 \
-it $IMAGE bash
默认工作目录为 /workspace。vLLM 和 vLLM-Ascend 作为 Python 包安装在 site-packages 中。
安装验证: 启动容器后,运行以下命令以验证安装:
预期结果:容器以 Up 状态列出。你也可以在容器内验证 vllm-ascend 版本:
预期结果:显示版本信息,与拉取的镜像版本一致。
4.2 源代码安装¶
如果你更倾向于从源代码构建而不是使用 Docker 镜像,请按照安装指南安装 vLLM-Ascend。
Note
对于 Atlas 300I DUO,源代码安装可能会引入 triton 和 triton-ascend。在 Atlas 300I DUO 上运行 vLLM-Ascend 之前,请卸载它们:
要验证源代码安装:
预期结果:显示版本信息,确认安装成功。
Note
如果部署多节点环境,请在每个节点上配置环境。
在线服务部署¶
5.1 单节点在线部署¶
单节点部署在同一节点内完成 Prefill 和 Decode,适用于开发、测试以及中小规模推理场景。
启动服务器:
以下命令为示例配置。请根据实际场景调整参数。
Qwen3-32B-W8A8:
export HCCL_OP_EXPANSION_MODE="AIV"
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
# Ensure the model path matches the directory recorded during download
vllm serve your_model_path \
--served-model-name qwen3 \
--trust-remote-code \
--quantization ascend \
--distributed-executor-backend "mp" \
--tensor-parallel-size 4 \
--max-model-len 5500 \
--max-num-batched-tokens 40960 \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY"}' \
--port <port> \
--gpu-memory-utilization 0.9
Qwen3-32B-W4A4:
export HCCL_BUFFSIZE=1024
export ASCEND_RT_VISIBLE_DEVICES=0,1
# Ensure the model path matches the directory recorded during download
vllm serve your_model_path \
--port 8004 \
--data-parallel-size 1 \
--tensor-parallel-size 2 \
--served-model-name qwen3 \
--distributed-executor-backend "mp" \
--max-model-len 40960 \
--max-num-batched-tokens 16384 \
--max-num-seqs 64 \
--trust-remote-code \
--gpu-memory-utilization 0.9 \
--quantization ascend \
--compilation-config '{"cudagraph_capture_sizes": [64]}' \
--additional-config '{"ascend_compilation_config": {"fuse_norm_quant": false}}'
Qwen3-8B-W8A8SC:
export VLLM_USE_MODELSCOPE=True
export ASCEND_RT_VISIBLE_DEVICES=0
# Ensure the model path matches the directory recorded during download
vllm serve Eco-Tech/Qwen3-8B-w8a8sc-310-vllm/TP1/Qwen3-8B-w8a8sc-310-vllm-tp1 \
--host 127.0.0.1 \
--port 8080 \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.90 \
--max-num-seqs 32 \
--served-model-name qwen3 \
--dtype float16 \
--additional-config '{"ascend_compilation_config": {"enable_npugraph_ex":false}}' \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [1,2,4,8,16,32]}' \
--quantization ascend \
--max-model-len 20480 \
--no-enable-prefix-caching \
--load-format sharded_state
Qwen3-14B-W8A8SC:
```bash
export VLLM_USE_MODELSCOPE=True
export ASCEND_RT_VISIBLE_DEVICES=0
# Ensure the model path matches the directory recorded during download
vllm serve Eco-Tech/Qwen3-14B-w8a8sc-310-vllm/TP1/Qwen3-14B-w8a8sc-310-vllm-tp1 \
--host 127.0.0.1 \
--port 8080 \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.90 \
--max-num-seqs 16 \
--served-model-name qwen3 \
--dtype float16 \
--additional-config '{"ascend_compilation_config": {"enable_npugraph_ex":false}}' \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [1,2,4,8,16]}' \
--quantization ascend \
--max-model-len 20480 \
--no-enable-prefix-caching \
--load-format sharded_state
```
Qwen3-32B-W8A8SC:
```bash
export VLLM_USE_MODELSCOPE=True
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
# Ensure the model path matches the directory recorded during download
vllm serve Eco-Tech/Qwen3-32B-w8a8sc-310-vllm/TP4/Qwen3-32B-w8a8sc-310-vllm-tp4 \
--host 127.0.0.1 \
--port 8080 \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.90 \
--max-num-seqs 32 \
--served-model-name qwen3 \
--dtype float16 \
--additional-config '{"ascend_compilation_config": {"enable_npugraph_ex":false}}' \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [16,32]}' \
--quantization ascend \
--max-model-len 20480 \
--no-enable-prefix-caching \
--load-format sharded_state
```
Note
- vLLM Serving Arguments 文档 — vLLM serve 命令的额外参数详情。
- 环境变量 — Ascend 特定环境变量(
HCCL_*等)。
服务验证:
如果服务成功启动,将显示以下启动日志:
(APIServer pid=<pid>) INFO: Started server process [<pid>]
(APIServer pid=<pid>) INFO: Waiting for application startup.
(APIServer pid=<pid>) INFO: Application startup complete.
6 功能验证¶
服务启动后,可以通过发送 Prompt 来调用模型。
Chat Completions API:
curl http://localhost:<port>/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3",
"messages": [
{"role": "user", "content": "Give me a short introduction to large language models."}
],
"temperature": 0.6,
"top_p": 0.95,
"top_k": 20,
"max_completion_tokens": 4096
}'
预期结果:HTTP 200,JSON 响应中包含带有生成文本的 choices 字段。
7 精度评估¶
7.1 使用 AISBench¶
有关安装、数据集下载和配置等设置详情,请参阅使用 AISBench。
以下是精度评估配置文件的示例配置:
精度评估配置文件:
# Example configuration: benchmarks/ais_bench/benchmark/configs/models/vllm_api/vllm_api_general_chat.py
from ais_bench.benchmark.models import VLLMCustomAPIChat
from ais_bench.benchmark.utils.model_postprocessors import extract_non_reasoning_content
models = [
dict(
attr="service",
type=VLLMCustomAPIChat,
abbr='vllm-api-general-chat',
path="your_model_path",
model="qwen3",
request_rate=0,
retry=2,
host_ip="127.0.0.1",
host_port=2001,
max_out_len=32768,
batch_size=32,
trust_remote_code=False,
generation_kwargs=dict(
temperature=0.6,
top_k=20,
top_p=0.95,
),
pred_postprocessor=dict(type=extract_non_reasoning_content)
)
]
以使用 aime2025 数据集为例运行精度评估:
--models 参数值对应上述配置文件中的 abbr 字段。请根据场景调整 max_out_len、batch_size 和数据集任务。
8 性能评估¶
8.1 使用 AISBench¶
有关安装、数据集下载和配置等设置详情,请参阅使用 AISBench。
以下是精度评估配置文件的示例配置:
# Example configuration: benchmarks/ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py
from ais_bench.benchmark.models import VLLMCustomAPIChat
from ais_bench.benchmark.utils.postprocess.model_postprocessors import extract_non_reasoning_content
models = [
dict(
attr="service",
type=VLLMCustomAPIChat,
abbr="vllm-api-stream-chat",
path="your_model_path",
model="qwen3",
stream=True,
request_rate=0,
use_timestamp=False,
retry=2,
host_ip="127.0.0.1",
host_port=8004,
max_out_len=1500,
batch_size=90,
trust_remote_code=False,
generation_kwargs=dict(
temperature=0,
ignore_eos=True
),
)
]
以使用 GSM8K 数据集为例运行性能评估:
ais_bench --models vllm_api_stream_chat --datasets gsm8k_gen_0_shot_cot_str_perf --debug --summarizer default_perf --mode perf --num-prompts 360
8.2 使用 vLLM Benchmark¶
有关更多详情,请参阅vLLM benchmark。
有三个 vllm bench 子命令:
latency:基准测试单个请求批次的延迟。serve:基准测试在线服务吞吐量。throughput:基准测试离线推理吞吐量。
以 serve 为例:
vllm bench serve \
--model your_model_path \
--served-model-name qwen3 \
--port <port> \
--dataset-name random \
--random-input 200 \
--num-prompts 200 \
--request-rate 1 \
--save-result \
--result-dir ./
数分钟后,你将获得性能评估结果。
9 性能调优¶
有关关键参数的详细说明,请参阅 vLLM 功能、vLLM Ascend 附加配置、vLLM Ascend 功能矩阵 和 vLLM Ascend 功能指南。
9.1 推荐配置¶
注意:以下配置已在特定测试环境中验证,仅供参考。最佳配置取决于最大输入/输出长度、前缀缓存命中率、精度要求以及部署机器比例等因素。建议参考第 9.2 节,根据实际条件进行调优。
表 1:场景概览¶
| 场景 | 部署模式 | 总 NPU 数 | 权重版本 | 关键考量 |
|---|---|---|---|---|
| 高吞吐 | 单节点(TP4) | 4(Atlas A3 推理产品) | W8A8 | 4 卡 TP 可最大化并发请求处理 |
| 长上下文 | 单节点(TP4) | 4(Atlas A3 推理产品) | W8A8 | 4 卡 TP 可延长长序列的上下文窗口 |
| 低延迟 | 单节点(TP8) | 8(Atlas A3 推理产品) | W8A8 | 8 卡 TP 可降低交互式响应的每 Token 延迟 |
*Total NPUs表示所有节点使用的 NPU 总数。
表 2:详细节点配置¶
| 场景 | 配置 | NPU 数 | TP | DP | FUSED_MC2 | EP 开关 | 异步调度 |
|---|---|---|---|---|---|---|---|
| 高吞吐 | 单节点 | 4 | 4 | 1 | 关 | 关 | 开 |
| 长上下文 | 单节点 | 4 | 4 | 1 | 关 | 关 | 开 |
| 低延迟 | 单节点 | 8 | 8 | 1 | 关 | 关 | 开 |
有关详细参数说明,请参阅 第 5.1 节 中的部署示例。
高吞吐配置:
export HCCL_OP_EXPANSION_MODE="AIV"
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
vllm serve your_model_path \
--served-model-name qwen3 \
--trust-remote-code \
--distributed-executor-backend "mp" \
--tensor-parallel-size 4 \
--max-model-len 5500 \
--max-num-batched-tokens 40960 \
--no-enable-prefix-caching \
--quantization ascend \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY","cudagraph_capture_sizes":[4,8,64,72,76,80,96,100,120,140,144,160,192,216,240,252,288,320,336,360,384,400,408,416,420,432,480,540,576,600]}' \
--additional-config '{"weight_prefetch_config":{"enabled":true}, "pa_shape_list":[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256]}' \
--host <host_ip> \
--port <port> \
--block-size 128 \
--gpu-memory-utilization 0.9
长上下文配置:
export HCCL_OP_EXPANSION_MODE="AIV"
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
vllm serve your_model_path \
--host <host_ip> \
--port <port> \
--served-model-name qwen3 \
--trust-remote-code \
--seed 1024 \
--max-model-len 135000 \
--max-num-batched-tokens 40960 \
--tensor-parallel-size 4 \
--distributed-executor-backend "mp" \
--no-enable-prefix-caching \
--speculative-config '{"method": "eagle3", "model":"your_eagle3_model_path", "num_speculative_tokens": 3}' \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY"}' \
--hf-overrides '{"rope_parameters": {"rope_type":"yarn","rope_theta":1000000,"factor":4,"original_max_position_embeddings":131072}}' \
--gpu-memory-utilization 0.9 \
--quantization ascend
低延迟配置:
export HCCL_OP_EXPANSION_MODE="AIV"
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
vllm serve your_model_path \
--served-model-name qwen3 \
--trust-remote-code \
--distributed-executor-backend "mp" \
--tensor-parallel-size 8 \
--max-model-len 5500 \
--max-num-batched-tokens 40960 \
--no-enable-prefix-caching \
--quantization ascend \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY","cudagraph_capture_sizes":[1,2,4,8,16,32,64,72,76,80,96,100,120,140,144,160,192,216,240,252,288,320,336,360,384,400,408,416,420,432,480,540,576,600]}' \
--speculative-config '{"method": "eagle3", "model":"your_eagle3_model_path", "enforce_eager": true, "num_speculative_tokens": 3}' \
--port <port> \
--block-size 128 \
--gpu-memory-utilization 0.9
9.2 调优指南¶
9.2.1 通用调优参考¶
请参见公共性能调优文档了解调优方法。 请参见功能矩阵了解详细功能说明。
10 常见问题¶
对于常见环境、安装和通用参数问题,请参见公共常见问题。本节仅涵盖 Qwen3 Dense 模型特有的问题。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 vl/vllm-ascend