vLLM-Ascend 多机推理HCCL通信原理深度解析

从 vLLM-Ascend DeepSeek-V3.2 多机部署出发,深入解析 HCCL 初始化、通信组构建与跨节点张量传输机制

Posted by iceyao on Wednesday, April 29, 2026

一、引言:多机推理真正难的不是“启动多个进程”

参考文档:DeepSeek-V3.2 — vllm-ascend

vLLM-Ascend 的 DeepSeek-V3.2 教程给出了 Atlas 800 A3/A2 上部署 W8A8 量化模型的多种方式:单机部署、普通多机部署,以及更复杂的 Prefill-Decode 分离部署。表面上看,多机部署只是把 vllm serve 分别跑在不同节点上,再加上 --data-parallel-size--tensor-parallel-size--headless 等参数;但真正决定系统能不能稳定工作的,是这些进程背后的通信层。

在 Ascend 体系里,这个通信层的核心就是 HCCL(Huawei Collective Communication Library)。它负责在单机多卡和多机多卡之间完成张量同步、规约、聚合、广播、AlltoAll 等集合通信操作。对于 DeepSeek 这类 MoE 模型,多机推理不只是“每个节点各算各的”,还会涉及:

  • TP(Tensor Parallel)内部的激活规约与拼接;
  • DP(Data Parallel)rank 之间的调度、同步与空转协调;
  • EP(Expert Parallel)下专家路由、专家输出聚合和跨 rank 同步;
  • Prefill-Decode 分离场景下的 KV cache 传输与请求代理;
  • 多节点 NPU 通信网络的初始化、寻址、建链和故障收敛。

本文基于 vLLM-Ascend DeepSeek-V3.2 教程、vLLM-Ascend Multi-Node-DP 教程,以及 HCCL / RankTable 公开资料,对多机推理中的 HCCL 通信机制做一次系统拆解。需要说明的是:文中的流程图和架构图均为基于公开文档整理的机制示意,不代表未公开实现细节或官方原图。

本文分析主线


二、先看部署形态:vLLM-Ascend 多机推理如何组织进程

DeepSeek-V3.2 文档里,多机部署的核心模式可以概括为:Node0 对外提供服务,其他节点以 headless 模式加入;每个节点上的本地 DP rank 再使用若干张 NPU 组成 TP group。

vLLM-Ascend 多机推理通信拓扑

普通多机部署中,关键参数有几类:

类别 参数/变量 作用
服务入口 --host--port Node0 对外暴露 OpenAI-compatible API
数据并行 --data-parallel-size 全局 DP rank 数
本地 rank --data-parallel-size-local 当前节点启动多少个本地 DP rank
rank 偏移 --data-parallel-start-rank headless 节点从哪个全局 DP rank 开始
主节点地址 --data-parallel-address 指向 Node0,用于 DP 协调
DP RPC --data-parallel-rpc-port DP 控制面通信端口
张量并行 --tensor-parallel-size 每个 DP rank 内部使用多少张 NPU 切分模型
专家并行 --enable-expert-parallel MoE expert 层启用专家并行
HCCL 网卡 HCCL_IF_IPHCCL_SOCKET_IFNAME 指定 HCCL 使用的本机 IP 与网卡
控制面网卡 GLOO_SOCKET_IFNAME 指定 Gloo 使用的网卡
TP 网卡 TP_SOCKET_IFNAME 指定 TP 通信使用的网卡

DeepSeek-V3.2 教程给出的 A3 双节点普通部署可以抽象为:

Node0: DP rank 0, TP=16, EP enabled, 对外服务
Node1: DP rank 1, TP=16, EP enabled, --headless
Global: DP=2, 每节点 local DP=1

A2 双节点普通部署类似,只是每节点 NPU 数更少,典型配置为:

Node0: DP rank 0, TP=8, EP enabled
Node1: DP rank 1, TP=8, EP enabled
Global: DP=2, 每节点 local DP=1

DeepSeek-V3.2 多机部署矩阵

这里有一个容易忽略但很关键的点:文档示例通常把 TP group 限制在单节点内部。 也就是说,A3 上每个 DP rank 使用本节点 16 张 NPU 做 TP,A2 上每个 DP rank 使用本节点 8 张 NPU 做 TP。这样做的好处是:TP 层最频繁的 AllReduce、AllGather、ReduceScatter 尽量走节点内高速互联,把跨节点通信压力控制在 DP/EP 同步、MoE expert 通信和控制面协调上。

