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