运行 SLURM 中大型 MPI 作业后的一个顺序任务

Run one sequential task after big MPI job in SLURM

我有一个使用批处理脚本启动的 slurm 作业,比如:

#! /bin/bash -l

#SBATCH --job-name=job1
#SBATCH -o stdout.log
#SBATCH -e stderr.log
#SBATCH --ntasks=160

cd $WORK/job1

mpirun ./mympitask # 1.)

./collect_results  # 2.) long-running sequential task.

第一步 (1.) 运行s 并行使用 MPI,但是,第二步 (2.) 我需要做的只需要一个任务,其余任务应该被释放所以我不占用它们或花费无用的 CPU 时间。

是否可以,例如:

a) 释放所有任务,除了一个任务,运行 一个任务的最后一步 CPU?

b) 指定在 sbatch 作业完成后应该 运行 的命令?

我正在考虑在最后一步使用 salloc 调用。

这两个选项可用于 SLURM

1) 在运行顺序post处理任务之前,可以

scontrol update job=$SLURM_JOBID NodeList=`hostname`

为了将作业大小缩小到一个节点

I do not know if and how to shrink the job to one core.

2) 另一种选择是提交两个作业,post 处理作业依赖于 MPI 作业:

sbatch mpijob.slurm
sbatch -d afterok:<mpijob SLURM jobid> postprocessing.slurm

重要的(虽然这不是火箭科学)部分是自动检索第一份工作的 jobid。