相关文章推荐
成熟的皮蛋  ·  Matlab双目相机标定参数--python ...·  8 月前    · 
空虚的花卷  ·  Asp.net中编程方式调用ashx(通过w ...·  9 月前    · 
大气的开心果  ·  js控制台报错Uncaught TypeEr ...·  12 月前    · 
打篮球的烤面包  ·  curl可以访问但浏览器访问不了-掘金·  1 年前    · 
慷慨大方的薯片  ·  企业级Tomcat部署实践及安全调优 - ...·  1 年前    · 
小百科  ›  SLURM‘`srun`’vs‘`sbatch`’及其参数开发者社区
爱旅游的佛珠
10 月前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 SLURM‘`srun`’vs‘`sbatch`’及其参数

Stack Overflow用户
提问于 2017-05-03 18:49:40
EN

我试图理解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 脚本中使用。这就引出了一个问题: ,它们是如何相互作用的,它们的“规范”用法是什么?具体来说,我会单独使用吗?

2 69K 0 票数 148
EN
sbatch
parallel-processing
scheduler
jobs
slurm

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-05 07:56:23

文件上说

代码语言: javascript
复制
srun is used to submit a job for execution in real time

而

代码语言: javascript
复制
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。

票数 175
EN

Stack Overflow用户

发布于 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的失败通常会导致生成错误消息,期望用户以适当的方式进行响应。

另一次相关谈话 这里

票数 7
EN
页面原文内容由 Stack Overflow 提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43767866

复制

Copyright © 2013 - 2024 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

 
推荐文章
成熟的皮蛋  ·  Matlab双目相机标定参数--python - 路人加 - 博客园
8 月前
空虚的花卷  ·  Asp.net中编程方式调用ashx(通过webRequest) - 宽田 - 博客园
9 月前
大气的开心果  ·  js控制台报错Uncaught TypeError: Cannot read properties of undefined (reading ‘appendChild‘)的解决_javascript
12 月前
打篮球的烤面包  ·  curl可以访问但浏览器访问不了-掘金
1 年前
慷慨大方的薯片  ·  企业级Tomcat部署实践及安全调优 - 惨绿少年 - 博客园
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号