在 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
}
我有一个代码通常在 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
}