我想翻译我的脚本以利用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个实例在第一个实例完成后立即启动。
如何获得所需的行为?
答案 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"