NVSHMEM
NVSHMEM™ 是一个基于 OpenSHMEM 的并行编程接口 为 NVIDIA GPU 集群提供高效且可扩展的通信。NVSHMEM 为 数据跨越多个 GPU 的显存,并且可以通过细粒度 GPU 初始化进行访问 操作、CPU 发起的操作以及 CUDA® 流上的操作。
高效、强扩展
NVSHMEM 支持包含通信和计算的长时间运行内核,从而减少用度 在强扩展时可能会限制应用程序的性能。
低用度
单侧通信基元允许启动进程或 GPU 线程 指定完成数据传输所需的所有信息。这种低用度模型支持多个 GPU 以便高效沟通。
自然异步
异步通信使程序员能够更轻松地交错计算和通信, 从而提高应用程序的整体性能。
NVSHMEM 3.4 的新功能
- 在 IB 传输中添加了对数据直接网卡配置的支持。- 添加了新的环境变量`NVSHMEM_DISABLE_DATA_DIRECT`,以强制禁用数据直接网卡 (即使存在) 。
- 新增了对 CPU 辅助 IBGDA 的支持,无需使用 GDRCopy 或 x86 regkey 设置。不支持其他方法的系统将自动回退到这种新方法。它支持在各种系统上使用 IBGDA,而无需管理员干预。
- 添加了新的环境变量`NVSHMEM_HCA_PREFIX`,以便在以非标准方式命名 HCA 设备的系统上启用 IB 传输 (例如,使用`ipb` 而非`mlx5`) 。
- 已弃用对组合的`libnvshmem.a` 主机和设备静态库的支持。
主要特性
- 将多个 GPU 的显存合并到一个可通过以下方式访问的分区全局地址空间中 NVSHMEM API
- 包含低用度的内核内通信 API,供 GPU 线程使用
- 包括基于流和 CPU 发起的通信 API
- 支持 x86 和 Arm 处理器
- 可与 MPI 和其他 OpenSHMEM 实现互操作
NVSHMEM 的优势
提升性能
卷积是一种计算密集型内核,广泛用于各种应用程序,包括图像 处理、机器学习和科学计算。空间并行化将域分解为 通过最近邻点通信分布在多个 GPU 上的子分区,通常称为 作为光环交换。
在利弗莫尔大型人工神经网络 (LBANN) 深度学习框架中,空间并行卷积 使用 MPI 和 NVSHMEM 等多种通信方法实现。基于 MPI 的光晕交换 使用标准的发送和接收基元,而基于 NVSHMEM 的实现使用单侧放置, 显著提升了劳伦斯利弗莫尔国家实验室的性能 Sierra 超级计算机。
Sierra 超级计算机上的高效强扩展
在 NVIDIA DGX SuperPOD 上实现高效的强扩展
加快解决问题的速度
要缩短高性能科学计算工作负载的解决方案时间,通常需要 强扩展应用程序。QUDA 是一个用于在 GPU 上运行晶格量子色动力学 (QCD) 的库 由热门的 MIMD 格点计算 (MILC) 和 Chroma 代码使用。
支持 NVSHMEM 的 QUDA 可避免通信中的 CPU-GPU 同步,从而减少关键路径 并显著提高强扩展效率。
简化开发
共梯度 (CG) 方法是求解线性方程组的常用数值方法, CGSolve 是 Kokkos 编程模型中这种方法的实现。CGSolve 内核 展示了将 NVSHMEM 用作 Kokkos 等更高级别的编程模型的构建块。
NVSHMEM 使用 Kokkos 全局阵列数据结构实现高效的多节点和多 GPU 执行 无需显式代码即可在 GPU 之间进行通信。因此,支持 NVSHMEM 的 Kokkos 与使用 MPI 和 CUDA 相比,显著简化了开发。
Kokkos CGSolve 的高效编程
资源
- NVSHMEM 用户:
- NVSHMEM 博客:
- 入门网络会议
- NVSHMEM 文档
- NVSHMEM 最佳实践指南
- NVSHMEM API 文档
- OpenSHMEM 规范
- NVSHMEM 开发者 论坛
- 如有疑问或提供反馈,请联系nvshmem@nvidia.com
- 相关库和软件:
准备好开始使用 NVSHMEM 进行开发了吗?