GPUDirect RDMA 如何让 GPU 与网络设备直接交换数据,实际应用中有哪些性能收益
在大规模人工智能训练中,GPU的计算速度已经越来越快,但真正影响整个系统效率的往往不只是GPU本身,而是数据能否及时送到GPU,以及多块GPU之间能否高速交换数据。尤其是在数百甚至数千块GPU组成的集群中,模型参数、梯度和激活数据需要持续通过网络传输。如果这些数据每次都经过CPU和系统内存,CPU、内存以及PCIe链路就可能成为新的瓶颈。
GPUDirect RDMA解决的正是这一问题。它允许支持RDMA的网络接口控制器,也就是NIC,在符合硬件和软件条件的情况下直接对GPU显存进行DMA读写,从而减少传统数据路径中的CPU和系统内存中转。对于分布式AI训练和高性能计算,这种改变的意义并不是简单地“让GPU联网”,而是重新设计了GPU与网络之间的数据移动方式。
传统架构中的数据传输通常需要经过多个环节。当GPU中的数据需要发送到另一台服务器时,数据可能先从GPU显存复制到CPU可访问的系统内存,然后由网络设备读取这些数据并发送出去。接收端则经历相反的过程,网络数据先进入系统内存,再由CPU或相关软件路径处理,最终复制到GPU显存。
这种方式的问题在于数据被搬运了不止一次。CPU需要参与内存管理和通信调度,系统内存承担中间缓冲区,PCIe链路则需要同时承担GPU、CPU和其他设备之间的数据交换。当GPU计算能力不断提高时,这些额外的数据移动可能越来越明显。
GPUDirect RDMA改变了这一数据路径。在支持的系统中,NIC可以通过DMA直接读取GPU显存中的数据,或者把从网络收到的数据直接写入GPU显存。数据不需要先复制到传统意义上的CPU系统内存中,再由CPU完成一次中转。
这里的关键并不是CPU完全消失,而是CPU不再承担大量数据搬运工作。操作系统、驱动程序、通信库和应用程序仍然负责建立通信、管理资源和发起操作,但真正的大块数据可以通过DMA在NIC和GPU显存之间直接移动。
这也是“零拷贝”概念在GPU通信场景中的重要体现。严格来说,零拷贝并不意味着系统完全没有任何数据移动,而是避免了不必要的CPU内存中间复制。对于需要传输大量数据的AI训练任务,这种区别非常重要。
GPUDirect RDMA最明显的价值首先体现在CPU负载下降。传统数据路径需要CPU参与大量内存复制和通信处理,而直接GPU内存访问可以把数据搬运任务交给NIC的DMA机制。这样一来,CPU可以把更多计算资源用于应用逻辑、数据处理以及其他控制任务。
第二个收益是降低通信延迟。在分布式训练中,GPU之间不仅需要交换大量数据,而且需要频繁同步。例如使用AllReduce进行梯度聚合时,GPU完成一轮计算后必须等待通信操作完成,随后才能继续下一轮计算。如果通信时间过长,GPU计算单元就可能出现等待。
GPUDirect RDMA减少了数据经过CPU和系统内存的中间路径,因此能够降低通信开销。不过,不能简单地说所有场景都可以达到某个固定的“纳秒级”延迟。实际延迟取决于网络类型、NIC、PCIe拓扑、GPU型号、消息大小、通信库以及集群配置。InfiniBand和RoCE等RDMA网络可以提供很低的通信延迟,但最终性能仍然由整个系统决定。
第三个收益是提高有效带宽利用率。对于大型模型训练,通信数据量非常大。如果GPU每轮计算产生大量梯度,需要频繁在节点之间传输,那么减少中间复制就能够提高数据传输效率。
但这里有一个非常容易产生误解的问题:GPUDirect RDMA的性能不能简单用GPU内部互联带宽来衡量。比如NVLink拥有很高的GPU之间互联带宽,但它与NIC连接服务器网络的实际带宽并不是同一个指标。GPUDirect RDMA最终能够达到多少吞吐量,还要看NIC端口速率、PCIe代际和通道数量、GPU与NIC之间的拓扑以及通信软件的实现。
因此,在大型AI服务器中,GPU和NIC的位置关系非常重要。如果GPU和NIC之间经过复杂的PCIe拓扑,或者共享同一条存在竞争的PCIe链路,即使软件支持GPUDirect RDMA,也可能无法得到理想性能。真正高性能的系统设计通常需要同时考虑GPU、NIC、PCIe交换芯片以及CPU NUMA结构。
分布式AI训练是GPUDirect RDMA最典型的应用场景之一。现代训练任务经常采用多机多GPU架构,一台服务器中的多块GPU不仅需要通过高速互联交换数据,不同服务器之间也需要通过高速网络进行通信。
例如,在数据并行训练中,每块GPU可能独立处理一部分训练数据,计算完成后需要进行梯度同步。如果通信数据先经过CPU内存,就会增加额外的数据搬运成本。通过GPUDirect RDMA,NIC可以直接从GPU显存读取通信数据,再通过高速网络发送到其他服务器;接收的数据也可以直接写入目标GPU显存。
NVIDIA的通信软件栈中,NCCL等通信库会根据硬件拓扑选择合适的通信路径。在多GPU、多节点环境下,GPU之间的高速互联与节点之间的RDMA网络并不是互相替代,而是共同构成通信层。GPU之间可能利用NVLink等高速互联,而跨服务器通信则可能利用InfiniBand或RoCE网络。
这种组合对于大规模模型训练尤其重要。模型越大,参与训练的GPU数量越多,通信在总训练时间中的占比就越可能上升。当计算时间不断缩短,而通信时间没有同步下降时,整个集群的扩展效率就会受到影响。GPUDirect RDMA的价值就在于尽可能降低这部分通信成本。
除了训练,低延迟推理也可以从这种架构中获益。例如实时视频分析、科学计算以及高性能数据处理等应用,可能需要将网络收到的大量数据快速交给GPU处理。如果数据必须先经过CPU内存,再复制到GPU显存,就会增加额外延迟。直接将网络数据写入GPU显存,可以减少这一中间步骤。
不过,这并不意味着任何网络应用部署GPUDirect RDMA都会明显加速。对于数据量较小、通信频率低或者CPU本身并不是瓶颈的应用,直接存储访问所带来的收益可能并不明显。部署这种技术需要结合实际工作负载进行测试,而不能仅仅根据理论带宽判断效果。
GPUDirect RDMA还有较高的软硬件门槛。GPU、NIC、驱动程序、操作系统、RDMA栈以及通信库必须形成完整的支持链路。InfiniBand和RoCE环境还涉及网络配置、队列管理、拥塞控制以及数据中心网络拓扑等问题。
另外,GPU显存并不是传统意义上的普通系统内存。NIC要直接访问GPU显存,需要操作系统、GPU驱动和相关内核机制完成必要的内存注册和地址映射。因此,GPUDirect RDMA并不是简单地打开一个开关就能实现,而是一整套软硬件协同机制。
从系统设计角度看,真正值得关注的也不是单一设备的峰值参数,而是完整的数据路径。如果GPU计算能力很强,而NIC网络速度不足,那么GPU仍然需要等待数据。如果网络带宽足够高,但PCIe拓扑存在瓶颈,同样无法发挥网络设备的全部性能。如果通信库没有充分利用硬件拓扑,理论上的高速互联也可能无法转化为实际训练效率。
因此,GPUDirect RDMA的真正意义,是把GPU集群中的数据移动问题从“CPU负责搬运”转变为“专用硬件直接搬运”。它没有消除网络延迟,也没有让GPU与任何网络设备都能够无限速通信,而是在合适的硬件和软件环境下减少不必要的数据复制和CPU介入。
对于大规模AI训练、高性能计算以及部分低延迟数据处理任务,这种变化非常重要。随着GPU计算能力继续增长,数据传输效率正在成为决定整个计算集群利用率的重要因素。未来高性能AI基础设施的竞争,也不会只取决于GPU数量,而越来越取决于GPU、网络、存储、内存和互联拓扑能否形成一个高效的数据流系统。
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
分享 Facebook | X | WhatsApp | LinkedIn
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP