运行 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。
我有一个使用批处理脚本启动的 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。