3. GPU Direct技术概述:GPU Direct P2P、GPU Direct RDMA、GPU Direct Storage的区别与联系

3.1 核心原理:从“绕路”到“直达”的演进逻辑

在传统计算架构中,GPU 作为 PCIe 设备,其数据通路必须经过 CPU 和系统内存中转。以 GPU 从远端服务器读取数据为例,数据需要经历“网卡 → CPU 内存 → 再次拷贝至 GPU 内存”的路径,期间涉及多次 DMA 拷贝和 CPU 中断处理。这种“绕路”设计在早期应用尚可接受,但在 HPC、AI 训练等场景中,数据吞吐量达到数十 GB/s 时,CPU 内存带宽和 PCIe 链路争用便成为严重瓶颈。

GPU Direct 技术的本质,是利用 PCIe 总线的点对点(Peer-to-Peer)通信能力,绕过 CPU 及其内存,在 GPU 与其它 PCIe 设备(如网卡、NVMe 存储、另一块 GPU)之间建立直接数据通道。NVIDIA 将这一系列技术按目标设备划分为三个方向:

  • GPU Direct P2P(Peer-to-Peer):GPU 与 GPU 之间的直接数据交换,常用于多卡并行计算中的梯度同步、数据分片交换。
  • GPU Direct RDMA(Remote Direct Memory Access):GPU 与支持 RDMA 的网卡(如 InfiniBand、RoCE)之间的直接数据通路,实现跨节点 GPU 显存到远端 GPU 显存的零拷贝传输。
  • GPU Direct Storage(GDS):GPU 与 NVMe SSD 等存储设备之间的直接数据通路,绕过 CPU 内存,将文件数据直接载入显存。

关键认知:三者共享同一底层硬件基础——PCIe 的 P2P 能力与 BAR 地址映射机制,但面向不同的“对端设备”和“应用场景”。它们不是并列的三种独立技术,而是同一理念在不同 I/O 路径上的具体实现。

GPU Direct 技术家族关系与数据通路 CPU (传统路径中转站) 系统内存(DMA 中转) PCIe 总线(P2P 通信物理通道) GPU 0 显存 0 (本地 GPU) GPU 1 显存 1 (对端 GPU) P2P RDMA 网卡 InfiniBand / RoCE (对端:远端 GPU) RDMA NVMe SSD 存储设备 (对端:存储) GDS 传统路径(经 CPU 内存) 技术对比速览 ● GPU Direct P2P GPU↔GPU,同节点内,用于多卡通信( NCCL 底层依赖) ● GPU Direct RDMA GPU↔网卡↔远端GPU,跨节点,用于分布式训练 ● GPU Direct Storage GPU↔NVMe SSD,本地存储直读,用于数据加载/检查点 共同基础: PCIe P2P DMA 机制 + 统一虚拟寻址(UVA)+ 注册内存区域(MR)

3.2 方法流程:三种技术的典型工作路径

理解三者的区别,最直观的方式是追踪一次数据搬运的完整路径。以下分别描述各自的核心流程。

3.2.1 GPU Direct P2P 流程(同节点 GPU 间)

  1. 应用程序通过 CUDA API(如 cudaMemcpyPeer)发起 GPU 间拷贝请求。
  2. 驱动检查两块 GPU 是否位于同一 PCIe 交换机下,且支持 P2P(通过 cudaDeviceCanAccessPeer 查询)。
  3. 若支持,驱动直接配置源 GPU 的 BAR 地址空间映射到目标 GPU,发起 DMA 传输。
  4. 数据从源显存读出,经 PCIe 交换机直达目标显存,全程无 CPU 参与。

3.2.2 GPU Direct RDMA 流程(跨节点 GPU 间)

  1. 发送端 GPU 显存中的数据通过 PCIe 直接写入 RDMA 网卡的片上缓冲区。
  2. 网卡将数据封装为 InfiniBand/RoCE 数据包,经网络发送至远端网卡。
  3. 远端网卡收到数据后,通过 PCIe 直接写入对端 GPU 显存(需提前注册显存区域并获取远端内存句柄)。
  4. 整个过程 CPU 仅负责控制面(发起请求、查询完成),数据面完全旁路。

3.2.3 GPU Direct Storage 流程(本地存储到 GPU)

  1. 应用程序调用 cuFileRead(或 libcufile API)发起文件读取。
  2. 驱动将 NVMe SSD 中的数据通过 PCIe 直接 DMA 到 GPU 显存的目标地址。
  3. 若文件系统或硬件不支持 GDS,则自动回退到传统“存储→CPU 内存→GPU”路径。

实操提示:使用 nvidia-smi topo -m 可查看 GPU 与网卡/NVMe 的 PCIe 拓扑连接关系。若 GPU 与目标设备不在同一 PCIe 交换机下(如通过 CPU 根端口间接连接),P2P 性能会显著下降,此时 GDS 或 RDMA 的优势可能无法充分发挥。

3.3 案例/场景:典型应用中的技术选型

应用场景 推荐技术 原因分析
单机 8 卡 GPU 梯度同步(数据并行) GPU Direct P2P 梯度数据量小、频率高,P2P 延迟最低(约 1-2μs),NCCL 自动调用
跨节点大模型流水线并行(如 GPT-4 训练) GPU Direct RDMA 每层激活值达数百 MB,需绕过 CPU 内存避免带宽瓶颈,RDMA 可提供 200Gb/s 以上吞吐
大规模数据加载(ImageNet 训练前处理) GPU Direct Storage 数据从 SSD 直接进显存,节省一次 PCIe 往返和 CPU 内存占用,加载速度提升 2-5 倍
模型检查点保存/恢复 GPU Direct Storage 数十 GB 权重直接写盘,避免显存→CPU→磁盘的两次拷贝

3.4 误区/复盘:常见理解偏差与排查要点

误区一:认为三者是互斥的独立技术。实际上,一个分布式训练任务可能同时使用全部三种技术:节点内 GPU 间用 P2P 做梯度聚合,节点间用 RDMA 传输,本地检查点写入用 GDS。它们可以共存于同一应用。

误区二:忽略 PCIe 拓扑对 P2P 性能的影响。即使 GPU 支持 P2P,如果两块 GPU 分别挂在不同的 CPU 根端口下,P2P 流量可能需要经过 QPI/UPI 总线,延迟和带宽都会恶化。务必用 nvidia-smi topo -m 确认拓扑。

误区三:混淆 RDMA 与 GPU Direct RDMA。普通 RDMA 是指 CPU 内存与网卡之间的远程直接内存访问;GPU Direct RDMA 则要求网卡能够直接访问 GPU 显存。若未启用 GPU Direct RDMA,数据仍需先到 CPU 内存再拷贝至 GPU,性能大打折扣。

复盘要点:当遇到 GPU 通信性能不达预期时,按以下顺序排查:① 确认硬件拓扑是否支持 P2P(nvidia-smi topo -m);② 检查驱动是否加载 nv_peer_mem 模块(RDMA 场景);③ 验证 GDS 是否启用(cuFileDriverOpen 返回值);④ 使用 ncu 或 nsys 分析实际数据通路是否绕过了 CPU 内存。

总结而言,GPU Direct P2P、RDMA 与 GDS 共同构成了 GPU 直接 I/O 的技术矩阵。P2P 解决“盒内 GPU 互访”,RDMA 解决“跨盒 GPU 互访”,GDS 解决“存储到 GPU 的快速装载”。三者共享 PCIe P2P 底层机制,但面向不同对端设备,在工程实践中往往需要组合使用,才能构建端到端的零拷贝数据通路。