我想在大量不同的输入文件上运行相同的程序。我可以将它们作为单独的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
之类的消息。