Подтвердить что ты не робот

SLURM `srun` vs` sbatch` и их параметры

Я пытаюсь понять, какая разница между SLURM srun и sbatch. Я буду доволен общим объяснением, а не конкретными ответами на следующие вопросы, но вот некоторые конкретные моменты путаницы, которые могут быть отправной точкой и дать представление о том, что я ищу.

Согласно документации , srun предназначен для отправки заданий, а sbatch - для отправки заданий для последующего исполнения, но разница неясна для меня, и их поведение, похоже, одинаково. Например, у меня есть кластер с двумя узлами, каждый с двумя процессорами. Если я выполню srun testjob.sh & 5x подряд, он будет стоять в очереди на пятое задание до тех пор, пока процессор не станет доступен, как будет выполняться 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 самостоятельно?

4b9b3361

Ответ 1

В документации указано

srun is used to submit a job for execution in real time

while

sbatch is used to submit a job script for later execution.

Оба они принимают практически одинаковый набор параметров. Основное отличие состоит в том, что srun является интерактивным и блокирующим (вы получаете результат в своем терминале, и вы не можете писать другие команды до его завершения), а sbatch - пакетная обработка и неблокирование (результаты записываются в файл и вы можете сразу отправить другие команды).

Если вы используете srun в фоновом режиме с знаком &, вы удаляете функцию блокировки srun, которая становится интерактивной, но не блокирующей. Он по-прежнему является интерактивным, что означает, что выход будет загромождать ваш терминал, а процессы srun связаны с вашим терминалом. Если вы отключитесь, вы потеряете контроль над ними, или они могут быть убиты (в зависимости от того, используют ли они stdout или нет в основном). И они будут убиты, если машина, к которой вы подключаетесь для отправки заданий, перезагружается.

Если вы используете sbatch, вы отправляете свою работу, и она обрабатывается Slurm; вы можете отключить, убить терминал и т.д. без каких-либо последствий. Ваша работа больше не связана с текущим процессом.

Что я могу сделать с тем, что я не могу сделать с другим, и почему?

Функция, доступная для sbatch, а не srun, - это задания. Поскольку srun может использоваться в sbatch script, вы ничего не можете сделать с sbatch.

Как они связаны друг с другом и как они отличаются для srun vs sbatch?

Все параметры --ntasks, --nodes, --cpus-per-task, --ntasks-per-node имеют одинаковое значение в обеих командах. Это верно для почти всех параметров, за исключением --exclusive.

Что происходит "под капотом", что приводит к тому, что это так?

srun немедленно запускает script на удаленном хосте, а sbatch копирует script во внутреннюю память, а затем загружает его в вычисление node при запуске задания. Вы можете проверить это, изменив ваше представление script после его отправки; изменения не будут приняты во внимание (см. this).

Как они взаимодействуют друг с другом, и какова "каноническая" усекаса для каждого из них?

Вы обычно используете sbatch для отправки задания и srun в представлении script для создания шагов задания, которые называет Slurm. srun используется для запуска процессов. Если ваша программа является параллельной программой MPI, srun заботится о создании всех процессов MPI. Если нет, srun будет запускать вашу программу столько раз, сколько задано опцией --ntasks. Существует много вариантов использования в зависимости от того, является ли ваша программа параллельной или нет, имеет длительное время или нет, состоит из одного исполняемого файла или нет и т.д. Если не указано иное, srun наследует по умолчанию соответствующие параметры sbatch или salloc, с которым он работает (от здесь).

В частности, могу ли я когда-либо использовать srun?

Кроме небольших тестов, нет. Обычно используется srun --pty bash, чтобы получить оболочку на задании вычисления.

Ответ 2

На самом деле это не полностью отвечает на вопрос, но вот еще одна информация, которую я нашел, может быть полезной для кого-то в будущем:


Из связанный поток, который я нашел с похожим вопросом:

Вкратце, sbatch и salloc выделяют ресурсы для задания, в то время как srun запускает параллельные задачи в этих ресурсах. При вызове в распределении задания srun запускает параллельные задачи для некоторых или всех выделенных ресурсов. В этом случае srun наследует по умолчанию соответствующие параметры sbatch или salloc, в которых он работает. Затем вы можете (обычно) предоставлять srun различные параметры, которые будут переопределять то, что он получает по умолчанию. Каждый вызов srun в задании известен как шаг задания.

srun также может быть выведен за пределы распределения заданий. В этом случае srun запрашивает ресурсы, и когда эти ресурсы предоставляются, запускает задачи по этим ресурсам как одно задание и шаг задания.

Существует относительно новая веб-страница, в которой более подробно рассматриваются варианты -B и -exclusive.

DOC/HTML/cpu_management.shtml


Дополнительная информация с Страница SLURM FAQ.

Команда srun имеет два разных режима работы. Во-первых, если не выполняться в рамках существующего задания (т.е. Не в распределении задания Slurm, созданного salloc или sbatch), тогда он создаст распределение заданий и вызовет приложение. Если выполняется в существующем распределении, команда srun только запускает приложение. По этому вопросу мы рассмотрим только первый режим работы и сравним создание распределения заданий с помощью команд sbatch и srun.

Команда srun предназначена для интерактивного использования, а кто-то контролирует вывод. Вывод приложения рассматривается как вывод команды srun, как правило, на пользовательский терминал. Команда sbatch предназначена для отправки script для последующего исполнения, а ее вывод записывается в файл. Параметры команды, используемые в распределении задания, почти идентичны. Наиболее заметная разница в настройках заключается в том, что команда sbatch поддерживает концепцию рабочих массивов, а srun - нет. Другое существенное различие заключается в отказоустойчивости. Неудачи, связанные с заданиями sbatch, обычно приводят к тому, что задание запрашивается и выполняется снова, в то время как сбои, связанные с srun, обычно приводят к появлению сообщения об ошибке с ожиданием того, что пользователь будет отвечать соответствующим образом.