NVSHMEM 是一个并行编程接口,可为 NVIDIA GPU 集群提供高效且可扩展的通信。NVSHMEM 是 NVIDIA Magnum IO 的一部分,基于 OpenSHMEM,可为跨越多个 GPU 内存的数据创建全局地址空间,并可通过细粒度的 GPU 初始化操作、CPU 初始化操作和 CUDA 流操作进行访问。
现有的通信模型(例如 Message Passing Interface(MPI))使用 CPU 编排数据传输。相比之下,NVSHMEM 使用 GPU 发起的异步数据传输,从而消除 CPU 和 GPU 之间的同步开销。
本文将详细介绍NVSHMEM 3.0版本,包括我们在各个平台和系统中启用的新功能和支持。
NVSHMEM 3.0 中的新功能和接口支持
NVSHMEM 3.0 引入了多节点、多互连支持、主机设备 ABI 向后兼容性和 CPU 辅助 InfiniBand GPU 直接异步(IBGDA)。
多节点、多互连支持
以前,NVSHMEM 支持通过 P2P 互联 (NVIDIA NVLink/PCIe) 在一个节点内连接多个 GPU,并通过 RDMA 互联在一个节点上连接多个 GPU,例如 InfiniBand、RDMA over Converged Ethernet (RoCE) 和 Slingshot 等(图 2)。
NVSHMEM 2.11 增加了对多节点 NVLink (MNNVL 或 NVIDIA GB200 NVL72) 系统的支持(图 3)。然而,这种支持仅限于 NVLink 作为唯一的节点间互连时。
为了解决这一限制,我们添加了新的平台支持,使多个 NVIDIA GB200 NVL72 系统的机架能够通过 RDMA 网络连接(图 4)。NVSHMEM 3.0 添加了此平台支持,当两个 GPU 属于同一 NVLink 结构时(例如,在同一 NVIDIA GB200 NVL72 机架内),将使用 NVLink 进行通信。
此外,当 GPU 分布在 NVLink 架构(例如,跨 NVIDIA GB200 NVL72 机架)时,远程网络将用于这些 GPU 之间的通信。此版本还增强了 NVSHMEM_TEAM_SHARED
能力,可包含属于跨越一个或多个节点的同一 NVLink 集群的所有 GPU。
主机设备 ABI 向后兼容性
过去,NVSHMEM 不支持应用程序的向后兼容性,也不支持独立编译的引导插件。NVSHMEM 3.0 在 NVSHMEM 次要版本之间引入了向后兼容性。一旦 ABI 发生破坏,将通过 NVSHMEM 主要版本的更改来表示。
此功能为使用 ABI 兼容版本的 NVSHMEM 库或应用提供以下用例:
- 链接到 NVSHMEM 次要版本 3.X 的库可以安装在安装较新版本 3.Y 的 NVSHMEM(Y > X)的系统上。
- 单个较新的 NVSHMEM 版本将支持在 SDK 中一起提供的多个库,这些库链接到不同的 NVSHMEM 次要版本。
- CUDA 二进制文件 (也称为 cubin) 以静态方式链接到旧版的 NVSHMEM 设备库,可以由使用较新版本的 NVSHMEM 的库加载。
NVSHMEM 主机库 2.12 | NVSHMEM 主机库 3.0+ | NVSHMEM 主机库 3.1 | NVSHMEM 主机库 3.2 | NVSHMEM 主机库 4.0 | |
应用程序链接到 NVSHMEM 3.1 | 否 | 否 | 是 | 是 | 否 |
Cubin 链接到 NVSHMEM 3.0 | 否 | 是 | 是 | 是 | 否 |
多个库 Lib 1 NVSHMEM 3.1, Lib 2 NVSHMEM 3.2 | 否 | 否 | 否 | 是 | 否 |
CPU 辅助 InfiniBand GPU 直接异步
在之前的版本中,NVSHMEM 支持传统的 InfiniBand GPU Direct Async (IBGDA),其中 GPU 直接驱动 InfiniBand 网卡,从而实现大规模并行控制平面操作。NVSHMEM 负责管理网络接口卡(NIC)控制平面,例如在向 NIC 发布新工作请求时按门铃。
NVSHMEM 3.0 在 IBGDA 中增加了对一种名为 CPU-assisted IBGDA 的新模式的支持,该模式充当基于代理的网络和传统 IBGDA 之间的中间模式。它在 GPU 和 CPU 之间划分控制平面的责任。GPU 生成工作请求(控制平面操作),CPU 管理已提交工作请求的 NIC 门铃请求。它还支持在运行时动态选择 NIC 助手为 CPU 或 GPU。
CPU 辅助的 IBGDA 可在 IBGDA 对等映射中放松现有的管理级配置限制,从而帮助提高 IBGDA 在非一致性平台上的采用率,因为在大规模集群部署中,管理级配置限制难以实施。
非接口支持和次要增强功能
NVSHMEM 3.0 还引入了一些细微的增强功能和非接口支持,如本节所述。
面向对象的对称堆编程框架
过去,NVSHMEM 使用程序化编程模型支持多种对称堆类型。这存在局限性,例如缺乏基于命名空间的数据封装以及代码复制和数据冗余。
NVSHMEM 3.0 引入了对面向对象编程(OOP)框架的支持,该框架可以使用多级继承管理不同类型的对称堆,例如静态设备内存和动态设备内存。这将使高级功能更容易扩展,例如在未来的版本中按需注册应用程序缓冲区到对称堆。
性能改进和问题修复
NVSHMEM 3.0 引入了不同组件和场景的各种性能改进和错误修复,包括 IBGDA 设置、块范围设备端归约、系统范围原子内存操作(AMO)、IB 队列对(QP)映射、内存注册、团队管理和 PTX 构建测试。
总结
3.0 版 NVIDIA NVSHMEM 并行编程接口引入了多项新功能,包括多节点多互连支持、主机设备 ABI 向后兼容性、CPU 辅助 InfiniBand GPU Direct Async(IBGDA),以及用于对称堆的面向对象编程框架。
借助主机设备 ABI 向后兼容性,管理员可以更新到新版本的 NVSHMEM,而无需中断已编译的应用程序,从而无需在每次更新时修改应用程序源代码。
CPU 辅助 InfiniBand GPU Direct Async (IBGDA) 使用户能够在无法执行管理级驱动设置的集群上从 IBGDA 传输的高消息速率中受益。
如需了解详情并开始使用,请参阅以下资源: