代码之家  ›  专栏  ›  技术社区  ›  Poshi

在Slurm外使用srun

  •  2
  • Poshi  · 技术社区  · 5 年前

    我有一个通常在slurm下运行的代码。类似的东西

    if ! lengthy_command
    then
        echo "Error occured"
    fi
    

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

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

    但是在更改了该行之后,脚本将不再在交互会话中运行(在slurm之外)。是否有任何方法来概括脚本,以便它可以在这两种情况下运行?我看不到里面的任何东西 SRun 指向那个方向的文档。

    1 回复  |  直到 5 年前
        1
  •  1
  •   damienfrancois    5 年前

    一个选项是使用变量并将其设置为 srun 在工作中时(例如 $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时,或者在使用另一个调度程序的集群中运行时使用其他命令。

    另一个选项是创建一个名为 SRun 封装逻辑(未测试的):

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