Qwen3.8-27B¶
1 简介¶
Qwen3.8-27B 是 Qwen3.8 系列中拥有 270 亿参数的稠密模型,也是迄今为止 Qwen 开源模型系列中能力最强的一代。它基于 Qwen3.5 的架构基础构建,与 2.4T MoE 旗舰模型共享相同的混合注意力主干:在其 64 层中,只有 16 层运行完整的(门控)注意力(full_attention_interval: 4),其余 48 层运行具有恒定循环状态的线性注意力(Gated DeltaNet)。它是一个原生视觉-语言模型——架构为 Qwen3_5ForConditionalGeneration,config.json 中包含 vision_config——能够理解图像和视频,并内置 MTP(多令牌预测)草稿头和原生 262,144 令牌上下文窗口,可扩展至 1,000,000 令牌。
Qwen3.8-27B 在编码、专业工作、研究以及长周期智能体任务方面相比 Qwen3.5/Qwen3.6 有显著提升,具备更强的自主规划能力、更可靠的端到端任务完成能力,以及与主流测试框架和开发工具更广泛的向下兼容性。思考模式默认开启,可按请求关闭;推理深度可通过 reasoning_effort(xhigh/medium/low)调节,历史消息中的推理上下文可通过 preserve_thinking 保留。
本文档重点介绍在昇腾 NPU 上的文本服务。它描述了该模型的主要验证步骤,包括支持的特性、前提条件、安装、多节点部署、功能验证、精度和性能评估、性能调优以及常见问题解答。
本文档基于 vLLM-Ascend 0.23.0 进行验证和编写。当前模型(Qwen3.8-27B)在该版本中首次得到支持。
2 支持的特性¶
请参阅支持的特性获取该模型的支持特性矩阵。
请参阅功能指南获取功能配置详情。
3 前提条件¶
3.1 模型权重¶
以下模型权重可用:
| 权重版本 | 硬件要求 | 下载链接 |
|---|---|---|
Qwen3.8-27B(BF16 版本) |
1 个 Ascend 950DT系列产品(96GB × 8)节点或 1 个 Ascend 950PR系列产品(128GB × 8)节点或 1 个 Atlas 800 A3(64GB × 16)节点 或 1 个 Atlas 800 A2(64GB × 8)节点 |
ModelScope |
Qwen3.8-27B-w8a8(量化版本) |
1 个 Ascend 950PR系列产品(128GB × 8)节点或 1 个 Atlas 800 A3(64GB × 16)节点或 1 个 Atlas 800 A2(64GB × 8)节点 | ModelScope |
Qwen3.8-27B-w8a8-mxfp8(量化版本) |
1 个 Ascend 950DT系列产品(96GB × 8)或 1 个 Ascend 950PR系列产品(128GB × 8)节点 | ModelScope |
Qwen3.8-27B-w8a8-310p(量化版本) |
1 个 Atlas 300I DUO | ModelScope |
建议将模型权重下载到多节点的共享目录中,例如 /root/.cache/。
路径说明:将模型权重下载到您选择的目录并记录该路径。确保后续部署命令中的模型路径与该目录一致。
4 安装¶
4.1 Docker 镜像安装¶
根据机器类型选择镜像并在节点上启动docker镜像,请参考使用docker。
在每个节点上启动 docker 镜像。
export IMAGE=quay.io/ascend/vllm-ascend:qwen3.8-a5
export NAME=vllm-ascend
docker run --rm \
--name $NAME \
--net=host \
--shm-size=1g \
--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/lib64:/usr/lib64 \
-it $IMAGE bash
在每个节点上启动 docker 镜像。
export IMAGE=quay.io/ascend/vllm-ascend:qwen3.8-a3
export NAME=vllm-ascend
docker run --rm \
--name $NAME \
--net=host \
--shm-size=1g \
--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
在每个节点上启动 docker 镜像。
export IMAGE=quay.io/ascend/vllm-ascend:qwen3.8-a2
export NAME=vllm-ascend
docker run --rm \
--name $NAME \
--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
在每个节点上启动 docker 镜像。
export IMAGE=quay.io/ascend/vllm-ascend:v0.23.0-310p
export NAME=vllm-ascend
docker run --rm \
--name $NAME \
--shm-size=1g \
--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 \
-it $IMAGE bash
进入容器后,验证 vLLM 和 vLLM-Ascend 是否可以导入:
预期输出:
4.2 源码安装¶
您也可以从源码构建并安装vllm-ascend。请参考使用Python设置。
如果要部署多节点服务,请在每个节点上安装相同版本的 vLLM 和 vLLM-Ascend。
5 在线服务部署¶
5.1 单节点在线部署¶
单节点部署在同一节点内完成Prefill和Decode,适用于开发、测试和中等规模推理场景。在Atlas 300I DUO上,至少需要2个设备。
启动服务前:
- 将模型路径、并行大小和服务端口替换为目标环境中的值。
以下示例适用于 Ascend 950DT系列产品。
#!/bin/sh
# Load model from ModelScope to speed up download
export MODEL_PATH=Eco-Tech/Qwen3.8-27B-w8a8-mxfp8
export VLLM_USE_MODELSCOPE=True
export HCCL_BUFFSIZE=512
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
# Size of the shared buffer (in MB) used by HCCL for NPU-to-NPU collective communication
# To reduce memory fragmentation and avoid out of memory
# Model weight path; can be a ModelScope model id (e.g., Eco-Tech/Qwen3.8-27B-w8a8-mxfp8) or a local directory path
# Ensure the model path matches the directory recorded during download
vllm serve $MODEL_PATH \
--host 0.0.0.0 \
--port 8000 \
--data-parallel-size 1 \
--tensor-parallel-size 1 \
--quantization ascend \
--served-model-name qwen3.8 \
--max-num-seqs 32 \
--max-model-len 131072 \
--max-num-batched-tokens 16384 \
--trust-remote-code \
--enable-prefix-caching \
--gpu-memory-utilization 0.85 \
--speculative-config '{"method": "qwen3_5_mtp", "num_speculative_tokens": 3, "enforce_eager": true}' \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
--additional-config '{"enable_cpu_binding":true}'
关键参数说明:
--data-parallel-size 1和--tensor-parallel-size 1是数据并行(DP)和张量并行(TP)大小的常见设置。--max-model-len表示上下文长度,即单个请求的输入加输出的最大值。--max-num-seqs表示每个DP组允许处理的最大请求数。如果发送到服务的请求数超过此限制,多余的请求将保持等待状态,不会被调度。请注意,等待状态所花费的时间也会计入TTFT和TPOT等指标中。因此,在进行性能测试时,通常建议--max-num-seqs*--data-parallel-size>= 实际总并发数。--max-num-batched-tokens表示模型在单步中可处理的最大token数。目前,vLLM v1调度默认启用ChunkPrefill/SplitFuse,这意味着:- (1) 如果请求的输入长度大于
--max-num-batched-tokens,则会根据--max-num-batched-tokens将其分成多轮计算; - (2) 解码请求优先调度,仅在有可用容量时才调度预填充请求。
- 通常,如果
--max-num-batched-tokens设置得较大,整体延迟会较低,但对HBM内存(激活值使用)的压力会更大。
- (1) 如果请求的输入长度大于
--gpu-memory-utilization表示vLLM将用于实际推理的HBM比例。其本质功能是计算可用的kv_cache大小。在预热阶段(在vLLM中称为profile run),vLLM会记录输入大小为--max-num-batched-tokens的推理过程中的峰值HBM内存使用量。可用的kv_cache大小计算如下:--gpu-memory-utilization* HBM大小 - 峰值HBM内存使用量。因此,--gpu-memory-utilization的值越大,可用的kv_cache就越多。然而,由于预热阶段的HBM内存使用量可能与实际推理期间不同(例如,由于EP负载不均),将--gpu-memory-utilization设置得过高可能会导致实际推理期间出现OOM(内存不足)问题。默认值为0.9。--quantization ascend表示使用量化。要禁用量化,请移除该选项。--enable-prefix-caching启用自动前缀缓存。--speculative-config对Qwen3.8-27B使用qwen3_5_mtp,因为它与Qwen3.5-27B共享相同的MTP头设计。--compilation-config包含与aclgraph图模式相关的配置。最重要的配置是"cudagraph_mode"和"cudagraph_capture_sizes",其含义如下:"cudagraph_mode":表示具体的图模式。目前支持"PIECEWISE"和"FULL_DECODE_ONLY"。图模式主要用于降低算子调度的开销。目前推荐使用"FULL_DECODE_ONLY"。"cudagraph_capture_sizes":表示不同级别的图模式。默认值为[1, 2, 4, 8, 16, 24, 32, 40,..., --max-num-seqs]。在图模式下,不同级别图的输入是固定的,级别之间的输入会自动填充到下一级别。目前建议使用默认设置。只有在某些场景下才需要单独设置以获得最佳性能。
以下示例适用于 Ascend 950PR系列产品。量化版本需要 --quantization ascend。在 Ascend 950PR系列产品上,Qwen3.8-27B-w8a8 是当前推荐的权重;后续进一步优化后可切换至 Qwen3.8-27B-w8a8-mxfp8。
#!/bin/sh
# Load model from ModelScope to speed up download
export VLLM_USE_MODELSCOPE=True
# Size of the shared buffer (in MB) used by HCCL for NPU-to-NPU collective communication
export HCCL_BUFFSIZE=512
# To reduce memory fragmentation and avoid out of memory
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
# Model weight path; can be a ModelScope model id (e.g., Eco-Tech/Qwen3.8-27B-w8a8) or a local directory path
# Ensure the model path matches the directory recorded during download
export MODEL_PATH=Eco-Tech/Qwen3.8-27B-w8a8
vllm serve $MODEL_PATH \
--host 0.0.0.0 \
--port 8000 \
--data-parallel-size 1 \
--tensor-parallel-size 1 \
--quantization ascend \
--served-model-name qwen3.8 \
--max-num-seqs 32 \
--max-model-len 256000 \
--max-num-batched-tokens 16384 \
--trust-remote-code \
--enable-prefix-caching \
--gpu-memory-utilization 0.9 \
--speculative-config '{"method": "qwen3_5_mtp", "num_speculative_tokens": 3, "enforce_eager": true}' \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
--additional-config '{"enable_cpu_binding":true}'
关键参数说明:
--data-parallel-size 1和--tensor-parallel-size 1是数据并行(DP)和张量并行(TP)大小的常用设置。--max-model-len表示上下文长度,即单个请求输入加输出的最大值。--max-num-seqs表示每个 DP 组允许处理的最大请求数。如果发送到服务的请求数超过此限制,超出的请求将保持等待状态,不会被调度。请注意,等待状态所花费的时间也会计入 TTFT 和 TPOT 等指标。因此,在测试性能时,通常建议--max-num-seqs*--data-parallel-size>= 实际总并发数。--max-num-batched-tokens表示模型单步可处理的最大 token 数。目前,vLLM v1 调度默认启用 ChunkPrefill/SplitFuse,这意味着:- (1) 如果某个请求的输入长度大于
--max-num-batched-tokens,将按照--max-num-batched-tokens分成多轮计算; - (2) Decode 请求优先调度,只有在有可用容量时才会调度 prefill 请求。
- 通常,如果将
--max-num-batched-tokens设置为较大的值,整体时延会更低,但对 HBM 内存(激活值占用)的压力会更大。
- (1) 如果某个请求的输入长度大于
--gpu-memory-utilization表示 vLLM 将用于实际推理的 HBM 比例。其核心作用是计算可用的 kv_cache 大小。在预热阶段(vLLM 中称为 profile run),vLLM 会记录输入大小为--max-num-batched-tokens时一次推理过程中的 HBM 内存峰值占用。可用 kv_cache 大小则计算为:--gpu-memory-utilization* HBM 大小 - HBM 内存峰值占用。因此,--gpu-memory-utilization的值越大,可使用的 kv_cache 就越多。但是,由于预热阶段的 HBM 内存占用可能与实际推理时不同(例如 EP 负载不均衡),将--gpu-memory-utilization设置得过高可能会导致实际推理时出现 OOM(Out of Memory,内存不足)问题。默认值为0.9。--quantization ascend表示使用量化。要禁用量化,请移除该选项。--enable-prefix-caching启用自动前缀缓存。--speculative-config对Qwen3.8-27B使用qwen3_5_mtp,因为它与Qwen3.5-27B共享相同的 MTP head 设计。--compilation-config包含与 aclgraph 图模式相关的配置。最重要的配置是"cudagraph_mode"和"cudagraph_capture_sizes",其含义如下:"cudagraph_mode":表示具体的图模式。目前支持"PIECEWISE"和"FULL_DECODE_ONLY"。图模式主要用于降低算子分发开销。目前推荐使用"FULL_DECODE_ONLY"。"cudagraph_capture_sizes":表示不同层级的图模式。默认值为[1, 2, 4, 8, 16, 24, 32, 40,..., --max-num-seqs]。在图模式下,不同层级的图输入是固定的,层级之间的输入会自动填充到下一层级。目前推荐使用默认设置。仅在某些场景下需要单独设置此项以达到最优性能。
--additional-config '{"enable_cpu_binding":true}'将 OMP 线程绑定到固定的 CPU 核心。在单个 Ascend 950PR系列产品上,这是实测中最大的单项优化手段:单流 decode 从没有它时的 32 tok/s 提升到有它时的 63 tok/s。
以下示例适用于Atlas 800 A3 / Atlas 800 A2。
#!/bin/sh
# Load model from ModelScope to speed up download
export MODEL_PATH=Eco-Tech/Qwen3.8-27B-w8a8
export VLLM_USE_MODELSCOPE=True
export HCCL_BUFFSIZE=512
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
# Size of the shared buffer (in MB) used by HCCL for NPU-to-NPU collective communication
# To reduce memory fragmentation and avoid out of memory
# Model weight path; can be a ModelScope model id (e.g., Eco-Tech/Qwen3.8-27B-w8a8) or a local directory path
# Ensure the model path matches the directory recorded during download
vllm serve $MODEL_PATH \
--host 0.0.0.0 \
--port 8000 \
--data-parallel-size 1 \
--tensor-parallel-size 2 \
--quantization ascend \
--served-model-name qwen3.8 \
--max-num-seqs 32 \
--max-model-len 131072 \
--max-num-batched-tokens 16384 \
--trust-remote-code \
--enable-prefix-caching \
--gpu-memory-utilization 0.85 \
--speculative-config '{"method": "qwen3_5_mtp", "num_speculative_tokens": 3, "enforce_eager": true}' \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
--additional-config '{"enable_cpu_binding":true}'
关键参数说明:
--data-parallel-size 1和--tensor-parallel-size 2是数据并行(DP)和张量并行(TP)大小的常见设置。--max-model-len表示上下文长度,即单个请求的输入加输出的最大值。--max-num-seqs表示每个DP组允许处理的最大请求数。如果发送到服务的请求数超过此限制,多余的请求将保持等待状态,不会被调度。请注意,等待状态所花费的时间也会计入TTFT和TPOT等指标中。因此,在进行性能测试时,通常建议--max-num-seqs*--data-parallel-size>= 实际总并发数。--max-num-batched-tokens表示模型在单步中能够处理的最大token数。目前,vLLM v1调度默认启用ChunkPrefill/SplitFuse,这意味着:- (1) 如果请求的输入长度大于
--max-num-batched-tokens,则会根据--max-num-batched-tokens将其分成多轮计算; - (2) 解码请求优先调度,仅在有可用容量时才调度预填充请求。
- 通常,如果
--max-num-batched-tokens设置得较大,整体延迟会较低,但对HBM内存(激活值使用)的压力会更大。
- (1) 如果请求的输入长度大于
--gpu-memory-utilization表示vLLM将用于实际推理的HBM比例。其本质功能是计算可用的kv_cache大小。在预热阶段(在vLLM中称为profile run),vLLM记录输入大小为--max-num-batched-tokens的推理过程中的峰值HBM内存使用量。然后,可用的kv_cache大小计算为:--gpu-memory-utilization* HBM大小 - 峰值HBM内存使用量。因此,--gpu-memory-utilization的值越大,可用的kv_cache就越多。然而,由于预热阶段的HBM内存使用量可能与实际推理阶段不同(例如,由于EP负载不均),将--gpu-memory-utilization设置得过高可能会导致实际推理期间出现OOM(内存不足)问题。默认值为0.9。--quantization ascend表示使用量化。要禁用量化,请移除该选项。--enable-prefix-caching启用自动前缀缓存。--speculative-config对Qwen3.8-27B使用qwen3_5_mtp,因为它与Qwen3.5-27B共享相同的MTP头设计。--compilation-config包含与aclgraph图模式相关的配置。最重要的配置是"cudagraph_mode"和"cudagraph_capture_sizes",其含义如下:"cudagraph_mode":表示具体的图模式。目前支持"PIECEWISE"和"FULL_DECODE_ONLY"。图模式主要用于降低算子调度的开销。目前推荐使用"FULL_DECODE_ONLY"。"cudagraph_capture_sizes":表示不同级别的图模式。默认值为[1, 2, 4, 8, 16, 24, 32, 40,..., --max-num-seqs]。在图模式下,不同级别图的输入是固定的,级别之间的输入会自动填充到下一级别。目前推荐使用默认设置。只有在某些场景下,才需要单独设置此参数以达到最佳性能。
目前仅支持TP场景。根据可用设备选择TP=2或TP=4。将MODEL_PATH替换为ModelScope模型ID或本地目录路径。量化版本需要使用--quantization ascend参数启动。
启动命令:
#!/bin/sh
# Load model from ModelScope to speed up download
export VLLM_USE_MODELSCOPE=True
# Model weight path; can be a ModelScope model id (e.g., Eco-Tech/Qwen3.8-27B-w8a8) or a local directory path
# Ensure the model path matches the directory recorded during download
export MODEL_PATH=Eco-Tech/Qwen3.8-27B-w8a8-310p
vllm serve $MODEL_PATH \
--host 127.0.0.1 \
--port 8000 \
--tensor-parallel-size 4 \
--served-model-name qwen3.8 \
--max-num-seqs 128 \
--max-model-len 16384 \
--trust-remote-code \
--gpu-memory-utilization 0.90 \
--mamba-ssm-cache-dtype float16 \
--dtype float16 \
--speculative-config '{"method": "qwen3_5_mtp","num_speculative_tokens":1}' \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [2,16]}' \
--additional-config '{"ascend_compilation_config": {"enable_npugraph_ex": false}}'
关键参数说明:
--tensor-parallel-size设置张量并行大小。根据可用设备选择TP=2或TP=4。--max-model-len表示上下文长度,即单个请求的输入加输出的最大值。根据实际工作负载和可用内存进行配置;Qwen3.8-27B支持最大262144。--max-num-seqs表示最大并发请求数。根据需要配置——设置过高可能导致OOM。--gpu-memory-utilization表示vLLM将用于实际推理的HBM比例。根据实际设备内存配置此值;设置过高可能导致OOM。默认值为0.9。--mamba-ssm-cache-dtype设置Mamba SSM缓存的数据类型。在Atlas 300I DUO上,仅支持float16。- 在Atlas 300I DUO上必须设置
--dtype float16。这些设备仅支持FP16数据类型。 --speculative-config对Qwen3.8-27B使用qwen3_5_mtp,因为它与Qwen3.5-27B共享相同的MTP头设计。在Atlas 300I DUO上,建议将num_speculative_tokens设置为1。--compilation-config包含与aclgraph图模式相关的配置。最重要的配置是"cudagraph_mode"和"cudagraph_capture_sizes",含义如下:"cudagraph_mode":表示具体的图模式。目前支持"PIECEWISE"和"FULL_DECODE_ONLY"。图模式主要用于降低算子调度的开销。目前推荐使用"FULL_DECODE_ONLY"。"cudagraph_capture_sizes":表示不同级别的图模式。当启用张量并行(TP)时,硬件事件ID限制最多允许两个捕获大小(例如,[1, 8])。 启用MTP时,将每个捕获大小计算为n * (num_speculative_tokens + 1),其中n是不启用MTP部署时的捕获大小。例如,当num_speculative_tokens为1时,非MTP大小[1,2,4,8]变为[2,4,8,16]。
- 在Atlas 300I DUO上需要使用带有
"ascend_compilation_config": {"enable_npugraph_ex": false}的--additional-config,因为该平台不支持enable_npugraph_ex。
等待引擎完成权重加载和图捕获。成功启动会包含类似以下的输出:
INFO: Started server process
INFO: Waiting for application startup.
INFO: Application startup complete.
6 功能验证¶
服务启动后,可以通过发送提示词来调用模型。支持两个API接口:completions 和 chat/completions。使用您配置的 --served-model-name(对于 Qwen3.8-27B 为 qwen3.8)。
Completions API:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8",
"prompt": "The future of AI is",
"max_tokens": 50,
"temperature": 0.7
}'
Chat Completions API:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8",
"messages": [
{"role": "user", "content": "The future of AI is"}
],
"max_completion_tokens": 1024,
"temperature": 1.0,
"top_p": 0.95
}'
预期结果:服务返回HTTP 200 OK。JSON响应中包含带有生成文本的 choices 字段。completions API的示例输出(为简洁起见,内容已截断):
{
"id": "cmpl-xxxxxxxxxxxxx",
"object": "text_completion",
"created": 1780971952,
"model": "qwen3.8",
"choices": [
{
"index": 0,
"text": "The future of AI is a rapidly evolving landscape with breakthroughs in natural language understanding, multimodal reasoning, and autonomous agents. As models grow more capable and efficient...",
"logprobs": null,
"finish_reason": "length"
}
],
"usage": {
"prompt_tokens": 4,
"total_tokens": 54,
"completion_tokens": 50
}
}
7 精度评估¶
以下是一种精度评估方法。
7.1 使用 AISBench¶
-
有关详细信息,请参阅 使用AISBench。
-
执行后,您可以获得结果。以下是
vllm-ascend:v0.23.0rc1中Qwen3.8-27B、Qwen3.8-27B-w8a8和Qwen3.8-27B-w8a8-mxfp8的结果,仅供参考。
| dataset | model | metric | mode | vllm-api-general-chat |
|---|---|---|---|---|
| GPQA Diamond | Qwen3.8-27B | accuracy | gen | 90.40 |
| GPQA Diamond | Qwen3.8-27B-w8a8 | accuracy | gen | 89.90 |
| GPQA Diamond | Qwen3.8-27B-w8a8-mxfp8 | accuracy | gen | 89.39 |
8 性能评估¶
8.1 使用 AISBench¶
有关详细信息,请参阅使用AISBench进行性能评估。
8.2 使用 vLLM Benchmark¶
以Qwen3.8-27B-w8a8的性能评估为例。
有关更多详细信息,请参阅vllm基准测试。
| 参数 | 标准部署 | 性能测试 |
|---|---|---|
--max-model-len |
256000 | 250000 |
--max-num-batched-tokens |
16384 | 8192 |
--gpu-memory-utilization |
0.9 | 0.95 |
vllm bench有三个子命令:
latency:基准测试单批请求的延迟。serve:基准测试在线服务吞吐量。throughput:基准测试离线推理吞吐量。
以serve为例。按如下方式运行代码。
export VLLM_USE_MODELSCOPE=True
# For Qwen3.8-27B-w8a8:
vllm bench serve --model Eco-Tech/Qwen3.8-27B-w8a8 --dataset-name random --random-input 200 --num-prompts 200 --request-rate 1 --save-result --result-dir ./
大约几分钟后,即可获得性能评估结果。
9 性能调优¶
9.1 推荐配置¶
注意:当前文档侧重于Qwen3.8-27B模型在Ascend NPU上的快速适配和验证。性能调优结果尚未完全验证。典型场景(如长上下文、低延迟和高吞吐)的推荐配置将在相应验证完成后在此补充和更新。同时,请参考第9.2节获取通用调优指南。
Atlas 300I DUO:目前仅支持TP场景。根据可用设备选择TP=2或TP=4。使用TP=4时,
--max-model-len可支持128k和256k长序列场景;根据需要配置--max-num-seqs——设置过高可能导致OOM。
9.2 调优指南¶
9.2.1 通用调优参考¶
请参阅公共性能调优文档了解调优方法。 请参阅功能矩阵了解详细的功能描述。
9.2.2 模型特定优化¶
默认启用的优化¶
以下优化默认启用,无需额外配置:
| 优化技术 | 技术原理 | 性能收益 |
|---|---|---|
| 分块预填充 | vLLM V1调度器将长预填充输入拆分为多个块,每一步最多处理--max-num-batched-tokens个令牌。 |
降低每步内存峰值,支持更大的批处理大小和更高的吞吐量。 |
| 全解码ACL图 | 使用--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}'一次性捕获并重放整个解码图。 |
降低每步算子调度开销,稳定解码延迟。 |
| CPU绑定 | 通过--additional-config '{"enable_cpu_binding":true}'将工作线程绑定到专用CPU核心。 |
减少CPU调度抖动,稳定解码延迟。 |
需要显式启用的优化¶
| 优化技术 | 适用场景 | 启用方法 | 技术原理 | 注意事项 |
|---|---|---|---|---|
| 更多指导,请参阅性能调优指南和特性矩阵。 | ||||
| Qwen3.5 MTP投机解码 | 解码密集型工作负载且接受率可接受 | --speculative-config '{"method":"qwen3_5_mtp","num_speculative_tokens":3}' |
使用内置的MTP草稿头每步推测多个令牌,并在单次前向传播中验证。 | 根据目标工作负载调整推测令牌数量;收益取决于接受率。 |
10 常见问题¶
对于常见环境、安装和一般参数问题,请参阅公共FAQ。