在SLURM外部使用srun

时间:2019-01-15 11:58:32

标签: bash slurm

我有一个通常在SLURM下运行的代码。像

if ! lengthy_command
then
    echo "Error occured"
fi

出于会计目的,我想转到基于srun的命令启动:

if ! srun <srun params> lengthy_command
then
    echo "Error occured"
fi

但是更改该行之后,该脚本将不再在交互式会话中运行(在SLURM之外)。有什么办法可以概括脚本,使其可以在两种情况下运行?我在srun文档中看不到指向该方向的任何内容。

1 个答案:

答案 0 :(得分:1)

一种选择是使用变量并将其设置为srun(例如,在设置$SLURM_JOBID时),否则将其保留为空。

if [ -n $SLURM_JOBID ] ;  
then 
LAUNCH=srun <srun params>
else
LAUNCH=
fi

if ! $LAUNCH lengthy_command
then
    echo "Error occured"
fi

可以通过在使用GNU并行时将LAUNCH设置为parallel <parallel options>或在具有其他调度程序的集群中运行时将其设置为其他命令来扩展此方法。

另一种选择是创建一个名为srun的Bash函数,该函数封装了逻辑(未经测试):

srun() {
if [ -n $SLURM_JOBID ] ;  
then 
command srun $@
else
$@
fi
}