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

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

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

2 ответов


в документации написано

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

пока

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

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

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

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

что некоторые вещи, которые я могу сделать с одним, что я не могу сделать с другим, и почему?

функция, которая доступна к sbatch, а не srun и работа arrrays. As srun может использоваться в sbatch скрипт, нет ничего, что вы не можете сделать с sbatch.

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

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

что происходит "под капотом", что вызывает это кейс?

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

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

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

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

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


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


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

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

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

есть относительно новая веб-страница, которая более подробно касается-B и --exclusive опций.

doc/html / cpu_management.штмл


дополнительную информацию SLURM FAQ страница.

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

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