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, обычно приводят к сообщение об ошибке генерируется с ожиданием, что пользователь ответит соответствующим образом.