双机 16 卡 Ascend 910B3 部署 DeepSeek-V4.1-Flash-1017(W8A8)
本文介绍如何使用 GPUStack,在两台 Atlas 800 A2 系列服务器上跨机部署 DeepSeek-V4.1-Flash-1017 W8A8,并对 Model Runner V1 与 V2 的单会话性能及并发性能进行对比测试。
测试环境
| 项目 | 配置 |
|---|---|
| 硬件配置 | 2 台 Atlas 800 A2 系列服务器,每台 8 张 Ascend 910B3 |
| 模型 | DeepSeek-V4.1-Flash-1017 W8A8 |
| 推理框架 | vLLM-Ascend v0.30.0 |
| 部署平台 | GPUStack |
| 部署拓扑 | DP2 / TP8 / EP16,共 16 卡 |
适用范围:本文记录的是上述软硬件环境中的实测结果。不同 vLLM-Ascend 版本、网络拓扑、模型权重和启动参数可能产生不同结果,请勿直接外推。
参考文档:DeepSeek-V4.1-Flash|vLLM Ascend
一、添加自定义后端
在本文使用的跨机网络环境中,直接使用官方 vLLM-Ascend v0.30.0 镜像启动时出现了以下通信错误:
nnopbase fails to invoke the HcclAllocComResourceByTiling function of the hccl module, ret = 4
该问题与当前网络拓扑下的 MC2 通信建链有关。类似错误及 AllGather 规避思路可参考 vLLM-Ascend Issue #7606。需要注意的是,该 Issue 记录的是 MiniMax M2.5 在双机背靠背组网下的通信问题,并非 DeepSeek-V4.1-Flash 的专属问题;本文引用它主要用于说明相似的通信限制及处理思路。
为适配本次环境,我们基于官方镜像 quay.io/ascend/vllm-ascend:v0.30.0 制作了补丁镜像,并通过环境变量 VLLM_ASCEND_DISABLE_MC2=1 禁用 MC2,切换为 AllGather 通信方式。
重要说明:
VLLM_ASCEND_DISABLE_MC2=1是本文补丁镜像提供的开关,并非当前 vLLM-Ascend 官方文档中的通用环境变量。使用其他镜像时,请以对应版本的实现和文档为准。
补丁镜像地址:
swr.cn-south-1.myhuaweicloud.com/gpustack/vllm-ascend:v0.30.0-allgather
接下来,在 GPUStack 的 vLLM 后端中添加自定义版本,配置如下:
| 配置项 | 配置内容 |
|---|---|
| 镜像 | swr.cn-south-1.myhuaweicloud.com/gpustack/vllm-ascend:v0.30.0-allgather |
| 入口 | vllm serve |
| 命令 | {{model_path}} --host {{worker_ip}} --port {{port}} --served-model-name {{model_name}} |
| 框架 | cann |

后续部署模型时,还需要添加环境变量 VLLM_ASCEND_DISABLE_MC2=1,否则补丁镜像不会切换到本文使用的 AllGather 通信路径。
二、部署配置
完整 YAML 配置:下载 YAML 文件
本文对 Model Runner V1 与 V2 进行了对照测试。在相同提示词下,V2 的单会话生成速度更高。
| 配置项 | V1 对照配置 | V2 实测配置 |
|---|---|---|
VLLM_USE_V2_MODEL_RUNNER | 0 | 1 |
--additional-config | 包含 enable_dsa_cp | 本文配置中移除 enable_dsa_cp |
--engram-config | cpu_offload 与 dp_shared_memory | 可按显存和主机内存情况保留或调整 |
版本说明:当前 vLLM-Ascend 官方文档已经为 A2 双机部署提供 Model Runner V2 配置,并采用 DP2 / TP8 / EP16 拓扑。本文保留 V1 数据仅用于展示同一测试环境中的性能对照。
配置说明:
enable_dsa_cp是否需要移除与 vLLM-Ascend 版本、Model Runner 和并行拓扑有关。本文的处理方式仅适用于本次配置,不建议在其他环境中直接照搬。
本次测试中,Engram 表放置方式对生成性能没有观察到明显影响。但 --engram-config 会影响显存、主机内存和共享内存占用,因此调整前仍需确认资源容量。官方 A2 配置使用 cpu_offload 与 dp_shared_memory 时,还需要为主机内存和共享内存预留足够空间。
这份 YAML 怎么用
在部署页面右上角选择「部署模型 → YAML 文件」,然后导入 YAML。
导入前,GPUStack 会将 YAML 与当前集群配置进行比对,并列出具体变更。确认无误后,再将配置写入集群。

