Я пытаюсь понять, в чем разница между SLURM srun
и sbatch
командами. Я буду рад общему объяснению, а не конкретным ответам на следующие вопросы, но вот некоторые конкретные моменты путаницы, которые могут стать отправной точкой и дать представление о том, что я ищу.
Согласно документации , он srun
предназначен для отправки заданий и sbatch
предназначен для отправки заданий для последующего выполнения, но практическая разница мне не ясна, и их поведение кажется одинаковым. Например, у меня есть кластер с 2 узлами, каждый с 2 процессорами. Если я выполню srun testjob.sh &
5 раз подряд, пятое задание будет аккуратно поставлено в очередь до тех пор, пока процессор не станет доступным, как и выполнение sbatch testjob.sh
.
Чтобы сделать вопрос более конкретным, я думаю, что хорошее место для начала может быть: какие вещи, которые я могу сделать с одним, я не могу сделать с другим, и почему?
Многие аргументы обеих команд одинаковы. Те , которые кажутся наиболее важными являются --ntasks
, --nodes
, --cpus-per-task
, --ntasks-per-node
. Как они связаны друг с другом и чем отличаются для srun
vs sbatch
?
Одно конкретное отличие заключается в том, что srun
это вызовет ошибку, если у testjob.sh
него нет разрешения на выполнение, то есть chmod +x testjob.sh
тогда, sbatch
когда он с радостью запустит его. Что происходит «под капотом», из-за чего это происходит?
В документации также упоминается, что srun
обычно используется внутри sbatch
скриптов. Это приводит к вопросу: как они взаимодействуют друг с другом и каков «канонический» вариант использования для каждого из них? В частности, я бы когда-нибудь использовал srun
сам по себе?
srun
в сценарий отправки? Возможно, я не понимаю, что означает «этап работы». Например, если у меня есть сценарий с именем,runjob.sh
который содержит#!/bin/bash srun myjob.sh
, есть ли практическая разница между вызовом (a)sbatch runjob.sh
vs (b)sbatch myjob.sh
vs (c)srun myjob.sh
vs (d)srun runjob.sh
? (Очевидно, последнее глупо, но мне любопытно).