【问题标题】:job submission issues with the Slurm Workload ManagerSlurm 工作负载管理器的作业提交问题
【发布时间】:2021-06-08 22:39:41
【问题描述】:

我正在使用一个有 20 个节点的计算机集群,每个节点有 16 个 CPU。我尝试使用命令“sbatch XX.sbatch”向所有节点提交 1000 个作业。我想要的是同时运行 320 个作业,即每个节点 16 个作业,或每个 CPU 1 个作业。

当我使用 . sbatch 文件中的参数是 XX sbatch 文件是

#!/bin/bash
# Interpreter declaration
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 1
#SBATCH -J job_XX

./example.sh

我注意到每个节点上只运行 1 个作业。

然后我尝试了

#!/bin/bash
# Interpreter declaration
#SBATCH -N 20
#SBATCH -n 1
#SBATCH -c 1
#SBATCH -J job_XX

./example.sh

我注意到只有 1 个作业在 20 个节点中运行,即每 20 个节点有 1 个作业。

然后我尝试了

#!/bin/bash
# Interpreter declaration
#SBATCH -N 20
#SBATCH -n 320
#SBATCH -c 1
#SBATCH --ntasks-per-node=16
#SBATCH -J job_XX

./example.sh

仍然有 1 个作业正在使用所有 20 个节点。

有人知道怎么解决吗?谢谢。

【问题讨论】:

    标签: slurm sbatch


    【解决方案1】:

    好吧,如果您想要多份工作,您需要提交多份工作。如果您只调用一次sbatch XX.sbatch,则只会创建一个作业(不太正确,请参见下文)。

    如果您想创建 1000 个作业,您可以直接创建一个 for 循环来提交 1000 个作业:

    for i in {1..1000}
        do sbatch XX.sbatch
    done
    

    这将创建 1000 个具有 1 个核心的作业(如果我们以您的第一个作业脚本为例),它们将填满所有可用的 320 个作业槽。 但是: 在这样的 for 循环中调用 sbatch 对调度程序来说并不好。有一种更好的方法可以提交许多类似的工作:Job Arrays

    它们一次提交一个作业脚本任意次数。在作业脚本中,您可以使用环境变量(例如 $SLURM_ARRAY_TASK_ID)来控制您的脚本,使它们的功能完全相同。

    以你的第一个作业脚本为例:

    #!/bin/bash
    # Interpreter declaration
    #SBATCH -N 1
    #SBATCH -n 1
    #SBATCH -c 1
    #SBATCH -J job_XX
    #SBATCH --array=0-1000
    
    #Do something with the env vars e.g. use them as parameters for your script
    ./example.sh $SLURM_ARRAY_TASK_ID
    

    使用sbatch XX.sbatch 提交时,会同时创建 1000 个作业,每个作业使用一个内核,因此会填满所有可用的 320 个内核。

    【讨论】:

      猜你喜欢
      • 2011-08-28
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 2019-11-24
      相关资源
      最近更新 更多