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