如何在Slurm中并行执行令人尴尬的事情?

时间:2019-10-20 22:02:15

标签: slurm

我想翻译我的脚本以利用Slurm的内存管理功能。具体来说,如果我运行以下bash脚本,则会耗尽内存:

#!/bin/bash

for x in 1 2 3; do
  for y in a b c; do
    run_program $x $y &
  done
done

这是因为run_program的每个实例占用大约30G,而我有大约250G可用。我想这样做,以便将run_program的每个实例添加到Slurm队列中,并请求30G内存。我想要的行为是让前8个实例运行(因为它们适合),第9个实例在第一个实例完成后立即启动。

如何获得所需的行为?

1 个答案:

答案 0 :(得分:1)

您可以使用GNU parallel命令轻松地做到这一点:

parallel sbatch --wrap \"run_program {1} {2}\" ::: {1..3} ::: {a..c}

它将提交9个这样的工作:

sbatch --wrap "run_program 1 a"
sbatch --wrap "run_program 1 b"
sbatch --wrap "run_program 1 c"
sbatch --wrap "run_program 2 a"
sbatch --wrap "run_program 2 b"
sbatch --wrap "run_program 2 c"
sbatch --wrap "run_program 3 a"
sbatch --wrap "run_program 3 b"
sbatch --wrap "run_program 3 c"