如果把 TP group 跨节点拉大,HCCL 仍然可以承担跨节点张量 collective,但代价会明显增加:每个 Transformer layer 中的部分张量同步都会穿过节点间网络,尾延迟和吞吐波动会更敏感。


三、HCCL 在多机推理中的角色边界

HCCL 不是 vLLM 的调度器,也不是 API server。它更像是 Ascend NPU 上的 集合通信执行引擎。在 vLLM-Ascend 多机推理中,可以把通信分成控制面和数据面两层:

层次 典型组件 主要职责
控制面 vLLM scheduler、DP coordinator、Gloo、DP RPC、ZMQ 服务发现、rank 协调、请求路由、前后端状态同步
数据面 HCCL、NPU runtime、NPU NIC、RoCE/HCCS 网络 张量分片传输、规约、聚合、广播、专家通信

控制面与数据面分层

HCCL 的核心输入不是“请求”,而是“通信域 + 张量 + collective 操作”。例如:

在 TP group 上执行 AllReduce(partial_output)
在 EP group 上执行 AlltoAll(expert_input)
在 DP/EP 相关 group 上执行同步或状态规约

因此理解 HCCL,关键不是看 curl /v1/completions,而是看:

  1. 每个 NPU worker 在全局 rank 空间里是谁;
  2. 哪些 rank 被放进同一个通信组;
  3. 某个模型算子需要在什么 group 上执行什么 collective;
  4. HCCL 如何根据 rank 到 device/IP 的映射完成寻址和传输。

四、HCCL 初始化:从环境变量到通信域

HCCL 初始化可以理解为一个逐层收敛的过程:先确认设备和网络可用,再绑定网卡/IP,然后由上层分布式框架构造 rank 拓扑,最后创建 HCCL communicator。

HCCL 初始化流程

4.1 设备与驱动准备:容器必须能“看见” NPU

vLLM-Ascend 的 Docker 启动方式会挂载大量 Ascend 设备和驱动路径,例如 /dev/davinci*/dev/davinci_manager/dev/devmm_svm/usr/local/Ascend/driver/lib64/hccn_toolnpu-smi 等。

这说明 vLLM-Ascend 容器不是一个普通业务容器。它必须直接访问:

  • NPU 设备文件;
  • CANN runtime 与驱动库;
  • HCCN/NPU 网络配置工具;
  • 模型权重共享路径;
  • 本机通信网卡与节点间通信网络。

如果这一层没有准备好,后面的 HCCL 初始化会在更隐蔽的位置失败,例如 communicator 创建超时、rank 无法连接、NPU 网络 ping 不通,或者某个 rank 能启动但 collective 卡住。

4.2 网卡/IP 绑定:避免 HCCL 选错网络路径

多机部署时,每个节点都要显式指定通信 IP 与网卡:

环境变量 含义
HCCL_IF_IP=$local_ip 指定当前节点 HCCL 通信使用的本机 IP
HCCL_SOCKET_IFNAME=$nic_name 指定 HCCL socket 通信网卡
TP_SOCKET_IFNAME=$nic_name 指定 Tensor Parallel 通信使用的网卡
GLOO_SOCKET_IFNAME=$nic_name 指定 Gloo 控制面通信网卡

local_ip 是当前节点 IP,node0_ip 是 Node0 的 IP。Node1 的 --data-parallel-address 必须指向 Node0,而不是自己的 local_ip。如果这里配错,多机系统可能出现两类问题:

  1. 控制面连接失败:headless 节点找不到 DP master;
  2. 数据面连接失败:HCCL rank 之间使用了错误网卡或不可达 IP。

A2 多机部署还会额外配置 HCCL_CONNECT_TIMEOUTHCCL_INTRA_PCIE_ENABLEHCCL_INTRA_ROCE_ENABLE 等变量,用来约束节点内链路选择和连接超时。这说明 HCCL 并不是“有网就能跑”,它会根据硬件拓扑、NPU 间连接方式和通信路径选择不同策略。

多机网卡绑定关系

4.3 Rank 映射:HCCL 需要知道每个 rank 对应哪张卡

HCCL 的核心模型是 rank。一个 rank 不是抽象线程,而是集合通信域中的一个逻辑参与者。它需要绑定到具体的:

rank_id -> server_id -> device_id -> device_ip

在 CANN / Ascend 生态中,RankTable 或 hccl.json 是描述这种映射的典型格式。一个简化例子如下:

