我正在尝试理解SLURM的
根据文档,
为了让问题更具体,我认为一个好的开始是:使用其中一个命令可以做些什么,而使用另一个命令则不能,并且为什么? 这两个命令的许多参数都是相同的。看起来最相关的是
srun
和sbatch
命令之间的区别。我希望得到一般性的解释,而不是针对以下问题的具体答案,但以下这些困惑的具体点可以作为起点并给出我所寻找的想法。根据文档,
srun
用于提交作业,sbatch
用于提交稍后执行的作业,但实际区别不清楚,它们的行为似乎相同。例如,我有一个由两个节点组成的集群,每个节点有两个CPU。如果我连续5次执行srun testjob.sh &
,它会将第五个作业排队等待CPU可用,就像执行sbatch testjob.sh
一样。为了让问题更具体,我认为一个好的开始是:使用其中一个命令可以做些什么,而使用另一个命令则不能,并且为什么? 这两个命令的许多参数都是相同的。看起来最相关的是
--ntasks
、--nodes
、--cpus-per-task
和--ntasks-per-node
。 它们如何相互关联,以及在srun
与sbatch
之间有何不同?
一个特定的区别是,如果testjob.sh
没有可执行权限,即chmod +x testjob.sh
,那么srun
会导致错误,而sbatch
则会愉快地运行它。 发生了什么“幕后”,导致这种情况发生?
文档还提到,srun
通常在sbatch
脚本中使用。这引出了问题:它们如何相互作用,每个命令的“规范”用例是什么?具体而言,我是否会单独使用srun
?
srun
?也许我对“作业步骤”的意义感到困惑。例如,如果我有一个名为runjob.sh
的脚本,其中包含#!/bin/bash srun myjob.sh
,那么调用(a)sbatch runjob.sh
与(b)sbatch myjob.sh
与(c)srun myjob.sh
与(d)srun runjob.sh
之间是否存在实际区别?(显然,最后一个很愚蠢,但我很好奇)。 - dkvsbatch
提交脚本中使用srun
。 然而,我发现在提交脚本中没有srun
的命令也会以同样的方式运行。 我提到的四个调用之间是否实际上有区别? - dkv