SHArP
背景与概述
高性能计算中的集合通信瓶颈
定义:集合通信(Collective Communication)是并行计算中涉及一组进程共同参与的数据交换操作,如屏障同步(Barrier)、归约(Reduce)、全归约(Allreduce)等。
核心思想:随着 HPC 系统规模扩大和并行度提升,集合通信成为影响应用性能的关键瓶颈。传统实现依赖主机 CPU 管理算法,网络仅作为数据管道,导致数据多次穿越网络、CPU 开销大、延迟高。
背景与目的:
- **Dennard 缩放定律(Dennard Scaling)**终结后,单核频率趋于饱和,系统性能提升依赖核心数量增加
- 现代 HPC 系统采用众核架构(X86、Power、ARM、GPGPU、FPGA 等)
- **协同设计(Co-Design)**架构理念兴起:网络设备应作为协处理器(Co-processor),在数据流经网络时直接处理,减少数据搬运
- SHArP(Scalable Hierarchical Aggregation Protocol)旨在将集合归约操作卸载到网络硬件,实现”网内计算”(In-network Computing)
直观理解: 类比一下,传统方式像所有员工把文件送到总部(CPU)汇总,再发回;SHArP 则像在每个分公司(交换机)先进行初步汇总,只把汇总结果向上传递,大幅减少运输量。
SHArP v1:低延迟网内归约架构
聚合节点(Aggregation Node, AN)
定义:聚合节点是 SHArP 抽象中的基本逻辑单元,是聚合树(Aggregation Tree)中的一个节点,负责接收来自子节点的数据、执行归约操作,并将结果转发给父节点。
核心思想:AN 是一个逻辑构造,可以实例化为:
- 服务器中的进程
- 交换机设备中的进程
- 交换机 ASIC 中的硬件逻辑
直观理解:AN 就像数学运算中的”合并点”,多个输入经过指定运算(求和、求最大/最小、位运算等)后产生一个输出。
聚合树(Aggregation Tree)
定义:聚合树定义了数据从端节点(End-node)进入、逐层向上归约、最终到达根节点(Root)的拓扑结构。结果分发阶段可以独立于聚合阶段进行。
核心思想:
- SHArP 树是逻辑树,可覆盖在任意物理拓扑之上(胖树 Fat-tree、DragonFly+ 等)
- 端节点(主机 HCA)作为树叶,AN 作为内部节点
- 根节点完成最终归约后,将结果分发给指定目标
- 每个 AN 可参与多棵树,但单次归约操作只能使用一棵树
结构示意:
输入层(主机端节点)→ 第一层 AN(叶交换机)→ 第二层 AN(根交换机)→ 根节点归约结果
↓
结果分发(向下广播/组播)
值得注意的是:AN 之间的连接是逻辑的,不必遵循物理拓扑。端节点也不必连接到物理上最近的 AN。
聚合组(Aggregation Group)
定义:聚合组是参与特定集合操作的主机子集,对应于 MPI 通信子(Communicator)或 OpenSHMEM 的进程组。
核心思想:
- 组创建时,AN 建立子树描述(记录子节点和父节点)
- 支持组修剪(Group Trim):当子树宽度在某层变为 1 时,可直接终止于该层,无需到达树根,减少不必要的网络跳数
- 一棵树可支持多个组,来自同一作业或不同作业
易错点:
- 必须确保端到端的 SHArP 资源(如缓冲区)可用,避免多个归约操作竞争同一 AN 资源导致死锁
聚合操作(Aggregation Operation)
算法步骤:
-
发起请求
- 输入:组成员的归约数据
- 操作:每个成员向叶 AN 发送 SHArP 请求消息(包含聚合头部 + 归约载荷)
- 输出:请求进入聚合树
-
逐层归约
- 输入:来自子节点的数据
- 操作:AN 收集所有子节点数据,执行归约运算(sum、min、max、bitwise OR/AND/XOR 等)
- 输出:单一结果向量向上转发
- 目的:在数据上行过程中逐步减少数据量
-
根节点完成
- 输入:来自所有子树的归约结果
- 操作:执行最终归约,产生全局结果
- 输出:准备结果分发
-
结果分发
- 输入:全局归约结果
- 操作:根节点将结果发送给指定目标(MPI_Allreduce 发给全组、MPI_Reduce 发给根进程、或自定义目标)
- 输出:操作完成通知
支持的运算:
- 32/64 位有符号/无符号整数、浮点数
- Sum、Min、Max、MinLoc、MaxLoc
- Bitwise OR、AND、XOR
- 支持 MPI 标准和 OpenSHMEM 规范所需的大部分操作
注:浮点加法满足交换律但不满足结合律。为保证结果可重复,SwitchIB-2 实现了确定性执行顺序:所有操作数到达后,按预定固定顺序执行归约,而非到达顺序。
SwitchIB-2 硬件实现
定义:SHArP 的首个硬件实现集成在 Mellanox SwitchIB-2 ASIC 中,AN 逻辑作为虚拟目标通道适配器(TCA)嵌入交换机。
核心思想:
- 利用高基数(Radix-36)InfiniBand 交换机构建浅层归约树
- 支持多达 64 棵树、大量组和数百个并发归约操作
- 使用 InfiniBand 可靠连接(RC)传输保证数据可靠性
- 结果分发使用不可靠数据报(UD)组播实现低延迟,必要时配合 RC 重传
结构示意:
[SwitchIB-2 交换机]
├── 36 个 EDR 端口
└── 内部虚拟 TCA(SHArP Node)
├── 连接内部逻辑端口
├── 支持 RC 传输(上行归约)
└── 支持 UD 传输(结果组播)
SHArP v2:Streaming-Aggregation 流式聚合
背景与动机
定义:Streaming-Aggregation 是 SHArP 在 HDR InfiniBand 时代引入的新能力,针对大消息归约(Long-vector Reduction)进行带宽优化。
核心思想:
- v1 的低延迟聚合(Low-latency Aggregation, LLA)针对小消息(<256 字节)优化,但受限于协议开销,无法高效处理大消息
- Streaming-Aggregation 通过流水线(Pipelining)实现接近线速(Wire-speed)的归约带宽
- 数据以 MTU 粒度流入归约单元,边传输边计算
背景与目的:
- 大消息归约(如 MB 级别)在 AI/ML(PyTorch)、分子动力学(DL-Poly)等应用中日益重要
- 主机端算法(如 Rabenseifner 算法)需要多次网络遍历,带宽利用率低
- 目标:实现与点对点传输相当的归约带宽
流式聚合树与协议
核心思想:
- 每棵归约树标记为”低延迟型”或”流式聚合型”
- 使用 InfiniBand RC 传输进行树间数据传输,确保网络端可靠性
- 结果分发不再使用 UD 组播(大消息下带宽减半),而是采用新的可靠广播协议
树锁定机制(Tree Locking):
- 为防止聚合缓冲区被无限期占用,引入锁定协议
- 进程通过低延迟树发送锁定请求,资源沿树向上锁定
- 可指定锁定次数(如仅锁定一次归约),或在整个通信子生命周期内锁定
- 锁定成本约等于一次屏障同步
交换机级流水线归约
定义:在交换机内部,数据通过硬件流水线逐段归约,保持高吞吐。
核心思想:
- 交换机端口成对配置,形成两个半环(Half-ring)
- 数据以 MTU 粒度进入组合器(Combiner),两两归约后向上传递
- 顶层 CFU(Collective Functional Unit)产生最终结果并转发
结构示意:
端口1 ──→ 组合器C1 ──→ 组合器C2 ──→ 组合器C3 ──→ 组合器C4 ──┐
端口2 ──→ ↑ │ │
端口3 ────────┘ │ ▼
端口4 ─────────────────────────────────────────────┘ CFU ──→ 输出到网络
端口5 ──→ 组合器C5 ──→ 组合器C6 ──→ 组合器C7 ──→ 组合器C8 ──→ ↑
端口6 ──→ ↑ │
端口7 ────────┘ │
端口8 ─────────────────────────────────────────────────────────────┘
直观理解:就像工厂流水线上的装配工位,每个工位(组合器)同时处理不同批次的数据片段,整体产出连续不断。
可靠结果分发
核心思想:对于大消息,不能使用 UD 组播(不可靠且需双份发送),而是使用可靠单播树:
- 根节点通过 RC 发送结果到子节点
- 每个 AN 收到数据后,提取 SHArP 组句柄,查表确定转发端口列表
- 使用优化的可靠包生成器复制数据,构造新的 RC 消息发送给下一级
- 继续直到数据到达所有叶节点
性能对比与分析
微基准测试对比
| 指标 | SHArP v1 (SwitchIB-2) | SHArP v2 Streaming (Quantum) | 主机端算法 | 备注 |
|---|---|---|---|---|
| 优化目标 | 小消息延迟 | 大消息带宽 | 通用 | — |
| 典型消息大小 | 0–256 字节 | 4KB–256MB+ | 全范围 | — |
| 128节点 8B Allreduce | 2.83 μs | — | 6.01 μs (HPC-X) / 11.90 μs (MVAPICH-2) | v1 提升 2.1–3.2 倍 |
| 128节点 4KB Allreduce | 14.48 μs (流水线) | — | 46.93 μs | 流水线提升 3.24 倍 |
| 64节点 1MB Allreduce | — | 接近线速 | 延迟高 3.5 倍 | v2 带宽达 95% 网络带宽 |
| 64节点 256MB Allreduce | — | ~96% Ping-Pong 带宽 | 带宽低 4.8 倍 | — |
| 树基数(Radix) | 36 | 高基数(40+) | 软件树基数通常为 2 | 浅层树降低跳数 |
| 并发操作支持 | 数百个 | 大规模并发 | 受 CPU 限制 | — |
算法切换点
| 消息大小范围 | 推荐算法 | 原因 |
|---|---|---|
| 0 – 4KB | 低延迟聚合(LLA) | 延迟主导,LLA 开销最小 |
| 4KB – 16KB | 视情况而定 | 若需树锁定,切换点约 16KB |
| 16KB+ | Streaming-Aggregation | 带宽主导,流水线效率最高 |
应用级性能影响
| 应用/框架 | 测试配置 | 性能提升 | 说明 |
|---|---|---|---|
| OpenFOAM | 128节点,icoFoam 求解器 | 0.5% – 15% | 8字节 Allreduce 密集;负载越均衡,提升越明显 |
| DL-Poly | 24节点,32进程/节点 | ~4% | 大向量归约(~524KB)时间从 6.85s 降至 4.73s |
| PyTorch (MLPerf) | 4节点 8GPU,Transformer | 10% – 18% | NCCL 集成 SHArP;归约时间占比从 28% 降至 20% |
SHArP 架构优势总结
核心优势
- 卸载 CPU:归约运算在交换机完成,释放主机 CPU/GPU 计算周期
- 减少数据搬运:数据上行过程中体积递减,减少网络流量
- 主机无关进度(Host-independent Progress):归约进度不依赖主机软件调度,避免系统噪声(System Noise)影响
- 浅层高基数树:利用高端口密度交换机(36/40+ 端口),构建 2-3 层树即可支持 10,000+ 节点
- 多租户支持:多个作业共享网络资源,各组操作互不干扰(Partition Key 隔离)
与相关工作的对比
| 方案 | 实现位置 | 支持规模 | 特点 | 局限性 |
|---|---|---|---|---|
| SHArP | 交换机 ASIC | 大规模(10K+ 节点) | 高基数树、多并发、大小消息双优化 | 需要特定硬件支持 |
| Blue Gene/Q | 网络 + 主机 CPU | 大规模 | 深度集成系统 | 定制化强,不通用 |
| Cray Aries | HCA(网卡) | 中等 | 64字节归约,基数<=32 | 端点归约,路径较长 |
| CORE-Direct | HCA | 端点级 | 卸载通信依赖管理 | 不卸载计算 |
| NetAgg | 网络中间盒 | 数据中心 | 分区/聚合操作 | 非 HPC 专用 |
| 主机端算法 | 主机 CPU | 通用 | 灵活、无需专用硬件 | 延迟高、带宽低、CPU 开销大 |
常见疑问与解答
Q1: SHArP 的聚合树与物理拓扑是什么关系?
SHArP 树是逻辑树,可覆盖在任意物理拓扑之上。虽然通常尽量将逻辑树中相连的 AN 映射到物理上直接相连的交换机以减少延迟,但这不是必须的。这种解耦使 SHArP 能适配胖树、超立方体、DragonFly+ 等多种拓扑。
Q2: 为什么浮点归约需要确定性顺序?
浮点加法是非结合运算(Non-associative),即 。如果按数据到达顺序归约,每次运行结果可能不同。SwitchIB-2 收集所有操作数后按固定顺序计算,确保结果可重复(Reproducible)。
Q3: Streaming-Aggregation 为何需要”树锁定”?
大消息归约需要在 AN 中缓冲数据片段直到所有子节点数据到达才能组合。如果缓冲区被部分到达的操作无限期占用,会阻塞其他操作。树锁定确保资源仅在真正需要时被预留,类似屏障同步的锁定开销换取了资源安全性。
Q4: SHArP v1 和 v2 如何选择使用?
两者是互补关系而非替代。v1 的低延迟聚合(LLA)适合小消息(<4KB)和屏障同步;v2 的 Streaming-Aggregation 适合中大消息(>4KB–16KB 切换点)。MPI/NCCL 实现通常根据消息大小自动选择算法。
Q5: 网络硬件故障时 SHArP 如何处理?
SHArP 的错误处理策略是通知而非恢复。当检测到传输错误、端点错误或协议错误时,聚合管理器(AM)通知主机进程归约失败,并释放相关资源。应用程序可选择重试 SHArP 操作或回退到主机端算法。由于网络级不可恢复错误的发生频率远低于聚合操作持续时间,这种简化设计是合理的。
Q6: SHArP 对 AI/ML 训练为何越来越重要?
分布式深度学习(如 PyTorch、TensorFlow)依赖频繁的梯度全归约(Gradient Allreduce)。随着模型规模增大,梯度同步的带宽需求剧增。SHArP 将梯度归约卸载到网络,不仅降低延迟,还使 GPU 不必等待 CPU 完成归约计算,显著提升端到端训练吞吐。