3.10. 网络支持

3.10.1. 主要网络支持模型

本版本提供了多种MPI网络模型:

  • ob1 支持通过BTL("字节传输层")插件使用多种网络,这些插件可以相互组合使用:

    • self: 回环(发送给自己)

    • sm: 共享内存,包括单拷贝技术:XPMEM、Linux CMA、Linux KNEM,以及传统的拷贝输入/拷贝输出共享内存。

    • tcp: 传输控制协议

    • smcuda: 支持CUDA的共享内存

    • usnic: 思科usNIC

    • ugni: uGNI (Cray Gemini, Aries)

  • cm 支持较少数量的网络类型(且这些网络不能同时使用),但通过利用MTL("匹配传输层")插件可能提供更好的整体MPI性能:

    • 开放结构接口("libfabric"标签匹配)

    • Intel Omni-Path PSM2(版本11.2.173或更高)

    • 英特尔True Scale PSM(QLogic InfiniPath)

    • Portals 4

  • ucx 使用 Unified Communication X (UCX) 通信库。这是一个由工业界、实验室和学术界合作开发的开源项目,旨在为数据密集型和高性能应用创建开源生产级通信框架。UCX 库可以从软件仓库(例如 Fedora/RedHat 的 yum 仓库)下载。该库也是 Mellanox OFED 和 Mellanox HPC-X 二进制发行版的组成部分。

    UCX目前支持:

    • OpenFabrics Verbs(包括InfiniBand和RoCE)

    • Cray的uGNI

    • TCP协议

    • 共享内存

    • NVIDIA CUDA驱动程序

虽然用户可以在运行时手动选择上述任意一种传输方式,但Open MPI会按以下方式选择默认传输:

  1. 如果存在InfiniBand设备,请使用UCX PML。

  2. 如果PSM、PSM2或其他支持标签匹配的Libfabric传输设备可用(例如Cray uGNI),请使用cm PML和单个适当的对应mtl模块。

  3. 否则,使用ob1 PML和一个或多个合适的btl模块。

用户可以通过在运行时设置pml MCA参数(以及可能的btl和/或mtl MCA参数),来覆盖Open MPI的默认选择算法,并根据需要强制使用特定的传输方式:

shell$ mpirun --mca pml ob1 --mca btl [comma-delimted-BTLs] ...
# or
shell$ mpirun --mca pml cm --mca mtl [MTL] ...
# or
shell$ mpirun --mca pml ucx ...

在使用UCX与非常旧的Mellanox Infiniband HCAs(特别是ConnectX产品线推出之前的HCAs)时存在一个已知问题,可能导致Open MPI在MPI_Finalize时崩溃。该问题已在UCX 1.9.0及更高版本中得到解决。

3.10.2. 网络杂项说明

  • OpenSHMEM的主要网络模型是ucx;它直接与UCX接口。

  • 在Open MPI的早期版本中,InfiniBand和RoCE支持是通过openib BTL和ob1 PML插件提供的。从Open MPI 4.0.0开始,通过openib插件提供的InfiniBand支持已被弃用,并由ucx PML组件取代。openib BTL在Open MPI v5.0.0中被移除。

    虽然openib BTL依赖于libibverbs,但UCX PML依赖于UCX库。

    安装完成后,可以通过在Open MPI配置命令中添加--with-ucx来构建支持UCX的Open MPI。一旦Open MPI配置为使用UCX,运行时如果检测到受支持的网络(例如InfiniBand),将自动选择ucx PML。可以通过在mpirunoshrun命令行中指定以下任意或全部MCA参数来强制使用UCX:--mca pml ucx用于MPI点对点操作,--mca spml ucx用于OpenSHMEM支持,以及--mca osc ucx用于MPI RMA(单边)操作。

  • usnic BTL支持在配备虚拟接口卡(VIC)的思科UCS服务器上使用思科usNIC设备("用户空间网卡")。虽然usNIC是通过OpenFabrics Libfabric API栈访问的,但此BTL专用于思科usNIC设备。

  • uGNI是Cray公司开发的一个库,用于在Gemini和Aries互连架构上进行通信。

  • sm(共享内存)BTL编译时启用了knem支持(参见--with-knem配置选项),且运行内核中加载了knem Linux模块时,将使用Linux knem支持功能。如果未加载knem Linux内核模块,在Open MPI作业期间(默认情况下)会静默停用knem支持。

    有关Knem的详细信息,请参阅https://knem.gitlabpages.inria.fr/

  • 当安装了CMA/XPMEM库时,sm共享内存BTL会使用Linux跨内存连接(CMA)或XPMEM技术。Linux CMA和XPMEM是Open MPI利用单拷贝语义实现共享内存的相似(但不同)机制。

  • OFI MTL不支持发送大于当前Libfabric提供商的max_msg_size参数设定的消息。如果您在使用OFI MTL时遇到关于发送消息过大的错误提示,请联系您的网络设备供应商,要求他们为带标签消息提供更大的max_msg_size支持。