开朗的竹笋 · IDEA错误: 找不到或无法加载主类 ...· 4 月前 · |
深沉的黄豆 · 震撼!GPT-4来了,支持多模态,全面吊打C ...· 1 年前 · |
严肃的豌豆 · MySQL如何对order ...· 1 年前 · |
难过的楼梯 · Linux crontab ...· 1 年前 · |
我试图理解SLURM的
srun
命令和
sbatch
命令之间的区别。我会很高兴得到一个一般性的解释,而不是以下问题的具体答案,但以下是一些具体的混淆点,可以作为一个起点,并给出一个想法,我要寻找什么。
根据
文档
的说法,
srun
是用来提交作业的,
sbatch
是用来提交作业供以后执行的,但是实际的差别对我来说并不清楚,他们的行为似乎是一样的。例如,我有一个有两个节点的集群,每个节点都有两个CPU。如果我连续执行
srun testjob.sh &
5x,它将很好地排队等待第五个作业,直到CPU可用为止,执行
sbatch testjob.sh
也是如此。
为了使问题更加具体,我认为一个很好的起点可能是: ,我可以用一个做一些我不能和另一个做的事情,为什么? ?
这两个命令的许多参数是相同的。那些似乎最相关的是
--ntasks
,
--nodes
,
--cpus-per-task
,
--ntasks-per-node
。它们之间有什么关系,对于
srun
sbatch
**
?**和
sbatch
**
?**,它们又有什么区别?
一个特别的区别是,如果
srun
没有可执行权限,即
chmod +x testjob.sh
,而
sbatch
将很高兴地运行它,那么
testjob.sh
将导致错误。
发生了什么“罩下”导致这种情况发生的事情?
文档还提到,
srun
通常在
sbatch
脚本中使用。这就引出了一个问题:
,它们是如何相互作用的,它们的“规范”用法是什么?具体来说,我会单独使用吗?
发布于 2017-05-05 07:56:23
文件上说
srun is used to submit a job for execution in real time
而
sbatch is used to submit a job script for later execution.
它们几乎都接受同一组参数。主要的区别是
srun
是交互式的和阻塞的(在终端中得到结果,在完成之前不能编写其他命令),而
sbatch
是批处理和非阻塞的(结果被写入文件,您可以立即提交其他命令)。
如果在背景中使用
srun
和
&
符号,那么您就删除了
srun
的“阻塞”特性,它变成了交互式的,但非阻塞的。尽管如此,它仍然是交互式的,这意味着输出将扰乱您的终端,并且
srun
进程将链接到您的终端。如果断开连接,您将失去对它们的控制,否则它们可能会被杀死(主要取决于它们是否使用
stdout
)。如果您连接到的提交作业的机器被重新启动,它们将被杀死。
如果使用
sbatch
,则提交作业并由Slurm处理;您可以断开连接、关闭终端等,而不会产生任何后果。您的职务不再链接到正在运行的进程。
我能用其中一件做一些我不能和另一件做的事情,为什么?
sbatch
而不是
srun
都可以使用的一个特性是
作业阵列
。因为
srun
可以在
sbatch
脚本中使用,所以没有什么是
sbatch
不能做的。
它们之间有什么关系,对于srun和sbatch,它们有什么不同?
所有参数
--ntasks
、
--nodes
、
--cpus-per-task
、
--ntasks-per-node
在这两个命令中都有相同的含义。除了
--exclusive
之外,几乎所有参数都是如此。
究竟是什么“罩下”导致了这种情况呢?
srun
立即在远程主机上执行脚本,而
sbatch
则在内部存储中复制脚本,然后在作业开始时将其上载到计算节点。您可以在提交脚本提交后修改提交脚本来检查它;更改将不会被考虑到(请参阅
这
)。
它们是如何相互作用的,它们各自的“规范”用例是什么?
您通常使用
sbatch
在提交脚本中提交作业,并在Slurm调用它们时使用
srun
创建作业步骤。
srun
用于启动进程。如果您的程序是一个并行的MPI程序,
srun
负责创建所有的MPI进程。如果没有,
srun
将按照
--ntasks
选项指定的次数运行您的程序。有许多用例取决于您的程序是否并行,运行时间是否长,是否由单个可执行文件组成,等等。除非另有规定,
srun
默认继承它运行的
sbatch
或
salloc
的相关选项(来自
这里
)。
具体来说,我会单独使用srun吗?
除了小测试之外,没有。一个常见的用途是
srun --pty bash
来获取计算作业上的shell。
发布于 2017-05-05 16:39:37
这并不能完全回答这个问题,但我发现一些更多的信息可能会对未来的人有所帮助:
来自一个具有类似问题的 我找到的相关线索 :
简而言之,sbatch和salloc为作业分配资源,而srun则跨这些资源启动并行任务。当在作业分配中调用时,srun将跨部分或所有分配的资源启动并行任务。在这种情况下,srun默认继承运行它的sbatch或salloc的相关选项。然后(通常)可以提供srun不同的选项,这些选项将覆盖默认接收的内容。作业中对srun的每次调用都称为作业步骤。 还可以在作业分配之外调用srun。在这种情况下,srun请求资源,当这些资源被授予时,作为单个作业和作业步骤在这些资源中启动任务。 有一个相对较新的网页,深入到更详细的-B和-排他性选项。 doc/html/cpu_management.shtml ement.shtml
来自 SLURM常见问题 页面的其他信息。
srun命令有两种不同的操作模式。首先,如果没有在现有作业中运行(即没有在salloc或S批处理创建的Slurm作业分配中),那么它将创建一个作业分配并生成一个应用程序。如果在现有分配中运行,srun命令只生成应用程序。对于这个问题,我们将只讨论第一种操作模式,并比较使用sbatch和srun命令创建作业分配。 srun命令是为交互式使用而设计的,有人监视输出。应用程序的输出被看作是srun命令的输出,通常在用户终端上。sbatch命令设计为提交脚本以供以后执行,并将其输出写入文件。作业分配中使用的命令选项几乎相同。选项中最明显的区别是sbatch命令支持作业数组的概念,而srun则不支持。另一个显著的差异是容错。涉及批处理作业的失败通常会导致重新请求并再次执行作业,而涉及srun的失败通常会导致生成错误消息,期望用户以适当的方式进行响应。
另一次相关谈话 这里
https://stackoverflow.com/questions/43767866
复制Copyright © 2013 - 2024 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有