{
  "status": "completed",
  "version": "1.0",
  "server_count": "2",
  "server_list": [
    {
      "server_id": "node_0",
      "device": [
        {"device_id": "0", "device_ip": "192.168.1.8", "rank_id": "0"},
        {"device_id": "1", "device_ip": "192.168.1.9", "rank_id": "1"}
      ]
    },
    {
      "server_id": "node_1",
      "device": [
        {"device_id": "0", "device_ip": "192.168.2.8", "rank_id": "2"},
        {"device_id": "1", "device_ip": "192.168.2.9", "rank_id": "3"}
      ]
    }
  ]
}

HCCL 初始化通信域时,本质上要得到类似这样的全局表:

rank_id server_id device_id device_ip
0 node_0 0 192.168.1.8
1 node_0 1 192.168.1.9
2 node_1 0 192.168.2.8
3 node_1 1 192.168.2.9

RankTable 映射关系

在 vLLM-Ascend server 部署模式中,文档没有要求用户手写 hccl.json。它更多依赖 vLLM 启动参数、进程可见设备、PyTorch NPU 分布式初始化和环境变量共同形成 rank 拓扑。但无论入口形式如何,HCCL 最终都需要得到同一类信息:当前 rank 是谁,远端 rank 在哪里,使用哪个 device/IP 建立通信。

4.4 Communicator:通信组的运行时句柄

当 rank 映射完成后,HCCL 会为不同通信域创建 communicator。可以把 communicator 理解为一个“通信组运行时句柄”,其中包含:

  • group 中有哪些 rank;
  • 每个 rank 的设备与地址;
  • 这个 group 的拓扑结构;
  • 可用链路与通信算法;
  • 通信 buffer、stream、事件同步资源;
  • collective 操作的执行计划缓存。

vLLM-Ascend 中不会只有一个 communicator。不同并行维度通常会对应不同 group:TP group、DP group、EP group,甚至某些模型优化路径还会创建更细的子 group。


五、通信组建模:TP、DP、EP 不是同一种流量

多机推理里最容易混淆的是:所有 rank 看上去都在一个大集群里,但实际通信不是“所有人永远一起通信”。不同算子会落在不同通信组上。

HCCL 通信组拓扑

5.1 TP group:层内张量切分后的高频同步

TP 的目标是把单个模型层的权重和激活切到多张 NPU 上。常见模式包括:

  • Column Parallel:每张卡算一部分输出通道;
  • Row Parallel:每张卡持有一部分输入通道;
  • Attention heads 或 hidden dimension 分片;
  • MLP / projection 层分片。

TP 带来的直接结果是:某个算子的输出往往只是 partial tensor,需要通过 collective 得到后续层能继续使用的张量。例如:

场景 常见 collective 目的
Row Parallel 线性层 AllReduce 汇总各卡 partial sum
Column Parallel 后需要完整激活 AllGather 拼接各卡输出分片
大张量切分后继续分布式计算 ReduceScatter 规约后保留分片结果

TP/EP 常见 Collective 语义

TP 通信频率很高,因此 DeepSeek-V3.2 文档把 TP size 设置为单节点 NPU 数,本质上是在用部署参数降低跨节点 TP collective 的频率。

5.2 DP group:请求并发扩展与 MoE 同步约束

DP 的目标是横向扩展吞吐。每个 DP rank 持有一份模型副本,处理不同请求 batch。对于普通 dense 模型,推理阶段的 DP rank 可以相对独立。但 DeepSeek 这类 MoE 模型不同:expert 层可能要求不同 DP rank 在 forward 过程中保持同步。

vLLM-Ascend Multi-Node-DP 文档提到:当某些 rank 没有请求时,也可能需要执行 dummy forward。原因是只要某个 rank 在处理请求,其他 rank 如果完全停住,就可能破坏 expert 层的同步假设。DP coordinator 的职责就是协调这些 rank 的活跃/空闲状态,避免某些 rank 提前退出同步点。

5.3 EP group:MoE 模型里真正复杂的通信来源

Expert Parallel 会把不同专家分布到不同 NPU 或 rank 上。一个 token 被 router 分配到某些 expert 后,可能要发生:

  1. token hidden states 按 expert 路由重排;
  2. 输入 token 发送到持有目标 expert 的 rank;
  3. expert 本地计算;
  4. expert 输出再按原 token 顺序聚合回来。

这类通信更接近 AlltoAll / AlltoAllV,而不是简单的 AllReduce。HCCL 官方资料中提到 Pairwise 等算法适合 AlltoAll / AlltoAllV 场景,正是因为它们需要处理多对多的大规模数据交换。

