为什么mpirun在与slurm一起使用时表现得如此?

为什么mpirun在与slurm一起使用时表现得如此?,mpi,openmpi,slurm,intel-mpi,Mpi,Openmpi,Slurm,Intel Mpi,我正在使用英特尔MPI,在将mpirun与slurm结合使用时遇到一些令人困惑的行为 如果我运行(在登录节点中) 然后我得到预期的输出0和1 但是,如果我salloc--time=30--nodes=1并从交互式计算节点运行相同的mpirun,我会打印出两个0,而不是预期的0和1 然后,如果我将-n2更改为-n3(仍在计算节点中),我会从slurm中得到一个很大的错误,它说srun:error:PMK\u KVS\u Barrier task count inconsistent(2!=1)(加

我正在使用英特尔MPI,在将
mpirun
与slurm结合使用时遇到一些令人困惑的行为

如果我运行(在登录节点中)

然后我得到预期的输出0和1

但是,如果我
salloc--time=30--nodes=1
并从交互式计算节点运行相同的
mpirun
,我会打印出两个0,而不是预期的0和1

然后,如果我将
-n2
更改为
-n3
(仍在计算节点中),我会从slurm中得到一个很大的错误,它说
srun:error:PMK\u KVS\u Barrier task count inconsistent(2!=1)
(加上一堆其他东西),但我也不确定如何解释这一点

现在,基于,似乎至少OpenMPI应该支持此类操作:

具体来说,您可以在交互式SLURM分配中启动Open MPI的mpirun(通过salloc命令),也可以向SLURM提交脚本(通过sbatch命令),或者通过srun“直接”启动MPI可执行文件


也许我使用的英特尔MPI实现没有相同的支持,也不是设计用于slurm环境(?),但我仍然想知道:
mpirun
和slurm(
salloc
)的基本性质是什么,这就是产生的行为?为什么它会在第一个“案例”中打印两个0,而在第二个“案例”中它谈论的不一致的任务计数是什么?

实际上,会产生各种各样的错误。。。在
salloc
中更改为
--nodes=2
并运行
mpirun
会从英特尔MPI产生
错误终止
,使用
mpiexec
而不是
mpirun
会产生
srun:error:PMK\u KVS\u Barrier来自任务0的重复请求,列表可能还会继续。我只是不明白应该如何使用
mpirun
/slurm吗?注意IntelMPI基于MPICH(而不是Open-MPI)@GillesGouaillardet我听说OpenMPI被描述为一个“与MPICH兼容的库”,所以我希望它的行为大部分是相似的?Open-MPI和MPICH都实现相同的MPI标准。这只意味着可以在不更改所选库的情况下构建相同的代码。这就是说,没有二进制兼容性,您不能将一个实现的
mpirun
与另一个实现的库混合使用。@GillesGouaillardet是的,这是有道理的-这就是为什么我说可能Intel MPI没有相同的支持。我仍然想知道如何解释这些输出。
mpirun -n 2 python -c "from mpi4py import MPI; print(MPI.COMM_WORLD.Get_rank())"