失败的 macOS 与 Linux 间的 OpenMPI 通信

最近上的 高性能计算导论 课中有一个实验要求同学们用自己电脑组 MPI 集群进行并行运算。使用 macOS 的同学不多,使用 Linux 或者 WSL 的同学数量尚可,本着都是类 UNIX 系统、方便操作的想法,我尝试跟与使用 Linux 的同学组集群,但是最终失败了。

先说结论,如果不是同系统同 OpenMPI 版本,组 OpenMPI 集群相当麻烦,我是很不建议的。如果非要组,还是用 Docker 吧。

OpenMPI 对于两机器的要求有很多

  1. 最好是同 OpenMPI 版本
  2. 最好是同 OpenMPI 安装路径
  3. 最好是同 PMIx 编译配置
  4. 可能还有更多

事实上,这三个坑我都踩过,不过第一个问题和第二个问题的解决重叠了。OpenMPI 不会按照环境变量执行内部程序,会按照 master 的安装路径去让 slave 执行内部程序,因此需要两主机都用相同的安装路径。我在 macOS 上的安装路径在 /opt/homebrew/... 下,Linux 则在 /usr/local/ 下,不匹配,所以会报找不到 prted 程序的错误。所以,最好的方法就是,自己编译最新版 OpenMPI。我在 Linux 上设置安装前缀同 macOS homebrew 安装的前缀,遂解决。

然而,问题不断,就算安装路径相同、版本相同,也会因为 PMIx 的细微差异导致无法通信,我遇到的是 PMIX ERROR: PMIX_ERROR in file base/plm_base_launch_support.c at line 1540。因为着实不想再在 macOS 上自己编译程序,所以我最后放弃了,没有结果。