MCCL 概览
摩尔线程集体通信库(MCCL) 是一个提供跨 GPU 通信原语的库,这些原语具有拓扑感知能力,并且可以轻松集成到应用程序中。
MCCL 实现了集体通信和点对点发送/接收原语。它不是一个完整的并行编程框架;相反,它是一个专注于加速跨 GPU 通信的库。
MCCL 提供了以下集体通信原语:
- AllReduce
- Broadcast
- Reduce
- AllGather
- ReduceScatter
此外,它还允许点对点发送/接收通信,这允许进行 scatter、gather 或 alltoall 操作。
在集体通信中,通信处理器之间的紧密同步是一个关键方面。基于 MUSA 的集体通信传统上会通过 MUSA 内存复制操作和 MUSA 内核的组合来实现本地归约。与此相反,MCCL 实现了每个集体通信原语,使用单个内核处理通信和计算操作。这允许快速同步,并最小化了达到峰值带宽所需的资源。
MCCL 方便地消除了开发人员需要为特定机器优化其应用程序的需求。MCCL 在多个 GPU 上提供了快速的集体通信,无论是在节点内还是跨节点。它支持多种互连技术,包括 PCIe、MTLINK、InfiniBand Verbs 和 IP 套接字。
在性能之外,编程的便捷性是 MCCL 设计中的主要考虑因素。MCCL 使用简单的 C API,可以轻松地从多种编程语言访问。MCCL 紧密遵循由 MPI(消息传递接口)定义的流行的集体通信 API。因此,熟悉 MPI 的人会发现 MCCL 的 API 非常自然易用。与 MPI 的一个小小不同之处在于,MCCL 集体通信接受一个 “stream” 参数,这提供了与 MUSA 编程模型的直接集成。最后,MCCL 与几乎所有的多 GPU 并行化模型兼容,例如:
- 单线程控制所有 GPU
- 多线程,例如,每个 GPU 使用一个线程
- 多进程,例如,使用 MPI
MCCL 在深度学习框架中找到了广泛的应用,其中 AllReduce 集体通信在神经网络训练中被大量使用。通过 MCCL 提供的多 GPU 和多节点通信,可以有效地扩展神经网络训练。

