计算机网络通信中最重要两个衡量指标主要是 带宽 和 延迟。分布式训练中需要传输大量的网络模型参数,网络通信至关重要。
AI集群是由多台包含CPU、内存、GPU的服务器组成,需要考虑机器内通信和机器间通信。
机器内通信通常包括共享内存、PCIe、NVLink等方式,机器间主要通过TCP/IP网络和RDMA网络(直连模式)。
同一机器内:
机器间通信,主要通过TCP/IP网络,但是用网络,需要过CPU,有延时损耗,现在最新的方方案是用RDMA直连网络。
PCIe 5.0 最高速率是32G
Nv为了解决PCIE速度不高的问题,研发了NVLink解决方案,支持CPU和GPU互联,GPU互联。启用 NVLink 的系统中,CPU 发起的事务(如控制和配置)仍然通过 PCIe 连接。
保留 PCIe 编程模型,同时在连接带宽方面提供巨大的优势。
RDMA主要特性:
• CPU Offload:无需CPU干预,远程主机CPU缓存(cache)不会被访问的内存内容所填充
• Kernel Bypass:专有 Verbs interface ,应用程序可以直接在用户态执行数据传输
• Zero Copy:每个应用程序都能直接访问集群中的设备的虚拟内存
我们可以通过下面的图来对比,左边蓝色是传统TCP/IP,右边是RDMA,通过直连技术可以不经过内存区域拷贝。
RDMA,公司用的RoCE方案。
通用接口,可调用 Open-MPI, MVAPICH2, Intel MPI等。
MPI(Message Passing Interface)定义了多个原语的消息传递接口,这一接口主要被用于多进程间的通信。MPI 系统通信方式是建立在点对点通信之上。而集合通讯是建立在端到端通信的基础上,在一组进程内的通讯原语。
NCCL 架构和工作流程:
NVIDIA AI 库依赖 NCCL 提供编程抽象,通过高级拓扑检测、通用路径搜索和针对 NVIDIA 架构优化的算法,针对每个平台和拓扑进行高度调整。 NCCL API 从 CPU 启动,GPU执行,在 GPU 内存之间移动或交换数据。最后利用 NVLink 聚合多个高速 NIC 的带宽。
Pytorch中,MPI和NCCL 对比,MPI主要是CPU,NCCL是GPU:
硬件通过PCIe、NVLink、RDMA来针对不同场景实现硬件通信,软件主要是MPI和NCCL。
DeepLearningSystem/03.communication.pdf at main · chenzomi12/DeepLearningSystem (github.com)