【发布时间】:2018-07-12 07:54:48
【问题描述】:
我最近在看this post 关于mpirun 与mpiexec 和this post 关于srun 与sbatch,但我想知道mpirun 与slurm 和srun 的关系。
通常在我看到的示例中,发送到sbatch 的文件中包含srun <program> 以执行MPI 程序,但我有时会看到使用mpirun 或mpiexec 的文件。但是,我不明白为什么要这样做。如another question I recently asked 中的示例,似乎使用mpirun 或mpiexec 可能会产生各种(依赖于实现?)错误,没有理由不使用srun。
这是准确的,还是有充分的理由让您在 slurm 管理的集群上执行程序时要使用 mpirun 或 mpiexec 而不是 srun?
【问题讨论】:
-
mpirun在每个节点上启动代理,然后启动 MPI 任务。另一方面(例如,资源管理器不直接知道 MPI 任务)。srun直接启动 MPI 任务,但这需要来自SLURM的一些支持(PMI或PMIx)。 -
@GillesGouaillardet 所以你会使用
mpirun来获得一个节点的(可能是16个)核心的并行化?srun的想法不是能够跨节点和在它们内部创建多个进程吗? -
从高层次上看,结果是一样的。
srun(又名直接启动)使用资源管理器进行“连接”(例如初始化并行作业),而mpirun使用自己的代理。