Qwen3.8-2.4T-A95B¶
1 简介¶
Qwen3.8-2.4T-A95B 是一个大规模 MoE 模型,总参数量为 24000 亿,激活参数量为 950 亿。它基于 Qwen3.5 架构构建,在编程、专业工作、科学研究和长周期智能体任务方面均有提升。
本文档描述了模型的主要验证步骤,包括支持的特性、前提条件、安装、多节点部署、功能验证、精度和性能评估、性能调优以及常见问题。已验证的配置涵盖Atlas A3和Atlas A2部署。
本文档基于 vLLM-Ascend 0.23.0 进行验证和编写。当前模型(Qwen3.8-2.4T-A95B)在该版本中首次获得支持。
2 支持特性¶
请参阅支持的模型以获取模型支持矩阵。
请参阅功能指南以获取功能配置详情。
3 前提条件¶
3.1 模型权重¶
以下模型权重可用:
| 权重版本 | 硬件要求 | 下载链接 |
|---|---|---|
Qwen3.8-2.4T-A95B (FP16/BF16) |
约 4.89 TB 的存储和权重内存 | ModelScope |
Qwen3.8-2.4T-A95B-w8a8 |
约 2.33 TiB 的存储和权重内存 | ModelScope |
Qwen3.8-2.4T-A95B-w4a8 |
约 1.21 TiB 的存储和权重内存 | ModelScope |
本指南包含以下已验证的部署配置:
| 平台 | 权重 | 部署 | 拓扑 |
|---|---|---|---|
| 4 × Atlas 800 A3 (64GB × 16) | W8A8 | 混合Prefill/Decode部署 | DP4/TP16/EP64 |
| 8 × Atlas 800 A2 (64GB × 8) | W4A8 | 混合Prefill/Decode部署 | DP8/TP8/EP64 |
检查点和分词器目录必须在所有服务节点上以相同路径可用。W8A8 部署使用惰性 Safetensors 策略,以避免从共享存储预取完整检查点。
建议将模型权重下载到多节点的共享目录中,例如 /root/.cache/。
路径说明:将模型权重下载到您选择的目录并记录该路径。确保后续部署命令中的模型路径与该目录一致。
3.2 验证多节点通信(可选)¶
如果要在多节点环境中部署模型,请按照 验证多节点通信环境 检查通信环境。
4 安装¶
4.1 Docker 镜像安装¶
根据您的机器类型选择镜像,并在您的节点上启动 Docker 镜像。请参阅 使用预构建镜像。
在每个节点上启动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 \
--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/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
进入容器后,验证 vLLM 和 vLLM-Ascend 是否可以导入:
预期输出:
4.2 源码安装¶
您也可以从源码构建并安装 vllm-ascend。请参阅
使用 Python 设置。
如果要部署多节点服务,请在每个节点上安装相同版本的 vLLM 和 vLLM-Ascend。
5 在线服务部署¶
5.1 多节点部署¶
已验证的混合部署在每个节点上运行一个DP rank,在节点内使用张量并行,并在所有节点间使用专家并行。选择与您的平台匹配的标签页:
- A3系列:四个Atlas 800 A3(64GB × 16)节点,DP4/TP16/EP64,使用W8A8检查点。
- A2系列:八个Atlas 800 A2(64GB × 8)节点,DP8/TP8/EP64,使用W4A8检查点。
启动服务之前:
- 将模型路径、节点数、并行大小、本地 IP 地址、网络接口、服务端口和 RPC 端口替换为目标环境中的值。
NIC_NAME必须是拥有LOCAL_IP的接口。- 先启动 Node 0。每个 worker 上的
NODE0_IP必须等于 Node 0 上的LOCAL_IP。 - 为每个 worker 分配唯一的
DP_START_RANK。
# Values that must be adapted to the target environment.
export MODEL_PATH=<QWEN3_8_MODEL_PATH>
export TOKENIZER_PATH=<QWEN3_8_TOKENIZER_PATH>
export LOCAL_IP=<NODE0_LOCAL_IP>
export NIC_NAME=<NODE0_NIC_NAME>
export PORT=<SERVICE_PORT>
export RPC_PORT=<DP_RPC_PORT>
export DP_SIZE=4
export TP_SIZE=16
export HCCL_BUFFSIZE_EP=2048
export VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=3000
export HCCL_BUFFSIZE=1024
export HCCL_IF_IP=$LOCAL_IP
export HCCL_INTRA_ROCE_ENABLE=0
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_SOCKET_IFNAME=$NIC_NAME
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
export GLOO_SOCKET_IFNAME=$NIC_NAME
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export OPENBLAS_NUM_THREADS=1
# Ensure the model path matches the directory recorded during download
vllm serve $MODEL_PATH \
--host 0.0.0.0 \
--port $PORT \
--served-model-name qwen3.8 \
--tokenizer $TOKENIZER_PATH \
--trust-remote-code \
--quantization ascend \
--safetensors-load-strategy lazy \
--tensor-parallel-size $TP_SIZE \
--data-parallel-size $DP_SIZE \
--data-parallel-size-local 1 \
--data-parallel-address $LOCAL_IP \
--data-parallel-rpc-port $RPC_PORT \
--enable-prefix-caching \
--enable-expert-parallel \
--max-model-len 131072 \
--max-num-seqs 8 \
--max-num-batched-tokens 16384 \
--gpu-memory-utilization 0.85 \
--speculative-config '{"method":"qwen3_5_mtp","num_speculative_tokens":1}' \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
--additional-config '{"enable_cpu_binding":true,"enable_fused_mc2":1}'
在每个worker上运行此命令。将LOCAL_IP和NIC_NAME设置为当前节点,并将DP_START_RANK设置为1、2或3。
# Values that must be adapted to the target environment.
export MODEL_PATH=<QWEN3_8_MODEL_PATH>
export TOKENIZER_PATH=<QWEN3_8_TOKENIZER_PATH>
export LOCAL_IP=<WORKER_LOCAL_IP>
export NODE0_IP=<NODE0_LOCAL_IP>
export NIC_NAME=<WORKER_NIC_NAME>
export PORT=<SERVICE_PORT>
export RPC_PORT=<DP_RPC_PORT>
export DP_SIZE=4
export DP_START_RANK=<1_OR_2_OR_3>
export TP_SIZE=16
export HCCL_BUFFSIZE_EP=2048
export VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=3000
export HCCL_BUFFSIZE=1024
export HCCL_IF_IP=$LOCAL_IP
export HCCL_INTRA_ROCE_ENABLE=0
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_SOCKET_IFNAME=$NIC_NAME
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
export GLOO_SOCKET_IFNAME=$NIC_NAME
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export OPENBLAS_NUM_THREADS=1
# Ensure the model path matches the directory recorded during download
vllm serve $MODEL_PATH \
--headless \
--host 0.0.0.0 \
--port $PORT \
--served-model-name qwen3.8 \
--tokenizer $TOKENIZER_PATH \
--trust-remote-code \
--quantization ascend \
--safetensors-load-strategy lazy \
--tensor-parallel-size $TP_SIZE \
--data-parallel-size $DP_SIZE \
--data-parallel-size-local 1 \
--data-parallel-start-rank $DP_START_RANK \
--data-parallel-address $NODE0_IP \
--data-parallel-rpc-port $RPC_PORT \
--enable-prefix-caching \
--enable-expert-parallel \
--max-model-len 131072 \
--max-num-seqs 8 \
--max-num-batched-tokens 16384 \
--gpu-memory-utilization 0.85 \
--speculative-config '{"method":"qwen3_5_mtp","num_speculative_tokens":1}' \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
--additional-config '{"enable_cpu_binding":true,"enable_fused_mc2":1}'
主节点和 worker 节点之间的以下值有所不同:
| 设置项 | Node 0 | Nodes 1-3 | 描述 |
|---|---|---|---|
LOCAL_IP |
节点0 IP | 当前worker IP | 每个节点使用自己的通信IP。 |
NODE0_IP |
不需要 | 节点0 IP | Workers使用此地址加入DP组。 |
--headless |
省略 | 启用 | Workers不暴露API端点。 |
--data-parallel-address |
$LOCAL_IP |
$NODE0_IP |
始终解析为节点0。 |
--data-parallel-start-rank |
默认为0 |
1、2或3 |
每个节点必须拥有唯一的DP rank。 |
关键部署参数:
| 参数 | 描述 |
|---|---|
--tensor-parallel-size 16 |
使用一个A3节点中的所有16个NPU进行张量并行。 |
--data-parallel-size 4 |
在四个节点间创建四个全局DP rank。 |
--data-parallel-size-local 1 |
在当前节点上运行一个DP rank。 |
--data-parallel-start-rank |
选择worker节点的全局DP rank。 |
--enable-expert-parallel |
为MoE层启用专家并行。 |
--max-model-len 131072 |
设置最大输入和输出组合长度。 |
--quantization ascend |
启用Ascend W8A8量化。 |
--safetensors-load-strategy lazy |
避免从NFS预取完整的2.33 TiB检查点。 |
--max-num-seqs 8 |
为每个DP组设置八个活动序列,DP4下共32个。 |
--max-num-batched-tokens 16384 |
控制调度器的token预算。 |
--gpu-memory-utilization 0.85 |
为运行时内存保留HBM余量。 |
--enable-prefix-caching |
启用自动前缀缓存。 |
--speculative-config |
启用一个Qwen3.5 MTP推测token。 |
--compilation-config |
使用FULL_DECODE_ONLY ACL Graph重放。 |
--additional-config |
启用CPU绑定和Fused MC2。 |
常见问题提示:如果worker立即退出,请确认节点0已在运行,--data-parallel-address解析到节点0,所有节点使用相同的RPC端口,并且每个worker使用唯一的DP起始rank。
已验证的混合部署使用八个Atlas 800 A2(64GB × 8)节点,使用Qwen3.8-2.4T-A95B-w4a8检查点。数据并行跨越八个节点,每个节点运行一个DP rank,张量并行使用节点中的所有8个NPU,最终拓扑为DP8/TP8/EP64。
在A2上使用W4A8检查点,以便为95B激活参数的大型激活占用保留足够的HBM。由于每个token的MoE中间缓冲区较大,与A3配置相比,--max-num-batched-tokens减少到4096,--gpu-memory-utilization提高到0.92。较小的token预算使MoE激活峰值保持足够低,从而为262144上下文长度留出KV缓存空间。
# Values that must be adapted to the target environment.
export MODEL_PATH=<QWEN3_8_MODEL_PATH>
export TOKENIZER_PATH=<QWEN3_8_TOKENIZER_PATH>
export LOCAL_IP=<NODE0_LOCAL_IP>
export NIC_NAME=<NODE0_NIC_NAME>
export PORT=<SERVICE_PORT>
export RPC_PORT=<DP_RPC_PORT>
export DP_SIZE=8
export TP_SIZE=8
export VLLM_ENGINE_READY_TIMEOUT_S=7200
export VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=3000
export HCCL_BUFFSIZE=1024
export HCCL_BUFFSIZE_EP=2048
export HCCL_CONNECT_TIMEOUT=1800
export HCCL_EXEC_TIMEOUT=1800
export HCCL_IF_IP=$LOCAL_IP
export HCCL_INTRA_PCIE_ENABLE=1
export HCCL_INTRA_ROCE_ENABLE=0
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_SOCKET_IFNAME=$NIC_NAME
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
export GLOO_SOCKET_IFNAME=$NIC_NAME
export TP_SOCKET_IFNAME=$NIC_NAME
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export TASK_QUEUE_ENABLE=1
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=1
export OPENBLAS_NUM_THREADS=1
# Ensure the model path matches the directory recorded during download
vllm serve $MODEL_PATH \
--host 0.0.0.0 \
--port $PORT \
--served-model-name qwen3.8 \
--tokenizer $TOKENIZER_PATH \
--trust-remote-code \
--quantization ascend \
--safetensors-load-strategy lazy \
--tensor-parallel-size $TP_SIZE \
--data-parallel-size $DP_SIZE \
--data-parallel-size-local 1 \
--data-parallel-address $LOCAL_IP \
--data-parallel-rpc-port $RPC_PORT \
--enable-prefix-caching \
--enable-expert-parallel \
--max-model-len 262144 \
--max-num-seqs 8 \
--max-num-batched-tokens 4096 \
--gpu-memory-utilization 0.92 \
--speculative-config '{"method":"qwen3_5_mtp","num_speculative_tokens":1}' \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
--additional-config '{"enable_cpu_binding":true,"enable_fused_mc2":1}'
在每个worker上运行此命令。将LOCAL_IP和NIC_NAME设置为当前节点,并将DP_START_RANK设置为1到7之间的唯一值。
# Values that must be adapted to the target environment.
export MODEL_PATH=<QWEN3_8_MODEL_PATH>
export TOKENIZER_PATH=<QWEN3_8_TOKENIZER_PATH>
export LOCAL_IP=<WORKER_LOCAL_IP>
export NODE0_IP=<NODE0_LOCAL_IP>
export NIC_NAME=<WORKER_NIC_NAME>
export PORT=<SERVICE_PORT>
export RPC_PORT=<DP_RPC_PORT>
export DP_SIZE=8
export DP_START_RANK=<1_TO_7>
export TP_SIZE=8
export VLLM_ENGINE_READY_TIMEOUT_S=7200
export VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=3000
export HCCL_BUFFSIZE=1024
export HCCL_BUFFSIZE_EP=2048
export HCCL_CONNECT_TIMEOUT=1800
export HCCL_EXEC_TIMEOUT=1800
export HCCL_IF_IP=$LOCAL_IP
export HCCL_INTRA_PCIE_ENABLE=1
export HCCL_INTRA_ROCE_ENABLE=0
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_SOCKET_IFNAME=$NIC_NAME
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
export GLOO_SOCKET_IFNAME=$NIC_NAME
export TP_SOCKET_IFNAME=$NIC_NAME
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export TASK_QUEUE_ENABLE=1
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=1
export OPENBLAS_NUM_THREADS=1
# Ensure the model path matches the directory recorded during download
vllm serve $MODEL_PATH \
--headless \
--host 0.0.0.0 \
--port $PORT \
--served-model-name qwen3.8 \
--tokenizer $TOKENIZER_PATH \
--trust-remote-code \
--quantization ascend \
--safetensors-load-strategy lazy \
--tensor-parallel-size $TP_SIZE \
--data-parallel-size $DP_SIZE \
--data-parallel-size-local 1 \
--data-parallel-start-rank $DP_START_RANK \
--data-parallel-address $NODE0_IP \
--data-parallel-rpc-port $RPC_PORT \
--enable-prefix-caching \
--enable-expert-parallel \
--max-model-len 262144 \
--max-num-seqs 8 \
--max-num-batched-tokens 4096 \
--gpu-memory-utilization 0.92 \
--speculative-config '{"method":"qwen3_5_mtp","num_speculative_tokens":1}' \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
--additional-config '{"enable_cpu_binding":true,"enable_fused_mc2":1}'
主节点和 worker 节点之间的以下值有所不同:
| 设置 | 节点0 | 节点1-7 | 描述 |
|---|---|---|---|
LOCAL_IP |
节点0 IP | 当前worker IP | 每个节点使用自己的通信IP。 |
NODE0_IP |
不需要 | 节点0 IP | Workers使用此地址加入DP组。 |
--headless |
省略 | 启用 | Workers不暴露API端点。 |
--data-parallel-address |
$LOCAL_IP |
$NODE0_IP |
始终解析为节点0。 |
--data-parallel-start-rank |
默认为0 |
1到7 |
每个节点必须拥有唯一的DP rank。 |
关键部署参数:
| 参数 | 描述 |
|---|---|
--tensor-parallel-size 8 |
使用一个A2节点中的所有8个NPU进行张量并行。 |
--data-parallel-size 8 |
在八个节点上创建八个全局DP秩。 |
--data-parallel-size-local 1 |
在当前节点上运行一个DP rank。 |
--data-parallel-start-rank |
选择worker节点的全局DP rank。 |
--enable-expert-parallel |
为MoE层启用专家并行。 |
--max-model-len 262144 |
设置输入和输出组合的最大长度。 |
--quantization ascend |
为已验证的检查点启用Ascend W4A8量化。 |
--safetensors-load-strategy lazy |
避免从NFS预取完整的检查点。 |
--max-num-seqs 8 |
为每个DP组设置八个活动序列。 |
--max-num-batched-tokens 4096 |
控制调度器的token预算。较大的值会增加MoE激活峰值,并减少可用于262144上下文的KV缓存。 |
--gpu-memory-utilization 0.92 |
在64GB节点上为权重和激活峰值预留HBM余量。 |
--enable-prefix-caching |
启用自动前缀缓存。 |
--speculative-config |
启用一个Qwen3.5 MTP推测token。 |
--compilation-config |
使用FULL_DECODE_ONLY ACL Graph重放。 |
--additional-config |
启用CPU绑定和Fused MC2。 |
常见问题提示:如果worker立即退出,请确认节点0已在运行,--data-parallel-address解析到节点0,所有节点使用相同的RPC端口,并且每个worker使用唯一的DP起始rank。
等待引擎完成权重加载和图捕获。成功启动时会包含类似以下的输出:
INFO: Started server process
INFO: Waiting for application startup.
INFO: Application startup complete.
5.2 预填充-解码分离¶
PD分离部署将Prefill和Decode划分为不同的服务组。 Prefill节点处理提示词块,Decode节点负责token生成, 代理在两者之间转发请求。
PD分离的详细命令和配置将在未来的更新中提供。敬请期待。
6 功能验证¶
在所有DP rank就绪后,向Node 0 API端点发送文本请求。 开放权重模型始终使用思考模式,不支持 多模态输入。
curl http://<server_ip>:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8",
"messages": [
{"role": "user", "content": "Write a Python function to merge two sorted linked lists."}
],
"temperature": 1.0,
"top_p": 0.95,
"stream": true,
"chat_template_kwargs": {
"enable_thinking": true,
"preserve_thinking": true
}
}'
预期结果:每个响应以包裹在<think>...</think>中的推理开始,随后是最终答案。服务返回HTTP 200,并包含一个包含生成文本的choices字段。工作节点是无头的,不直接接受HTTP请求。
该模型官方支持以下推理力度级别:
xhigh:默认;针对复杂任务进行更深层次的推理。medium:在准确性和速度之间取得平衡。low:优先考虑速度和成本。
7 精度评估¶
7.1 准备评估环境¶
有关评估环境和数据集准备,请参阅使用AISBench。
7.2 使用AISBench¶
-
有关详细信息,请参阅使用AISBench。
-
执行后,您可以获得结果。以下是 Qwen3.8-2.4T-A95B-w4a8 和 Qwen3.8-2.4T-A95B-w8a8 的GPQA Diamond结果,仅供参考。
| dataset | model | metric | mode | vllm-api-general-chat |
|---|---|---|---|---|
| GPQA Diamond | Qwen3.8-2.4T-A95B-w4a8 | accuracy | gen | 91.92% |
| GPQA Diamond | Qwen3.8-2.4T-A95B-w8a8 | accuracy | gen | 93.75% |
8 性能评估¶
8.1 安装AISBench¶
在独立的环境或容器中运行AISBench,以便负载生成器 不影响服务进程。请参阅 使用AISBench进行性能评估。
8.2 性能服务配置¶
以第5节中的部署为基线。在所有四个节点上更改以下值:
| 参数 | 标准部署 | 性能测试 |
|---|---|---|
--max-model-len |
131072 | 250000 |
--max-num-batched-tokens |
16384 | 8192 |
--gpu-memory-utilization |
0.85 | 0.95 |
8.3 运行测试¶
以Qwen3.8-2.4T-A95B为例运行性能评估。有关更多详细信息,请参阅
vLLM基准测试。
vllm bench serve \
--model Qwen/Qwen3.8-2.4T-A95B \
--served-model-name qwen3.8 \
--base-url http://<server_ip>:8000 \
--dataset-name random \
--random-input-len 8192 \
--random-output-len 1024 \
--num-prompts 16 \
--max-concurrency 4 \
--save-result \
--result-dir ./
记录A3节点数量、TP/PP/EP拓扑、上下文长度、并发数、 推理力度和权重版本,并与结果一起保存。
9 性能调优¶
9.1 推荐配置¶
以下配置在特定测试环境中经过验证,仅供参考。最佳配置取决于最大输入/输出长度、请求并发度、前缀缓存命中率、量化方式和工作负载特征。请根据您的实际工作负载调整第9.2节中的参数。
表1:场景概述
| 场景 | 部署模式 | *NPU总数 | 权重版本 | 拓扑 |
|---|---|---|---|---|
| Mixed Prefill/Decode | Four Atlas 800 A3 nodes | 64 | W8A8 | DP4/TP16/EP64 |
*NPU总数表示所有节点上使用的NPU总数。
表2:详细配置
| 最大序列数 | 最大模型长度 | 最大批量Token数 | GPU内存利用率 | MTP Token数 | 前缀缓存 | 主要优化 |
|---|---|---|---|---|---|---|
| 8 per DP | 131072 | 16384 | 0.85 | 1 | On | Full decode ACL Graph, Fused MC2, CPU binding |
有关完整的启动命令和参数说明,请参阅第5章中的部署示例。
9.2 调优指南¶
9.2.1 通用调优参考¶
有关通用调优方法,请参阅 公共性能调优文档, 有关功能描述,请参阅 功能矩阵。
推荐的调优顺序:
- 首先设置部署拓扑。已验证的配置使用四个A3节点,采用DP4/TP16/EP64。
- 使用
--max-model-len选择最大上下文长度。长上下文会增加KV缓存使用量,因此如果发生OOM,请减少--max-num-seqs或--gpu-memory-utilization。 - 调整
--max-num-batched-tokens。较大的值通常可以提高预填充吞吐量,但会增加激活内存。解码密集型工作负载通常需要较小的值。 - 根据服务并发度调整
--max-num-seqs。超过此值的请求将在队列中等待,等待时间计入TTFT和TPOT。 - 调整
--gpu-memory-utilization。增加该值可提供更多KV缓存,但需为运行时内存波动和专家不平衡预留余量。 - 调整
--speculative-config。MTP可以提高解码吞吐量,但最佳的num_speculative_tokens取决于接受率和工作负载。 - 调整ACL Graph捕获。解码推荐使用
FULL_DECODE_ONLY。如果手动设置cudagraph_capture_sizes,请包含常见的解码批量大小。
9.2.2 模型特定优化¶
| 优化项 | 启用方式 | 收益 | 备注 |
|---|---|---|---|
| 分块预填充 | 由vLLM V1调度器启用 | 拆分长预填充输入以减少每步内存峰值。 | 使用--max-num-batched-tokens调整。 |
| 前缀缓存 | --enable-prefix-caching |
为重复前缀重用KV状态。 | 收益取决于前缀缓存命中率。 |
| Qwen3.5 MTP投机解码 | --speculative-config '{"method":"qwen3_5_mtp","num_speculative_tokens":1}' |
在接受率良好时提高解码吞吐量。 | 根据目标工作负载调整投机token数量。 |
| 全解码ACL Graph | --compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' |
减少解码期间的算子调度开销。 | 已验证配置使用。 |
| 融合MC2 | --additional-config '{"enable_fused_mc2":1}' |
启用融合的MoE通信和计算。 | 已验证配置使用。 |
| 惰性Safetensors | --safetensors-load-strategy lazy |
避免从共享存储预取完整的检查点。 | 用于W8A8检查点。 |
| CPU绑定 | --additional-config '{"enable_cpu_binding":true}' |
减少CPU调度抖动。 | 在部署命令中显式启用。 |
10 常见问题¶
对于常见的环境、安装和通用参数问题,请参阅公共FAQ。
Q1:开放权重模型支持哪些输入?¶
Qwen3.8-2.4T-A95B是纯文本模型,不支持多模态输入。
Q2:可以禁用思考模式吗?¶
不可以。请保持enable_thinking=true。响应以<think>块中的推理开始,然后返回最终答案。
Q3:如何选择并行大小?¶
根据模型兼容性、权重内存、KV缓存容量和通信性能,一起选择TP、PP、DP和EP。在目标集群上验证完整的拓扑结构。