昇腾910B多机分布式部署Qwen3.5-397B-A17B专业评测
谈到多节点推理部署,许多团队的第一选择是引入Ray这样的编排框架。但实际场景中,我们完全可以通过DP(数据并行)+ TP(张量并行)的参数组合,直接在vLLM上完成跨机协同,省去额外的调度层。操作并不复杂,关键在于参数配置的准确度。
- 硬件环境:两台 Atlas 800I A2(每台8张 910B 64GB)
- 示例模型:采用Qwen/Qwen3.5-397B-A17B的w8a8量化版 Eco-Tech/Qwen3.5-397B-A17B-w8a8-mtp
- 推理引擎参考文档:https://docs.vllm.ai/projects/ascend/en/main/tutorials/models...
部署流程分几步走:拉取最新 vllm-ascend 镜像 → 在 GPUStack 平台注册为后端 → 获取跨机通信所需的网络参数 → 分别配置主节点与从节点 → 启动服务并验证。下面拆解每个环节。
添加自定义后端版本
在GPUStack中注册自定义后端,参数填写很直观。版本名称建议直接取镜像标签,例如 0.18.0rc1。镜像地址指向GPUStack同步的国内仓库:swr.cn-south-1.myhuaweicloud.com/gpustack/vllm-ascend:v0.18.0rc1(原始镜像位于 quay.io/ascend/vllm-ascend)。支持框架选择 CANN,入口命令固定为 vllm serve。执行命令格式采用双花括号占位符,GPUStack会在运行时动态替换,直接套用即可:{{model_path}} --host {{worker_ip}} --port {{port}} --served-model-name {{model_name}}。
获取跨机部署的信息
开始跨机部署前,必须先确认网卡信息——这是基础。
主节点网络状态:
从节点网络状态:
网卡选择逻辑很简单:只要与其它节点处于同一网段且能正常通信即可。注意:选中的网卡仅负责API通信,对带宽要求不高;底层数据传输仍依赖高速网络。多节点通信验证方法详见官方文档:https://docs.vllm.ai/projects/ascend/zh-cn/latest/installatio...
以演示环境为例,最终选用以下参数:
- 主节点:网卡
enp67s0f0,IP192.168.13.33。 - 从节点:网卡
enp67s0f0,IP192.168.13.34。
vLLM 跨机分布式部署
主节点配置
- 在GPUStack部署页面,进入ModelScope菜单。
- 搜索并选中模型
Eco-Tech/Qwen3.5-397B-A17B-w8a8-mtp。 - 初始设置时先将副本数调为0——等主从节点参数都配好后再统一启动。
- 推理后端选择vLLM,版本指定为刚才添加的
0.18.0rc1。
- 调度方式改为“手动”,勾选主节点(Node 1)上的所有NPU卡。
- 进入详细参数配置页面。
主节点的高级参数填写如下:
--data-parallel-size 2 --tensor-parallel-size 8 # 并行策略:2数据并行(DP)、8张量并行(TP)。注意:必须写在同一行
--data-parallel-size-local=1 # 当前节点上运行的DP副本数
--api-server-count=2 # API服务进程数(不指定时默认等于DP数量)
--data-parallel-address=192.168.13.33 # 多节点DP场景下的主节点IP地址。请以实际环境获取为准
--data-parallel-rpc-port=13389 # 多节点DP的RPC通信端口
--seed=1024 # 随机种子(多节点需保持一致以保证采样对齐,未指定时默认0)
--enable-expert-parallel
--max-num-seqs=16 # 单次迭代最大并发序列数(吞吐量与延迟/显存之间的折中值)
--max-model-len=32768 # 最大上下文长度(按需设置,过大易显存溢出OOM)
--max-num-batched-tokens=8192 # 单次Batch处理的最大Token数(用于控制显存峰值)
--gpu-memory-utilization=0.90
--trust-remote-code
--async-scheduling # 启用异步调度(重叠CPU调度与GPU计算开销,提升吞吐)
--no-enable-prefix-caching
--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,"multistream_overlap_shared_expert":true}'
--disable-access-log-for-endpoints /health,/metrics,/ping # 屏蔽健康检查等探针接口的访问日志,保持日志聚焦业务请求特别提醒:--tensor-parallel-size 与 --data-parallel-size 必须置于同一行,换行会导致参数校验失败。GPUStack后续版本会优化此部署方式,现阶段请按此处理。
主节点环境变量:
PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
HCCL_IF_IP=192.168.13.33 # 以实际环境为准
GLOO_SOCKET_IFNAME=enp67s0f0 # 以实际环境为准
TP_SOCKET_IFNAME=enp67s0f0 # 同上
HCCL_SOCKET_IFNAME=enp67s0f0 # 同上
OMP_PROC_BIND=false
OMP_NUM_THREADS=1
HCCL_BUFFSIZE=1024
TASK_QUEUE_ENABLE=1
VLLM_ENGINE_READY_TIMEOUT_S=1500 # 引擎启动超时时间;多节点大模型加载耗时较长,设为25分钟更稳妥从节点配置
- 直接克隆已配置好的主节点模型。
- 在调度选项中,勾选从节点(Node 2)上的所有NPU卡。
- 从节点的高级参数与主节点存在两处差异:
- --api-server-count=2
+ --data-parallel-start-rank=1
+ --headless- 环境变量仅一处不同:
- HCCL_IF_IP=192.168.13.33
+ HCCL_IF_IP=192.168.13.34若从节点的网卡名称与主节点不一致,需同步修改相应环境变量。
启动并测试模型
跨机DP的参数至此全部就位。接下来将主节点和从节点的副本数从0改为1,模型便会开始启动。启动顺序无硬性要求,只需在短时间内依次拉起即可。注意:从节点会一直显示 Starting 状态——这是正常现象,无需担心。
待主节点状态变为 Running 后,即可在试验场发起对话测试。
如何禁用思考过程?
在请求体中传入 enable_thinking: false 即可,参考以下示例:
curl http://your-gpustack-server/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${YOUR_GPUSTACK_API_KEY}" \
-d '{
"model": "qwen3.5-397b-1",
"messages": [
{
"role": "user",
"content": "你好"
}
],
"extra_body": {
"chat_template_kwargs": {
"enable_thinking": false
}
}
}'小结
多节点DP部署带来的收益很直观:请求会在各节点间动态分发——并非简单的轮询,而是结合节点实时负载进行调度。这大幅降低了单节点被长请求阻塞的概率,高并发场景下的整体吞吐也更稳定。











