我正在使用 Intel MPI,并且mpirun
在与 slurm 结合使用时遇到了一些令人困惑的行为。
如果我运行(在登录节点中)
mpirun -n 2 python -c "from mpi4py import MPI; print(MPI.COMM_WORLD.Get_rank())"
然后我得到预期的 0 和 1 作为输出打印出来。
但是,如果我从交互式计算节点salloc --time=30 --nodes=1
运行相同mpirun
的程序,我会打印出两个 0,而不是预期的 0 和 1。
然后,如果我更改-n 2
为-n 3
(仍在计算节点中),我会从 slurm 中得到一个很大的错误srun: error: PMK_KVS_Barrier task count inconsistent (2 != 1)
(加上一堆其他的东西),但我也不知道如何解释这个......
现在,基于这个 OpenMPI 页面,似乎至少 OpenMPI 应该支持这些操作:
具体来说,您可以在交互式 SLURM 分配中启动 Open MPI 的 mpirun(通过 salloc 命令),或者您可以向 SLURM 提交脚本(通过 sbatch 命令),或者您可以通过 srun“直接”启动 MPI 可执行文件。
也许我使用的英特尔 MPI 实现没有相同的支持,并且没有设计为直接在 slurm 环境中使用(?),但我仍然想知道:这个mpirun
和 slurm(salloc
)的底层性质是什么行为产生了吗?为什么它会在第一个“案例”中打印两个 0,以及它在第二个“案例”中谈到的不一致任务计数是什么?