并行但不同的Slurm srun作业步骤调用不起作用

时间:2016-02-19 06:32:19

标签: slurm

我想在大量不同的输入文件上运行相同的程序。我可以将每个提交作为单独的Slurm提交,但我不想通过立即倾倒1000个作业来淹没队列。我一直试图弄清楚如何处理相同数量的文件,而不是首先创建一个分配,然后在该分配中使用srun循环遍历所有文件,从而为每个调用提供分配中的单个核心。问题在于,无论我做什么,一次只能运行一个工作步骤。我能提出的最简单的测试案例是:

#!/usr/bin/env bash

srun --exclusive --ntasks 1 -c 1 sleep 1 &
srun --exclusive --ntasks 1 -c 1 sleep 1 &
srun --exclusive --ntasks 1 -c 1 sleep 1 &
srun --exclusive --ntasks 1 -c 1 sleep 1 &

wait

分配分配的核心数量并不重要:

time salloc -n 1 test
time salloc -n 2 test
time salloc -n 4 test

它总是需要4秒。是否不可能并行执行多个作业步骤?

2 个答案:

答案 0 :(得分:3)

请注意,在这种情况下,您可以同时测量运行时间和等待时间。您的提交脚本应如下所示:

#!/usr/bin/env bash

time {
srun --exclusive --ntasks 1 -c 1 sleep 1 &
srun --exclusive --ntasks 1 -c 1 sleep 1 &
srun --exclusive --ntasks 1 -c 1 sleep 1 &
srun --exclusive --ntasks 1 -c 1 sleep 1 &
wait
}

只需提交

即可
salloc -n 1 test
salloc -n 2 test
salloc -n 4 test

然后,您应该在使用srun: Job step creation temporarily disabled, retrying时观察到差异以及n<4等消息。

答案 1 :(得分:3)

事实证明,每个cpu的默认内存未定义,因此即使单个核心作业也通过保留所有节点的RAM来运行。

设置DefMemPerCPU或指定显式RAM保留就可以了。