我想在大量不同的输入文件上运行相同的程序。我可以将它们作为单独的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秒钟。不可能同时执行多个作业步骤?

最佳答案

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

#!/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之类的消息。

09-25 21:14