最佳答案
我试图理解 SLURM 的 srun
和 sbatch
命令之间的区别。我很乐意给出一个一般性的解释,而不是对以下问题的具体回答,但这里有一些具体的困惑点,可以作为一个起点,并给出一个想法,我在寻找什么。
根据 文件,srun
是用来提交作业的,而 sbatch
是用来提交作业以供以后执行的,但是我不清楚实际的区别,而且它们的行为似乎是一样的。例如,我有一个有2个节点的集群,每个节点有2个 CPU。如果我在一行中执行 srun testjob.sh &
5x,它将很好地将第五个作业排队,直到有一个 CPU 可用,执行 sbatch testjob.sh
也是如此。
为了使问题更具体,我认为一个好的开始可能是: 有什么事情是我可以用一个来做但是不能用另一个来做的,为什么?
两个命令的许多参数是相同的。看起来最相关的是 --ntasks
,--nodes
,--cpus-per-task
,--ntasks-per-node
。这些是如何相互关联的,它们在 ABC4和 sbatch
之间有什么不同?
一个特别的区别是,如果 testjob.sh
没有可执行权限,即 chmod +x testjob.sh
,而 sbatch
将愉快地运行它,那么 srun
将导致错误。“引擎盖下”发生了什么导致了这种情况?
文档还提到,srun
通常在 sbatch
脚本内使用