Запустите несколько заданий из родительского задания - PullRequest
1 голос
/ 25 мая 2020

Я хотел бы запустить задание, которое запускает 3 задания, чтобы они могли выполняться одновременно. Это мой сценарий:

#!/bin/sh
#SBATCH -N 1
#SBATCH -n 3
#SBATCH -c 1
#SBATCH -t 00:10:00

# Job 1:
srun -n 10 -c 1 -t 3:00:00 python program.py sample1.bam -output_dir1

# Job 2:
srun -n 10 -c 1 -t 3:00:00 python program.py sample2.bam -output_dir2

# Job 3:
srun -n 10 -c 1 -t 3:00:00 python program.py sample3.bam sample3normal.bam -output_dir3

Проблема в том, что весь сценарий работает как обычный сценарий, поэтому он не запускает задание для каждой команды «srun». Итак, пока не завершится первая команда, следующая не запустится.

Как я могу получить это, когда я запускаю это задание, оно запускает три задания, чтобы они могли выполняться одновременно?

1 Ответ

1 голос
/ 28 мая 2020

Если вы хотите отправить одно задание, которое само отправляет три других задания, то, как отмечает @ Maarten-vd-Sande, вы можете заменить вызовы srun на sbatch:

sbatch -n 10 -c 1 -t 3:00:00 --wrap "python program.py sample1.bam -output_dir1"

Это представит три задания, независимых друг от друга. Основная работа сразу прекратится. Но в этом случае не имеет смысла запрашивать -n 3 для такого простого задания.

Если вы хотите отправить задание, которое запускает три задачи , вы должны сделать следующее:

#!/bin/sh
#SBATCH -N 1
#SBATCH -n 30
#SBATCH -c 1
#SBATCH -t 03:10:00

# Job 1:
srun -n 10 -c 1 -t 3:00:00 python program.py sample1.bam -output_dir1 &

# Job 2:
srun -n 10 -c 1 -t 3:00:00 python program.py sample2.bam -output_dir2 &

# Job 3:
srun -n 10 -c 1 -t 3:00:00 python program.py sample3.bam sample3normal.bam -output_dir3 &

wait

Но тогда нет смысла иметь ограничение по времени в 10 минут в скрипте отправки и ограничение в 3 часа в задачах. Также общее количество задач (n-), запрошенных srun, должно совпадать с общим количеством задач, запрошенных в основном сценарии отправки. Отсюда адаптированный сценарий выше.

...