我试图了解SLURMsrun和sbatch命令之间的区别。我将对一般性的解释感到满意,而不是对以下问题的具体答案感到满意,但是这里有一些具体的混淆点,可以作为起点并给出我所寻找的想法。
根据文档,srun用于提交作业,并且sbatch用于提交作业以供以后执行,但是实际区别对我来说尚不清楚,并且它们的行为似乎相同。例如,我有一个包含2个节点的群集,每个节点具有2个CPU。如果我srun testjob.sh &连续执行5次,它将很好地将第五个作业排队,直到CPU可用为止sbatch testjob.sh。
为了使问题更具体,我认为一个不错的起点是:我可以对某项做些什么而对另一项做不到,为什么?
这两个命令的许多参数都是相同的。似乎最相关的那些是--ntasks,--nodes,--cpus-per-task,--ntasks-per-node。它们之间如何相互关联,以及它们与srunvssbatch有何不同?
一个特别不同的是,srun如果将导致错误testjob.sh没有执行权限,即chmod +x testjob.sh而sbatch会开心地运行它。导致这种情况的“幕后”发生了什么?
该文档还提到srun了sbatch脚本内部常用的内容。这就引出了一个问题:它们之间如何相互作用,以及它们之间的“规范”用例是什么?具体来说,我会独自使用srun吗?
srun提交脚本内部?也许我对“工作步骤”的含义感到困惑。例如,如果我有一个名为runjob.shcontains的脚本#!/bin/bash srun myjob.sh,那么调用(a)sbatch runjob.shvs(b)sbatch myjob.shvs(c)srun myjob.shvs(d)之间有实际区别srun runjob.sh吗?(很明显,最后一个很傻,但是我很好奇)。