mpirun 在 slurm 管理的集群上有什么用例吗?

Gra*_*ale 5 mpi slurm

我最近在看这篇关于vs的文章和这篇关于vs的文章,但我想知道与 slurm 和.mpirunmpiexecsrunsbatchmpirunsrun

通常在我看到的示例中,文件被发送到其中sbatchsrun <program>执行 MPI 程序,但我有时会看到使用mpirunmpiexec代替的文件。然而,我不明白为什么有人要这样做。正如我最近问的另一个问题所示,它似乎使用mpirunmpiexec可能产生各种(依赖于实现?)的错误,并且没有理由不使用srun.

这是否准确,或者您是否有充分的理由想要使用mpirunmpiexec而不是srun在 slurm 管理的集群上执行程序?

Gil*_*les 6

这个问题很大程度上取决于您正在使用的 MPI 的风格及其与 SLURM 的集成。

对于我自己来说,我完全理解这是个人喜好的问题,我想说的是,由于不得不与众多不同的集群和环境打交道,我会尝试尽可能地减少可变性的跨度。因此,如果 SLURM 在我运行的集群上可用,我将尝试通过 SLURM 和 sbatch 对我的代码进行所有运行时调整,并让 MPI 继承它们。

为此,我将定义我想要的内容以及如何通过提交参数提交 MPI 代码#SBATCH:节点数、每个进程的核心数、每个节点的进程数等。然后,MPI 启动将有望是通过 mpirun、mpiexec 或 MPI 库提供的类似命令尽可能简单。例如,大多数(如果不是全部)最近的 MPI 库可以直接检测到作业已在 SLURM 内提交,并继承 SLURM 的流程放置,而无需任何额外的工作。通常,例如,对于 Intel MPI,我确实使用mpirun -bootstrap slurm <mycode>并且所有进程都按预期放置。事实上,这个-bootstrap slurm选项可能根本没有必要,但我保留它以防万一。

相反,srun在库的mpirun或上使用mpiexec,将要求 MPI 代码已与 SLURM 的流程管理库链接。情况可能是这样,也可能不是,所以这可能会也可能不会达到您想要的效果。但更重要的是,即使它确实有效,与仅使用 MPI 默认启动器相比,它也不会给您带来任何额外的优势,因为流程管理已经由 SLURM 在通过sbatch. 因此,对我来说,除了极少数情况下的快速和脏测试之外,每当使用 SLURM 进行批量调度时,srun都不会使用,而是使用 MPImpirunmpiexec默认命令。