5.4 P/D 分离:KV cache 传输不等同于 HCCL collective

DeepSeek-V3.2 教程还给出了 Prefill-Decode 分离方案:Prefill 侧使用 DP2 + TP16,Decode 侧使用 DP8 + TP4,并通过 MooncakeLayerwiseConnector 做 KV cache 传输。

这里要区分两类数据流:

  • HCCL collective:发生在模型层内部或并行组内部,用于张量同步和规约;
  • KV transfer:发生在 Prefill engine 与 Decode engine 之间,用于把 KV cache 从生产者传给消费者。

P/D 分离中的 KV cache 传输由 Mooncake connector 负责,不应简单等同于 HCCL AllGather 或 AllReduce。但 Prefill、Decode 各自内部的 TP/EP 通信仍然会依赖 HCCL。

P/D 分离中的 KV Transfer 与 HCCL Collective


六、跨节点张量传输:HCCL 到底做了什么

当模型算子触发 collective 时,HCCL 的工作不是“发一个大包给远端”,而是把张量、通信组、算法和硬件链路组合成一个可执行的通信计划。

跨节点张量传输流程

可以按以下步骤理解。

6.1 算子层:产生 partial tensor

以 Row Parallel Linear 为例,每张 NPU 只持有一部分权重矩阵,计算出的结果是 partial sum。后续层需要完整结果时,就需要在 TP group 上执行 AllReduce:

local_partial = x_i * W_i
full_output = AllReduce(sum(local_partial across TP group))

对于 MoE expert 层,通信模式可能变成:

expert_inputs = AlltoAll(route(token_hidden_states))
expert_outputs = AlltoAll(reverse_route(local_expert_outputs))

前者是规约同步,后者是多对多重分布。两者在 HCCL 里会走不同的 collective 算子和算法计划。

6.2 HCCL 层:生成通信描述符

一次 collective 至少需要描述以下信息:

  • 操作类型:AllReduce、Broadcast、AllGather、ReduceScatter、AlltoAll 等;
  • 数据类型:FP16、BF16、INT8、FP32 等;
  • 数据量:元素个数、每个 rank 的 send/recv count;
  • 规约类型:sum、max、min 等;
  • 通信组:当前操作在哪个 communicator 上执行;
  • stream/event:与 NPU 计算流的依赖关系。

HCCL 会根据这些信息决定是否切块、如何排布通信步骤,以及使用哪类算法。

6.3 分块与 buffer:大张量不会一次性粗暴发送

HCCL_BUFFSIZE 这类变量会影响通信 buffer 大小。对于大张量,HCCL 往往会将数据切成多个 chunk,让网络传输、规约计算和后续 chunk 的准备形成流水。

这样做有三个目的:

  1. 避免单次传输占用过大 buffer;
  2. 提高链路利用率,让传输和计算重叠;
  3. 让 Ring / Pipeline 这类算法可以按 step 推进。

对于推理场景,batch size、sequence length、hidden size、TP size 会共同决定每次 collective 的张量大小。长上下文 Prefill 阶段通常张量更大,Decode 阶段单步 token 张量较小但频率更高。

6.4 算法选择:Ring、RHD、Pairwise、Pipeline 各有边界

HCCL 官方资料提到多种通信算法:Ring、RHD、Pairwise、Star、NHR、NB、AHC、Pipeline 等。它们背后的差异可以用两个维度理解:

算法 典型适用场景 特点
Ring AllReduce、节点数较少或网络拥塞明显 关系简单,步数线性,带宽利用稳定
RHD 2 的幂节点规模、较小数据量 递归二分/倍增,通信步数接近对数
Pairwise AlltoAll / AlltoAllV 避免一对多热点,适合多对多交换
Star Broadcast / Reduce / Gather / Scatter 有根节点操作,路径清晰
Pipeline 大数据量、多机多卡 并发利用节点内和节点间链路

从性能模型上看,集合通信通常可以用 α–β 模型近似:

单步传输时间 ≈ α + nβ + nγ

其中:

  • α 是固定网络时延;
  • β 是单位字节传输成本;
  • γ 是单位字节规约计算成本;
  • n 是每步传输数据量。

推理场景的特殊性在于:Decode 阶段经常是小张量高频通信,α 的影响会被放大;Prefill 阶段是大张量批量通信,β 和链路带宽更关键。因此 P/D 分离中 Prefill 和 Decode 采用不同 DP/TP 配置,本质上也是在分别优化这两类通信画像。

