跳转至

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

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。

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

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

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

有关通用调优方法,请参阅 公共性能调优文档, 有关功能描述,请参阅 功能矩阵。

推荐的调优顺序:

  1. 首先设置部署拓扑。已验证的配置使用四个A3节点,采用DP4/TP16/EP64。
  2. 使用--max-model-len选择最大上下文长度。长上下文会增加KV缓存使用量,因此如果发生OOM,请减少--max-num-seqs或--gpu-memory-utilization。
  3. 调整--max-num-batched-tokens。较大的值通常可以提高预填充吞吐量,但会增加激活内存。解码密集型工作负载通常需要较小的值。
  4. 根据服务并发度调整--max-num-seqs。超过此值的请求将在队列中等待,等待时间计入TTFT和TPOT。
  5. 调整--gpu-memory-utilization。增加该值可提供更多KV缓存,但需为运行时内存波动和专家不平衡预留余量。
  6. 调整--speculative-config。MTP可以提高解码吞吐量,但最佳的num_speculative_tokens取决于接受率和工作负载。
  7. 调整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。在目标集群上验证完整的拓扑结构。