NVIDIA GPUDirect® RDMA 技术详解
一、什么是NVIDIA GPUDirect® RDMA?
NVIDIA GPUDirect RDMA(远程直接内存访问)是 NVIDIA Magnum IO™ 技术家族的一员,能让用户在 GPU 与其他设备之间快速传输数据,且无需 CPU 本身或任何主机内存参与。
在传统数据传输场景中,数据会从 GPU 传输到系统内存,再到网卡,最终抵达目标设备。这一过程需要对数据进行多次复制,且需要 CPU 参与,会增加延迟并降低整体系统效率。相比之下,GPUDirect RDMA 对数据传输流程进行了优化,数据可直接从 GPU 内存区域传输至网卡或其他支持 RDMA 的设备,无需经过系统内存或 CPU。这种直达辅助设备内存的传输路径,能显著降低延迟,并将 CPU 解放出来处理其他任务。
核心优势
- • 更低延迟:无需经过 CPU 或系统内存,数据传输耗时极少。
- • 更高带宽:消除不必要的数据复制,系统可实现更高的数据吞吐量。
- • 减少CPU开销:将 CPU 排除在数据传输之外,使其能处理其他任务 —— 这在并行计算环境中尤为重要。
以太网版本特别适用于高性能计算(HPC)、数据分析和人工智能工作负载,专为特斯拉(Tesla)系列和 Quadro 系列GPU设计。
二、GPUDirect RDMA 设计原理
实现GPU内存与其他支持 RDMA 的设备之间直接数据传输,需满足硬件、软件及系统层面的多重要求,其工作流程与 CUDA 集成方式如下:
硬件层面集成要求
- • GPU与网卡:支持RDMA的网卡之间需具备专用硬件集成,支持PCI Express(PCIe),且具备NV端到端(P2P)内存访问和通信能力。
- • 内存映射:通过内存映射I/O(MMIO)和高级PCIe 特性对GPU内存进行映射,使网卡无需借助系统内存即可直接访问 GPU内存。
- • 数据传输一致性:硬件需确保所有组件间的数据同步准确无误。
软件栈要求
- • 统一计算设备架构(CUDA)驱动:提供关键的内存映射和直接数据传输能力,是支持 GPUDirect RDMA 的核心。
- • RDMA 接口(API):系统需支持 RDMA 技术,通常依赖 OpenFabrics Enterprise Distribution(OFED)等软件栈。
- • 操作系统支持:Linux 系统因其对高性能计算(HPC)和 GPU 计算的强大支持,是常用选择。
系统要求
- • 兼容的 NVIDIA GPU:通常为数据中心级高性能 GPU,如 NVIDIA A100、V100 或同类型号。
- • 支持 RDMA 的网卡:需配备支持 RDMA 的网络接口卡(NIC),支持 InfiniBand、RoCE 或 iWARP 协议。
- • PCIe 配置:系统需支持具备端到端(P2P)通信能力的 PCIe 总线。
- • 兼容的主板和 CPU:主板需提供足够的 PCIe 通道和带宽,CPU 需具备足够性能以高效管理整个系统。
- • 软件环境:需使用 Linux 发行版(如 Ubuntu、CentOS 或红帽),且系统内核模块需支持 RDMA 和 NVIDIA GPUDirect RDMA 驱动。
- • 应用程序支持:应用程序需经过专门设计或修改,使用支持 RDMA 和 GPU 直接内存访问的特定库或接口。
工作流程
- • 注册:通过 RDMA 网卡完成内存注册,使内存可用于直接传输。
- • 启动:应用程序或进程通过 RDMA 接口触发数据传输。
- • 直接数据传输:网卡通过 PCIe 总线直接读取或写入 GPU 内存,绕开 CPU 和系统内存。
- • 完成处理:应用程序收到传输完成通知后,GPU 或其他进程即可使用该数据。
与CUDA集成
GPUDirect RDMA CUDA 将 RDMA 技术集成到 NVIDIA 并行计算平台及编程模型(CUDA)中,实现基于 CUDA 的应用程序与支持 RDMA 的设备之间的直接交互。
工作原理
CUDA 应用程序可通过特定的 CUDA 接口和库利用 GPUDirect RDMA 功能,直接从 GPU 启动和管理 RDMA 操作,数据传输无需 CPU 介入。例如,CUDA 应用程序可通过 RDMA 接口将 GPU 内存注册到支持 RDMA 的网卡中,之后网卡可直接读取或写入 GPU 内存,实现高效数据交换。
应用场景
- • 分布式机器学习的多节点训练环境。
- • 高性能计算(HPC)环境中的科学模拟。
- • 对实时数据处理有高要求的应用,如金融交易系统或实时视频分析。
三、GPUDirect RDMA 基准测试
GPUDirect RDMA 的核心基准测试指标及影响因素如下:
典型基准测试结果
- • 延迟:对于小数据包,延迟可低至 2-5 微秒。
- • 带宽:根据PCIe版本和具体硬件配置,带宽范围通常为 10-25 GB/s。
- • 数据包大小与延迟/吞吐量的关系:高数据包传输速率(尤其是小数据)表明系统每秒可高效处理大量事务,对分布式工作负载至关重要。
影响测试结果的因素
- • PCIe 版本:PCIe 4.0 相比 3.0 提供更高带宽,可提升性能。
- • GPU 和网卡型号:具体型号及其固件和驱动版本会显著影响性能。
- • 系统配置:整体系统设置(包括 GPU 数量、网络拓扑和 CPU 架构)会影响测试结果。
四、GPUDirect RDMA 应用实例
NVIDIA GPUDirect RDMA 广泛应用于对延迟优化和数据吞吐量最大化有严格要求的各类高性能计算(HPC)和数据密集型应用:
- • 分布式深度学习与人工智能训练:在大规模深度学习任务中,跨节点 GPU 之间高效共享模型参数和梯度,支持图像识别、自然语言 处理等任务的深度神经网络(DNN)训练。
- • 科学模拟与高性能计算(HPC):气候建模、流体动力学或分子动力学等场景中,实现不同节点 GPU 之间的粒子数据直接传输,加快 复杂分子系统模拟速度。
- • 实时数据分析与金融服务:高频交易等应用中,超低延迟处理市场数据,提升交易执行速度。
- • 电信与 5G 网络:快速高效处理视频流、增强现实和物联网(IoT)等高速带宽应用的网络数据。
- • 自动驾驶与机器人技术:实时处理来自摄像头、激光雷达(LIDAR)和雷达(RADAR)的传感器数据,实现目标检测、路径规划等。
五、GPUDirect RDMA 与 GPUDirect Storage 的对比
两者均能在不增加 CPU 负担的前提下提升性能,但实现方式存在差异:
| 特性 |
GPUDirect RDMA |
GPUDirect Storage |
| 核心功能 |
支持 GPU 与网络中的其他设备及存储系统之间的直接内存访问 |
专门支持存储设备与 GPU 内存之间的直接数据传输 |
| 适用范围 |
更宽泛,涵盖网络设备与存储系统 |
聚焦存储设备访问优化 |
| 运行依赖 |
依赖所访问的设备或存储位置 |
不受存储位置限制 |
六、GPUDirect RDMA 与 NVLink 的对比
两者均能增强 NVIDIA GPU 系统的数据传输与通信能力,但关键差异如下:
| 特性 |
GPUDirect RDMA |
NVLink |
| 通信总线 |
通过 PCIe 总线与其他设备直接通信 |
PCIe 的替代方案,专为同一节点内通信设计 |
| 通信范围 |
支持 GPU 与网络中其他设备/远程 GPU 通信 |
适用于同一节点内的 GPU 间或 CPU 与 GPU 间通信 |
| 性能特点 |
带宽相对较低 |
高速、低延迟,通信速度远高于 PCIe |
| 核心优势 |
跨节点、跨设备的直接数据传输 |
构建 GPU “互联网络”,支持多 GPU 间快速共享内存与数据 |
七、GPUDirect RDMA 的优势
- • 降低延迟: 数据传输绕开 CPU,减少延迟的同时,带宽可提升 2-8 倍,实现更快的数据访问、读写速度及整体性能提升。
- • 提高吞吐量:优化数据传输路径,提升存储设备与 GPU 内存之间的吞吐量,增强系统整体效率。
- • 扩展存储规模:在多 GPU 及分布式计算环境中支持高效数据访问,满足大规模应用场景需求。
- • 减少 CPU 负担:存储设备与 GPU 内存的直接数据传输释放 CPU 资源,使其可处理其他任务,进一步提升系统整体效率。