HCCL 算法选择直觉

6.5 数据面传输:从 HBM 到 NPU 通信网络

一次跨节点张量传输可以抽象为:

  1. NPU 计算流产生本地 tensor shard;
  2. HCCL 在对应 stream 上插入通信任务;
  3. 通信任务从 HBM 中读取 send buffer;
  4. NPU NIC / DMA engine 将 chunk 注入通信网络;
  5. 远端 rank 接收 chunk,并写入 recv/reduce buffer;
  6. 如果是 AllReduce,在接收过程中或接收后执行规约;
  7. 所有 step 完成后,通过 event/barrier 通知后续算子继续执行。

对于 AllReduce,结果是每个 rank 都得到规约后的张量;对于 ReduceScatter,结果是每个 rank 得到规约后的一片;对于 AlltoAll,结果是每个 rank 收到来自其他 rank 的不同切片。


七、一次请求的数据流:HCCL 只出现在必要的同步点

把视角拉回 vLLM server,一次请求的路径大致如下。

vLLM-Ascend 多机推理请求数据流

  1. Client 请求发送到 Node0 的 OpenAI-compatible API;
  2. Node0 scheduler 对请求进行排队、批处理和路由;
  3. DP coordinator 判断哪些 DP rank 需要参与当前 step;
  4. Node0 本地 DP rank 和 headless 节点上的 DP rank 分别执行 forward;
  5. 每个 DP rank 内部的 TP workers 通过 HCCL 完成层内 collective;
  6. 如果启用 EP,expert 层可能触发跨 rank 的 expert 通信;
  7. Decode step 生成 token 后,状态返回 Node0 调度层;
  8. Node0 聚合响应并流式返回客户端。

这里最重要的判断是:HCCL 不在每个请求入口处工作,而是在模型执行图中的 collective 同步点工作。 用户请求只是触发 forward,forward 中哪些层需要跨卡/跨节点同步,才决定 HCCL 何时执行。


八、为什么文档强调多机通信验证

vLLM-Ascend Multi-Node-DP 教程要求先验证多机通信环境,包括 LLDP、链路状态、网络健康、NPU IP、网关、跨节点 ping 等。这些检查看起来像部署前置步骤,实际上对应 HCCL 初始化的关键假设。

检查项 对 HCCL 的意义
LLDP / Ifname 确认 NPU 网络连接到正确交换端口
link status = UP 确认物理链路可用
net_health = success 确认 NPU 网络健康
/etc/hccn.conf 确认 NPU IP、网关等配置正确
NPU ping 确认跨节点 NPU 网络可达
HCCL_IF_IP 确认 HCCL 绑定正确本机 IP
HCCL_SOCKET_IFNAME 确认 HCCL 选择正确网卡

多机通信验证清单

如果这些条件不满足,HCCL 的失败通常不是一个明确的“配置错误”提示,而可能表现为:

  • 某个 rank 初始化超时;
  • Node1 headless 已启动但无法加入;
  • collective 卡住,没有明显 Python 异常;
  • 某些 batch 偶发超时;
  • 大张量通信性能极低;
  • EP/MoE 场景下只有部分 rank 忙,其他 rank 等待。

这也是为什么多机推理排障要从网络和 rank 映射开始,而不是只盯着 vLLM 日志。


九、关键参数背后的工程取舍

9.1 --headless:把 API 入口和后端计算解耦

Node1 使用 --headless,意味着它不对外提供 API,而是作为后端 engine 加入 Node0 管理的 DP 集群。这样可以避免多个节点同时暴露入口造成状态分裂,也让请求调度集中在 Node0。

9.2 --data-parallel-start-rank:避免 rank 冲突

多节点部署时,每个节点必须拥有不重叠的 DP rank 区间。例如:

Node0: start rank 0, local DP 1 -> rank 0
Node1: start rank 1, local DP 1 -> rank 1

如果 rank 编排冲突,HCCL 或 DP coordinator 看到的全局拓扑就会不一致,轻则连接失败,重则 collective 等待永远无法满足。

9.3 TP size = 本节点 NPU 数:减少跨节点高频 collective

DeepSeek-V3.2 示例中的 A3 TP=16、A2 TP=8,都对应单节点 NPU 数。这个配置让 TP group 尽量局部化。它牺牲的是更大 TP group 的单模型切分能力,换来的是更稳定的推理延迟。

