一、引言:多机推理真正难的不是“启动多个进程”
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。
普通多机部署中,关键参数有几类:
| 类别 | 参数/变量 | 作用 |
|---|---|---|
| 服务入口 | --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_IP、HCCL_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
这里有一个容易忽略但很关键的点:文档示例通常把 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,而是看:
- 每个 NPU worker 在全局 rank 空间里是谁;
- 哪些 rank 被放进同一个通信组;
- 某个模型算子需要在什么 group 上执行什么 collective;
- HCCL 如何根据 rank 到 device/IP 的映射完成寻址和传输。
四、HCCL 初始化:从环境变量到通信域
HCCL 初始化可以理解为一个逐层收敛的过程:先确认设备和网络可用,再绑定网卡/IP,然后由上层分布式框架构造 rank 拓扑,最后创建 HCCL communicator。
4.1 设备与驱动准备:容器必须能“看见” NPU
vLLM-Ascend 的 Docker 启动方式会挂载大量 Ascend 设备和驱动路径,例如 /dev/davinci*、/dev/davinci_manager、/dev/devmm_svm、/usr/local/Ascend/driver/lib64/、hccn_tool、npu-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。如果这里配错,多机系统可能出现两类问题:
- 控制面连接失败:headless 节点找不到 DP master;
- 数据面连接失败:HCCL rank 之间使用了错误网卡或不可达 IP。
A2 多机部署还会额外配置 HCCL_CONNECT_TIMEOUT、HCCL_INTRA_PCIE_ENABLE、HCCL_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 |
在 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 看上去都在一个大集群里,但实际通信不是“所有人永远一起通信”。不同算子会落在不同通信组上。
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 通信频率很高,因此 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 后,可能要发生:
- token hidden states 按 expert 路由重排;
- 输入 token 发送到持有目标 expert 的 rank;
- expert 本地计算;
- 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。
六、跨节点张量传输: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 的准备形成流水。
这样做有三个目的:
- 避免单次传输占用过大 buffer;
- 提高链路利用率,让传输和计算重叠;
- 让 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 配置,本质上也是在分别优化这两类通信画像。
6.5 数据面传输:从 HBM 到 NPU 通信网络
一次跨节点张量传输可以抽象为:
- NPU 计算流产生本地 tensor shard;
- HCCL 在对应 stream 上插入通信任务;
- 通信任务从 HBM 中读取 send buffer;
- NPU NIC / DMA engine 将 chunk 注入通信网络;
- 远端 rank 接收 chunk,并写入 recv/reduce buffer;
- 如果是 AllReduce,在接收过程中或接收后执行规约;
- 所有 step 完成后,通过 event/barrier 通知后续算子继续执行。
对于 AllReduce,结果是每个 rank 都得到规约后的张量;对于 ReduceScatter,结果是每个 rank 得到规约后的一片;对于 AlltoAll,结果是每个 rank 收到来自其他 rank 的不同切片。
七、一次请求的数据流:HCCL 只出现在必要的同步点
把视角拉回 vLLM server,一次请求的路径大致如下。
- Client 请求发送到 Node0 的 OpenAI-compatible API;
- Node0 scheduler 对请求进行排队、批处理和路由;
- DP coordinator 判断哪些 DP rank 需要参与当前 step;
- Node0 本地 DP rank 和 headless 节点上的 DP rank 分别执行 forward;
- 每个 DP rank 内部的 TP workers 通过 HCCL 完成层内 collective;
- 如果启用 EP,expert 层可能触发跨 rank 的 expert 通信;
- Decode step 生成 token 后,状态返回 Node0 调度层;
- 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_IFNAME、TP_SOCKET_IFNAME、GLOO_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 的多机推理可以分成三层理解:
- 服务层:Node0 API server、scheduler、DP coordinator 负责请求入口和调度;
- 并行层:DP 扩展吞吐,TP 切分单个模型副本,EP 支撑 MoE expert 分布;
- 通信层: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 多机多卡环境下支撑这一切的数据面骨架。
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付