miniyuan
在网计算
在网计算概念
动机:AI/HPC 并行编程中 AllReduce 为全局通信瓶颈,Host-centric 方案(PS、Ring AllReduce)受限于网卡带宽与端侧处理能力,将计算下沉到交换机/网卡可在转发路径上消除冗余流量。
核心约束:
| 约束 | 含义 | 影响 |
|---|---|---|
| 资源有限 | 交换机片上存储与计算单元极少 | 聚合器数组容量受限 |
| 有状态 | 需维护聚合窗口、未确认状态 | 状态膨胀将阻塞后续聚合 |
| 可靠性 | 丢包、ACK 丢失不可避免 | 需保证聚合结果正确性与一致性 |
设计空间:
| 维度 | 选项 |
|---|---|
| 下沉位置 | 交换机(SwitchML / ATP)/ 网卡侧近端(NetReduce) |
| 聚合粒度 | 向量级 / 包级 / 块级 |
| 可靠性机制 | 端侧重传 / 网内 ACK / 超时清空 |
分布式训练通信
数据并行训练迭代:
- 各 Worker 计算本地梯度
- 聚合所有 Worker 梯度(AllReduce)
- 各 Worker 用全局梯度更新模型
AllReduce:跨主机对向量逐元素求和,并将结果返回所有主机。广泛存在于数据并行与张量并行中。
Host-centric 方案对比
| 方案 | 拓扑 | 通信模式 | 流量特征 | 瓶颈 |
|---|---|---|---|---|
| Parameter Server (PS) | 星型 | Worker → PS → Worker | PS 侧流量为 Worker 总和 | PS 单点瓶颈与流量汇聚 |
| Ring AllReduce | 环型 | 两轮环传递 | 每节点收发各 2 份数据量 | 环延迟累积,总流量翻倍 |
Ring AllReduce 第一轮沿环累加中间结果(Scatter-Reduce),第二轮沿环分发最终值(AllGather);两轮向量传递使总流量为
2 × 数据量。
网内梯度聚合
SwitchML
核心机制:在交换机内维护聚合器数组,对经过的梯度数据包执行逐元素累加,替代 PS 或环聚合。
关键参数:
- 聚合器数组大小:交换机可并发维护的聚合槽位数
- 窗口大小:允许未确认(未收到 ACK)的并发聚合任务数
理想流程:
Worker 1: [0][1][2][3][4][5] ──→
交换机: [0][1] 逐包累加 ──→ 回传聚合结果
Worker 2: [0][1][2][3][4][5] ──→
聚合器数组大小 = 2,窗口大小 = 2
可靠性问题——ACK 丢失:
- 正常情况下:聚合器数组大小 = 窗口大小(如 2),聚合完成后收到 ACK 即释放槽位
- ACK 丢失后:交换机无法确认聚合完成,槽位无法释放,聚合器数组膨胀(如增至 4)
- 解决:检测到异常后清空聚合器数组,回退到端侧重传,避免状态无限增长
NetReduce
核心机制:基于 RoCE NIC 的网内聚合,利用 RDMA 连接在交换机处对数据包 payload 进行累加。
架构组件:
- RoCE NIC:支持 RDMA 的网卡,绕过内核直接内存访问
- Ethernet Switch:嵌入聚合逻辑,维护 packet buffer
数据包格式:
Packet: [header | payload] [header | payload] [header | payload] ...
工作流程:
- 建连:Worker 与交换机、Worker 之间建立 RDMA 连接
- 发送:Worker 发送梯度数据包(gradients)到交换机
- 聚合:交换机在 packet buffer 中对齐累加同序号 payload
- 回传:将聚合结果发送回对应连接
- ACK:ACK 沿反向路径原样返回,不修改内容
ATP
核心机制:细粒度包级聚合,交换机维护多列聚合器,支持多 Worker 异步到达。
理想情况:
- 各 Worker 发送的数据包按列对齐(如
a1, b1, c1, d1等列) - 交换机对同一列的多个 Worker 数据执行
+a1+a2+…+an
丢包处理:
| 场景 | 现象 | 处理 |
|---|---|---|
| 部分到达 | 某列仅收到部分 Worker 数据 | 超时后发送部分聚合结果 |
| 重复/冗余 | 重传包与已聚合包序号重复 | 消冗余:丢弃已聚合序号的数据 |
| 重传聚合 | 重传包再次进入聚合器 | 禁止开启聚合:重传报文直接转发,不触发累加 |
状态管理:
- 聚合器数组按数据包序号索引
- 每列聚合完成或超时后向下转发
- 重传包标记为”非聚合”,避免重复累加导致结果错误
其他在网计算应用
网内键值聚合
场景:分布式系统(如参数服务器、推荐系统)中多 Worker 向中心节点发送键值对更新。
在网优化:交换机对同 Key 的 Value 执行归约(如求和、取最值),减少上传至 Server 的流量。
Worker 1: [d1][c1][b1][a1] ─┐
Worker 2: [d2][c2][b2][a2] ─┼→ Switch: 按列聚合 ─→ Server: [Σd][Σc][Σb][Σa]
Worker n: [dn][cn][bn][an] ─┘
本质:将 PS 的聚合计算从 Server 下沉到 Switch,缓解 Server 侧 CPU 与网卡瓶颈,实现网内归约(In-network Reduction)。