对于推理服务而言,这通常是合理取舍:吞吐可以通过 DP 扩展,没必要让每层 TP collective 都穿越节点间网络。

9.4 HCCL_BUFFSIZE:影响分块和流水粒度

HCCL_BUFFSIZE 不是越大越好。过小可能导致 chunk 太碎、调度开销增加;过大可能占用更多内存,并降低流水化灵活性。文档中 A3/A2/P-D 场景使用不同 buffer 配置,说明它和模型长度、batch、硬件拓扑有关。

9.5 --trust-remote-code:部署便利性与安全边界

DeepSeek-V3.2 教程使用了 --trust-remote-code。这意味着模型仓库中的自定义 Python 代码会被加载执行。生产环境建议只对可信模型源使用,并对模型代码做审计。它不是 HCCL 通信问题,但属于多机推理服务的安全边界。


十、常见故障定位思路

如果多机 vLLM-Ascend 推理卡在初始化或首个请求,可以按下面顺序排查。

多机推理故障定位阶梯

10.1 先排 rank 和入口

  • Node0 的 local_ip 是否等于其他节点使用的 node0_ip
  • Node1 是否配置了 --headless
  • Node1 的 --data-parallel-start-rank 是否正确;
  • 所有节点的 --data-parallel-size--data-parallel-size-local 是否一致;
  • API 请求是否只打到 Node0。

10.2 再排网卡和 NPU 网络

  • HCCL_IF_IP 是否是当前节点通信 IP;
  • HCCL_SOCKET_IFNAMETP_SOCKET_IFNAMEGLOO_SOCKET_IFNAME 是否指向正确网卡;
  • NPU 链路状态是否 UP
  • 跨节点 NPU ping 是否成功;
  • Docker 是否使用 host 网络;
  • 容器是否挂载了 HCCN/HCCL 所需设备和工具。

10.3 然后排模型路径和设备可见性

  • 所有节点模型路径是否一致;
  • ASCEND_RT_VISIBLE_DEVICES 或进程可见设备是否与 TP size 匹配;
  • 每个本地 DP rank 是否拿到了独立的 NPU 切片;
  • A2/A3 参数是否混用。

10.4 最后看 collective 卡点

如果服务能启动但请求卡住,重点看:

  • 是否某个 DP rank 没有进入 forward;
  • MoE dummy forward 是否正常;
  • EP group 是否等待某些 rank;
  • HCCL 连接超时是否过短;
  • 大 batch / 长上下文是否导致 HCCL buffer 或内存压力过高。

十一、总结:HCCL 是 vLLM-Ascend 多机推理的数据面骨架

vLLM-Ascend 的多机推理可以分成三层理解:

  1. 服务层:Node0 API server、scheduler、DP coordinator 负责请求入口和调度;
  2. 并行层:DP 扩展吞吐,TP 切分单个模型副本,EP 支撑 MoE expert 分布;
  3. 通信层:HCCL 根据 rank/device/IP 映射构建通信域,在 TP/EP/DP 需要同步的地方执行 collective。

多机推理最终心智模型

DeepSeek-V3.2 文档的部署参数体现了一个很务实的工程选择:让 TP 尽量局部化,让 DP 承担多机扩展,让 HCCL 在必要的张量同步点上发挥作用。 这种设计既利用了 Ascend 单机多卡的高速互联,也避免把每层高频张量同步都推到跨节点网络上。

理解 HCCL 的关键,不是记住某个启动命令,而是建立下面这条主线:

启动参数 / 环境变量
  -> rank 到 device/IP 的映射
  -> TP / DP / EP 通信组
  -> HCCL communicator
  -> collective 算子
  -> chunk / algorithm / stream
  -> NPU 网络传输与规约
  -> 模型 forward 继续推进

一旦这条链路清楚了,多机推理中的很多问题都会变得可解释:为什么要设置 HCCL_IF_IP,为什么 headless 节点要指定 start rank,为什么 TP size 不随意跨节点扩大,为什么 MoE 空 rank 也可能要 dummy forward,为什么 P/D 分离里的 KV transfer 和 HCCL collective 不是同一种通信。

对于大模型推理系统来说,多机扩展不是简单堆机器,而是把计算图、并行策略、通信拓扑和硬件链路一起设计。HCCL 正是 vLLM-Ascend 在 Ascend 多机多卡环境下支撑这一切的数据面骨架。

「真诚赞赏,手留余香」

爱折腾的工程师

真诚赞赏,手留余香

使用微信扫描二维码完成支付