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 傳輸的高消息速率中受益。
如需了解詳情并開始使用,請參閱以下資源:
?