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