Как запустить что-то смущающе параллельное в Slurm? - PullRequest
1 голос
/ 21 октября 2019

Я хочу перевести мой сценарий, чтобы воспользоваться преимуществами управления памятью 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 Ответ

1 голос
/ 23 октября 2019

Вы можете использовать команду 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"
...