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

Cyc*_*one 5 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
Run Code Online (Sandbox Code Playgroud)

我分配多少核并不重要:

time salloc -n 1 test
time salloc -n 2 test
time salloc -n 4 test
Run Code Online (Sandbox Code Playgroud)

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

Cyc*_*one 9

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

设置 DefMemPerCPU 或指定显式 RAM 预留就可以解决问题。

  • 我有同样的问题。我用 srun 按顺序运行 3 个作业,但在第一个作业后它就卡住了。您能否分享一下您添加了哪些脚本来解决该问题?我用这个但仍然有错误。#SBATCH --mem=0 导出 DAEMON_MEM=${SLURM_MEM_PER_CPU:=4096} 导出 SPARK_MEM=$((${DAEMON_MEM}*(${SPARK_WORKER_CORES} -1))) (3认同)

dam*_*ois 5

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

#!/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
}
Run Code Online (Sandbox Code Playgroud)

并简单地提交

salloc -n 1 test
salloc -n 2 test
salloc -n 4 test
Run Code Online (Sandbox Code Playgroud)

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