MCCL 概览
摩尔线程集合通信库(MCCL)可实现针对摩尔线程 GPU 和网络进行性能优化的多 GPU 和多节点通信基元。MCCL 提供了 AllReduce、Broadcast、Reduce、AllGather、ReduceScatter 以及点对点 send/receive 等原语,这些原语均经过优化,可通过节点内的 PCIe 和 MTLink 高速互联以及节点间的 InfiniBand 网络实现高带宽和低延迟。
MCCL 支持节点内和跨节点通信,可以实现拓扑的自动检测,计算最优路径,最终实现 GPUs 之间的高效传输。
MCCL 特性
- 拓扑感知:自动检测 GPU 拓扑,计算最优通信路径
- 高带宽低延迟:针对 PCIe、MTLink、InfiniBand 优化
- 多种原语:AllReduce、Broadcast、Reduce、AllGather、ReduceScatter、P2P Send/Receive
- 易于集成:简单的 C API,遵循 MPI 集体通信规范
- stream 集成:接受
MUSA stream参数,与 MUSA 编程模型直接集成 - 多编程模型:支持单线程多卡、多线程(每 GPU 一线程)、多进程(MPI)
MCCL 框架

图 1 MCCL 框架图
节点内通信
节点内 GPU 之间进行数据传输,主要的物理介质是 PCIe 和 MTLink,涉及到的主要技术有 GPUDirect P2P。GPUDirect P2P 避免数据通过 CPU 进行中转,降低延时,同时可以利用 GPU 高速互联的带宽。

图 2 PCIe 的 P2P 示意图
跨节点通信
节点间 GPU 进行数据传输,主要的物理介质有普通以太网或者 InfiniBand,涉及的技术有 GPUDirect RDMA。

图 3 跨节点传输
MCCL 支持的集合通信
Broadcast
Broadcast 将数据从一个 GPU(根 GPU)分发到所有 GPU。所有 GPU 的内容和根 GPU 的内容一致。

图 4 Broadcast 运算示意图
Reduce
Reduce 把所有 GPU 的数据聚合到一个 GPU,并对数据进行指定的规约操作。所有 GPU 必须发送同等大小的数据。此外,数据必须以能够执行 reduce 操作的方式进行对齐。MCCL 支持四种操作:Sum、Prod、Max、Min。所有 GPU 规约计算的结果会压缩到根 GPU。

图 5 Reduce 运算示意图
AllGather
AllGather 收集所有 GPU 的数据,并发送到所有 GPU。所有发送的数据块大小必须相同。目的 GPU 的数据由每个 GPU 组合而成。

图 6 AllGather 运算示意图
AllReduce
AllReduce 的操作和 Reduce 一样,但是需要向所有 GPU 发送相同的数据。

图 7 AllReduce 运算示意图
ReduceScatter
ReduceScatter 操作和 AllReduce 类似,不同的是最终发送到所有 GPU 上的是数据的一列。

图 8 ReduceScatter 运算示意图