Я намагаюся зрозуміти, в чому різниця між SLURM srun
і sbatch
командами. Я буду радий загальним поясненням, а не конкретним відповідям на наступні запитання, але тут є деякі конкретні моменти плутанини, які можуть стати відправною точкою та дати уявлення про те, що я шукаю.
Згідно з документацією , srun
це для подання робочих місць і sbatch
для подання робочих місць для подальшого виконання, але практична різниця для мене незрозуміла, і їх поведінка, схоже, однакова. Наприклад, у мене є кластер з 2 вузлами, кожен з 2 процесорами. Якщо я виконую srun testjob.sh &
5 разів поспіль, це приємно поставить у чергу п'яте завдання, поки не стане доступним центральний процесор, як і виконання sbatch testjob.sh
.
Для того, щоб зробити питання більш конкретним, я вважаю, що гарним місцем для початку може бути: які речі я можу зробити з одним, а я не можу з іншим, і чому?
Багато аргументів обох команд однакові. Ті , які здаються найбільш важливими є --ntasks
, --nodes
, --cpus-per-task
, --ntasks-per-node
. Як вони пов'язані один з одним, і як вони відрізняються по srun
порівнянні 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
? (Очевидно, останній дурний, але мені цікаво).