远程直接内存访问 RDMA 是什么?跨服务器直接读写内存的高速网络技术
远程直接内存访问(Remote Direct Memory Access,RDMA)是一种高性能的网络通信技术,它允许一台计算机直接读取或写入另一台计算机的内存,而不需要经过双方的操作系统内核,也几乎不占用双方处理器的资源。这让服务器之间的数据传输延迟极低、带宽极高。
传统网络通信的瓶颈
在传统的网络通信中,比如使用常见的 TCP/IP 协议时,一台服务器要把数据发送给另一台服务器,数据需要经过很多环节:应用程序先把数据交给操作系统内核,内核对数据进行协议处理和打包,把数据复制到网络缓冲区,再交给网卡发送出去;接收方的网卡收到数据后,又要经过内核的协议处理、数据复制,才能最终交给应用程序。这个过程中有多次数据复制,需要在用户程序和操作系统之间来回切换,处理器要花费大量的时间来处理网络协议。在普通的网络应用中,这些开销还可以接受;但在高性能计算和 AI 训练中,服务器之间需要以极高的频率交换海量的数据,这些开销就会成为严重的瓶颈。
RDMA 怎么做
RDMA 的核心思想是让网卡来直接完成数据的传输:应用程序事先在内存中注册好一块区域,告诉网卡可以访问它;发送数据时,网卡直接从应用程序的内存中读取数据,通过网络发送到对方的网卡,对方的网卡再直接把数据写入目标应用程序的内存中。整个过程绕过了操作系统内核,没有多余的数据复制,处理器几乎不需要参与,可以腾出来做其他的计算工作。这种技术也被称为“内核旁路”和“零拷贝”。
主要的实现方式
InfiniBand:一种专门为高性能计算设计的网络技术,原生支持 RDMA,延迟极低、带宽极高,但需要使用专门的交换机和网卡。主要的供应商是迈络思(Mellanox),它在 2020 年被英伟达收购。RoCE(基于融合以太网的 RDMA):在普通的以太网上实现 RDMA,可以利用现有的以太网基础设施,成本更低,但对网络的配置要求较高,需要尽量避免丢包。iWARP:在 TCP/IP 协议上实现 RDMA,使用得相对较少。
为什么对 AI 至关重要
训练一个大模型需要成千上万块 GPU 同时工作,它们分布在大量的服务器上。在训练的过程中,各个 GPU 需要频繁地交换和同步模型的梯度和参数,通信的数据量非常大。如果网络的速度跟不上,GPU 就会把大量的时间花在等待数据上,昂贵的算力被白白浪费。RDMA 网络,配合英伟达的 GPUDirect RDMA 技术,可以让网卡直接读写 GPU 的显存,不必经过 CPU 内存中转,从而大幅提升了跨服务器通信的效率。因此,高速的 RDMA 网络是现代 AI 训练集群的关键基础设施,其重要性不亚于 GPU 本身。近年来,业界还成立了超以太网联盟,致力于发展更适合 AI 和高性能计算的以太网技术。