mpi - SLURM:如何在一台 PE 崩溃时禁用自 Action 业清理

标签 mpi openmpi slurm

我使用 SLURM 启动器 srun 分发基于 OpenMPI 的应用程序。当一个进程崩溃时,我想在其他 PE 中检测到这一情况并执行一些操作。我知道 OpenMPI 没有容错功能,但我仍然需要在其他 PE 中执行正常退出。

为此,每个 PE 都必须能够:

  1. 在另一个 PE 崩溃的情况下继续运行。
  2. 检测其中一个 PE 是否崩溃。

目前我正在专注于第一个任务。根据手册,srun has --no-kill flag 。但是,它似乎对我不起作用。我看到以下日志消息:

srun: error: node0: task 0: Aborted    // this is where I crash the PE deliberately
slurmstepd: error: node0: [0] pmixp_client_v2.c:210 [_errhandler] mpi/pmix: ERROR: Error handler invoked: status = -25: Interrupted system call (4)
srun: Jb step aborted: Waiting up to 32 seconds for job step to finish.
slurmstepd: error: ***STEP 12123.0 ON node0 CANCELLED AT 2020-12-02 ***
srun: error: node0: task 1: Killed    // WHY?!

为什么会发生这种情况?是否有任何其他相关标志或环境变量,或任何可能有帮助的配置选项?

要重现该问题,可以使用以下程序(为了简洁起见,它使用 Boost.MPI,但不使用 Boost 也具有相同的效果):

#include <boost/mpi.hpp>

int main() {
  using namespace boost::mpi;
  environment env;
  communicator comm;
  comm.barrier();
  if (comm.rank() == 0) {
    throw 0;
  }
  while (true) {}
}

最佳答案

根据您链接的文档,--no-kill 标志仅影响节点故障时的行为。

在您的情况下,您应该使用 --kill-on-bad-exit=0 选项,该选项将防止其余任务在其中一个任务以非 - 退出时被终止。零退出代码。

关于mpi - SLURM:如何在一台 PE 崩溃时禁用自 Action 业清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65105301/

相关文章:

c++ - 多次调用MPI_Bcast是不是错了?

python - mpi4py Reduce() 中可能的缓冲区大小限制

slurm - 访问 slurm 停止工作的原因

mpi - Hydra MPI的最佳进步是什么

c++ - mpicxx : Incompatible library version

c++ - 通过 MPI 发送 Lambda 闭包

mpi - Kubernetes 和 MPI

centos - slurm systemd 等待 nfs 挂载所有文件夹

Slurm - 访问已完成作业的 stdout/stderr 位置

c++ - 在多个主机之间分配进程时,打开 MPI 程序不起作用