在 SLURM 之外使用 srun

Using srun outside SLURM

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

if ! lengthy_command
then
    echo "Error occured"
fi

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

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

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

一个选项是在工作中使用变量并将其设置为 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 parallel 时,可以通过将 LAUNCH 设置为 parallel <parallel options> 来扩展此方法,或者当 运行 在具有另一个调度程序的集群中时设置为其他命令。

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

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