正式导入前,建议先调整以下两项:
- 将
local_path改为实际的模型权重目录。两个 Worker 容器中的权重绝对路径必须一致。 - 可以先删除
gpu_selector,导入后再根据实际节点和 NPU 情况进行配置。
部署完成后,一个模型副本会占用两台服务器的全部 16 张 NPU 卡。

三、性能实测
单会话测试
在 GPUStack 试验场中,使用相同提示词分别测试 Model Runner V1 和 V2。
| Model Runner | 单会话生成速度 |
|---|---|
| V1 | 20.03 Tokens/s |
| V2 | 29.29 Tokens/s |


相同提示词下,V2 的单会话生成速度较 V1 提升约 46%。
这套配置启用了 DSpark 投机解码,并设置 5 个草稿 Token,因此单会话生成速度也会受到提示词和草稿 Token 接受率影响。接受率越高,生成速度通常越快;接受率较低时,加速收益也会下降。
不同提示词之间出现较大的速度差异属于正常现象。本次 V1 与 V2 使用同一条提示词,因此结果具备一定的对比参考价值,但仍不能替代多轮、不同负载下的完整基准测试。
并发性能测试
使用 GPUStack 基准测试工具,设置 32 并发、1024 个输入 Token 和 512 个输出 Token,测试结果如下:

| 指标 | 测试结果 |
|---|---|
| 总吞吐量 | 1413 Tokens/s |
| 输出吞吐量 | 462 Tokens/s |
| 平均首 Token 延迟(TTFT) | 2.45 s |
| 平均每 Token 生成耗时(TPOT) | 54.48 ms |
| 请求成功率 | 100% |
| 请求数量 | 153 |
| 失败请求 | 0 |
在本次 32 并发测试中,总吞吐量达到 1413 Tokens/s,153 个请求均成功完成,未出现失败请求。
四、总结
- 跨机部署:两台 Atlas 800 A2 系列服务器共 16 张 Ascend 910B3,采用 DP2 / TP8 / EP16 拓扑,DeepSeek-V4.1-Flash-1017 W8A8 在本文环境中可以稳定运行。
- 通信处理:本文网络环境下的 MC2 通信出现建链问题。使用补丁镜像并设置
VLLM_ASCEND_DISABLE_MC2=1后,可切换到 AllGather 通信路径。该环境变量仅适用于本文补丁镜像。 - 性能对比:在相同提示词和本次测试环境下,Model Runner V2 的单会话生成速度由 20.03 Tokens/s 提升至 29.29 Tokens/s,提升约 46%。
- 启动预热:冷启动后的前两个请求可能较慢,主要耗时来自图捕获和算子编译,本文环境实测需要约 1~2 分钟。正式压测前,建议先发送少量请求进行预热。
需要特别说明的是,当前官方文档在 A2 上更推荐 W4A8 权重,并已提供 Model Runner V2 的双机配置。本文使用 W8A8,主要用于记录实际环境中的部署过程与性能结果。官方文档也说明,现有 A2 双机示例主要完成了启动、文本和图像冒烟测试以及 16K 输入验证,超长上下文和高并发性能仍需根据实际环境进一步验证。
更多推荐




所有评论(0)