跳转至

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 是否可以导入:

python -c "import vllm, vllm_ascend; print('vllm and vllm_ascend are ready')"

预期输出:

vllm and vllm_ascend are ready

4.2 源码安装

您也可以从源码构建并安装vllm-ascend。请参考使用Python设置。

如果要部署多节点服务,请在每个节点上安装相同版本的 vLLM 和 vLLM-Ascend。

Note

在Atlas 300I DUO上,您可能需要卸载triton-ascend和triton以避免依赖冲突:

pip uninstall -y triton-ascend triton

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内存(激活值使用)的压力会更大。
  • --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 内存(激活值占用)的压力会更大。
  • --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内存(激活值使用)的压力会更大。
  • --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

  1. 有关详细信息,请参阅 使用AISBench。

  2. 执行后,您可以获得结果。以下是 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。