首页 > 解决方案 > 为什么 mpirun 与 slurm 一起使用时的行为会如此?

问题描述

我正在使用 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,以及它在第二个“案例”中谈到的不一致任务计数是什么?

标签: mpiopenmpislurmintel-mpi

解决方案


推荐阅读