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

在SLURM中的大MPI作业之后运行一个顺序任务,mpi,sequential,slurm,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并行运行,然

我有一个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调用。

这两个选项在SLURM中可用

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

scontrol update job=$SLURM_JOBID NodeList=`hostname`
为了将作业大小缩小到一个节点

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

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

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

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

Slurm将只收缩到一个节点,而不是一个核心。@damienfrancois:如果不可能,那么答案可以更新为更明确的答案。你有参考资料吗?我曾经想解决同样的问题,所以我研究了代码,那部分只是关于节点,而不是CPU或内存。在一次SUG会议上,一名主要开发人员在F2F讨论中确认了这一点。我在新闻日志中没有看到任何变化