【问题标题】:Multiple tasks in the same node with SLURM使用 SLURM 在同一节点中执行多个任务
【发布时间】:2019-06-08 21:06:54
【问题描述】:

我很难理解如何使用 SLURM 在同一个节点中运行多个进程。

假设我想运行一个包含 100 个不同输入参数的程序。例如,我会在笔记本电脑上执行以下操作:

for i in `seq 100`; do
  ./program ${i}
done

现在我可以访问具有 24 核节点的集群。所以,我想同时在 5 个节点上运行 24 个程序实例(4 个节点上 24 个 + 第 5 个节点上 4 个)。

我认为提交脚本应该是这样的:

#!/bin/bash
#SBATCH -N 5
#SBATCH -n 100
#SBATCH --ntasks-per-node=24
for i in `seq 100`; do
  srun ./program ${i} &
done
wait

事实证明,使用这个提交脚本,./program 会针对每个 i 值运行多次,即使 srun 在每个循环中只调用一次。

发生了什么事?这样做的正确方法是什么?

【问题讨论】:

    标签: slurm


    【解决方案1】:

    默认情况下,srun 将在运行时使用完整分配,因此这里是完整的 100 个任务。告诉就是只用单核,需要运行

    srun --exclusive --ntasks 1 ...
    

    来自srun manpage

    启动多个作业步骤时也可以使用此选项 在现有资源分配中,您希望在其中单独 专用于每个作业步骤的处理器。如果有足够的处理器 无法启动作业步骤,它将被推迟。这个 可以被认为是提供一种资源管理机制 在其分配范围内的工作。

    【讨论】:

    • 谢谢达米安!我想我的误解来自于作业与作业步骤与任务以及节点与处理器与 CPU 之间的混淆。 --exclusive 选项是否使节点或处理器或 CPU 独占任务或作业或作业步骤?
    • 不,在这种情况下,它与那个含义无关。
    • 嗯.. 让我解释一下。如果我不将--exclusive 添加到命令中怎么办?像这样:srun --ntasks 1 ./program $i?
    【解决方案2】:

    添加--nodes 1 将消除警告。

    #!/bin/bash
    #SBATCH -N 5
    #SBATCH -n 100
    #SBATCH --ntasks-per-node=24
    for i in `seq 100`; do
      srun --exclusive --nodes 1 --ntasks 1 ./program ${i} &
    done
    wait
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      相关资源
      最近更新 更多