我有一个通常在slurm下运行的代码。类似的东西
if ! lengthy_command then echo "Error occured" fi
出于会计目的,我想搬到 srun 基于命令的启动:
srun
if ! srun <srun params> lengthy_command then echo "Error occured" fi
但是在更改了该行之后,脚本将不再在交互会话中运行(在slurm之外)。是否有任何方法来概括脚本,以便它可以在这两种情况下运行?我看不到里面的任何东西 SRun 指向那个方向的文档。
SRun
一个选项是使用变量并将其设置为 srun 在工作中时(例如 $SLURM_JOBID 设置),否则将其保留为空。
$SLURM_JOBID
if [ -n $SLURM_JOBID ] ; then LAUNCH=srun <srun params> else LAUNCH= fi if ! $LAUNCH lengthy_command then echo "Error occured" fi
这种方法可以通过设置 LAUNCH 到 parallel <parallel options> 当使用GNU Parallel时,或者在使用另一个调度程序的集群中运行时使用其他命令。
LAUNCH
parallel <parallel options>
另一个选项是创建一个名为 SRun 封装逻辑(未测试的):
srun() { if [ -n $SLURM_JOBID ] ; then command srun $@ else $@ fi }