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

时间:2017-09-10 08:25:32

标签: mpi sequential 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.)使用MPI并行运行,但是,第二步(2.)我需要做的只需要一个任务,其余的任务应该被释放,这样我就不会占用它们或者花费无用的CPU时间。

是否可以例如:

a)释放除一个任务以外的所有任务,并在一个CPU上运行最后一步?

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

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

1 个答案:

答案 0 :(得分:1)

这两个选项适用于SLURM

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

scontrol update job=$SLURM_JOBID NodeList=`hostname`

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

  

我不知道是否以及如何将工作缩减到一个核心。

2)另一个选择是提交两个作业,后期处理工作取决于MPI工作:

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

非平凡(这不是火箭科学)部分是自动检索第一份工作的jobid。