3.10. 网络支持
3.10.1. 主要网络支持模型
本版本提供了多种MPI网络模型:
ob1支持通过BTL("字节传输层")插件使用多种网络,这些插件可以相互组合使用:self: 回环(发送给自己)sm: 共享内存,包括单拷贝技术:XPMEM、Linux CMA、Linux KNEM,以及传统的拷贝输入/拷贝输出共享内存。tcp: 传输控制协议smcuda: 支持CUDA的共享内存usnic: 思科usNICugni: 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会按以下方式选择默认传输:
如果存在InfiniBand设备,请使用UCX PML。
如果PSM、PSM2或其他支持标签匹配的Libfabric传输设备可用(例如Cray uGNI),请使用
cmPML和单个适当的对应mtl模块。否则,使用
ob1PML和一个或多个合适的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支持是通过
openibBTL和ob1PML插件提供的。从Open MPI 4.0.0开始,通过openib插件提供的InfiniBand支持已被弃用,并由ucxPML组件取代。openibBTL在Open MPI v5.0.0中被移除。虽然
openibBTL依赖于libibverbs,但UCX PML依赖于UCX库。安装完成后,可以通过在Open MPI配置命令中添加
--with-ucx来构建支持UCX的Open MPI。一旦Open MPI配置为使用UCX,运行时如果检测到受支持的网络(例如InfiniBand),将自动选择ucxPML。可以通过在mpirun或oshrun命令行中指定以下任意或全部MCA参数来强制使用UCX:--mca pml ucx用于MPI点对点操作,--mca spml ucx用于OpenSHMEM支持,以及--mca osc ucx用于MPI RMA(单边)操作。usnicBTL支持在配备虚拟接口卡(VIC)的思科UCS服务器上使用思科usNIC设备("用户空间网卡")。虽然usNIC是通过OpenFabrics Libfabric API栈访问的,但此BTL专用于思科usNIC设备。uGNI是Cray公司开发的一个库,用于在Gemini和Aries互连架构上进行通信。
当
sm(共享内存)BTL编译时启用了knem支持(参见--with-knem配置选项),且运行内核中加载了knemLinux模块时,将使用Linuxknem支持功能。如果未加载knemLinux内核模块,在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支持。