Я намагаюся зрозуміти, в чому різниця між 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.shvs (b)sbatch myjob.shvs (c)srun myjob.shvs (d)srun runjob.sh? (Очевидно, останній дурний, але мені цікаво).