- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解 SLURM 的 srun
之间有什么区别和 sbatch
命令。我会很高兴得到一般性的解释,而不是对以下问题的具体答案,但这里有一些具体的混淆点,可以作为一个起点,并让我了解我正在寻找什么。
根据documentation , srun
用于提交作业, sbatch
用于提交作业以供稍后执行,但我不清楚实际的区别,而且它们的行为似乎是相同的。例如,我有一个包含 2 个节点的集群,每个节点有 2 个 CPU。如果我连续执行 srun testjob.sh & 5x,它将很好地对第五个作业进行排队,直到 CPU 可用,执行 sbatch testjob.sh 也会如此。
为了让问题更具体,我认为一个好的起点可能是:哪些事情我可以用其中一个来做,而另一个却不能做,为什么?
这两个命令的许多参数都是相同的。看起来最相关的是 --ntasks
、--nodes
、--cpus-per-task
、--每个节点 ntasks
。 它们之间有何关系,srun
与 sbatch
有何不同?
一个特别的区别是,如果 testjob.sh
没有可执行权限,则 srun
将导致错误,即 chmod +x testjob.sh
而 sbatch
会很高兴地运行它。 “幕后”发生了什么导致出现这种情况?
文档还提到 srun
通常在 sbatch
脚本内部使用。这就引出了一个问题:它们如何相互交互,以及它们各自的“规范”用例是什么?具体来说,我会单独使用 srun
吗?
最佳答案
文档说
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 处理;您可以断开连接、终止您的终端等,而不会产生任何后果。您的作业不再链接到正在运行的进程。
What are some things that I can do with one that I cannot do with the other, and why?
可用于 sbatch
而不适用于 srun
的功能是 job arrays 。由于 srun
可以在 sbatch
脚本中使用,因此您可以使用 sbatch
执行任何操作。
How are these related to each other, and how do they differ for srun vs sbatch?
所有参数--ntasks
、--nodes
、--cpus-per-task
、--ntasks- per-node
在两个命令中具有相同的含义。几乎所有参数都是如此,但 --exclusive
除外。
What is happening "under the hood" that causes this to be the case?
srun
立即在远程主机上执行脚本,而 sbatch
将脚本复制到内部存储中,然后在作业启动时将其上传到计算节点上。您可以在提交后通过修改提交脚本来检查这一点;不会考虑更改(请参阅 this )。
How do they interact with each other, and what is the "canonical" use-case for each of them?
您通常使用 sbatch
提交作业,并在提交脚本中使用 srun
来创建 Slurm 调用的作业步骤。 srun
用于启动进程。如果您的程序是并行 MPI 程序,则 srun
负责创建所有 MPI 进程。如果没有,srun
将按照 --ntasks
选项指定的次数运行您的程序。有很多用例,具体取决于您的程序是否并行、运行时间是否较长、是否由单个可执行文件组成等。除非另有说明,srun
默认继承它运行的 sbatch
或 salloc
的相关选项(来自 here )。
Specifically, would I ever use srun by itself?
除了小型测试之外,没有。常见用途是 srun --pty bash
来获取计算作业的 shell。
关于parallel-processing - SLURM `srun` 与 `sbatch` 及其参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43767866/
在 Oracle 中,PARALLEL 被广泛使用。提示 PARALLEL、PARALLEL(8) 和 PARALLEL(a,8) 有什么区别。如何选择最佳的查询提示? SELECT /*+ PARA
好的,我希望以前没有问过这个问题,因为在搜索中很难找到。 我查看了 F95 手册,但仍然觉得这很模糊: For the simple case of: DO i=0,99 END DO 我正
我有一个 C-shell 脚本,其中有一个名为 $hosts_string 的变量,格式为: host1,host2,...,hostN 我还有一个名为 $chrs_string 的变量,其形式为:
是否可以从由gnu parallel产生的脚本的多次运行中调用gnu parallel? 我有一个python脚本,可以运行100个顺序顺序迭代,并且在每次迭代中的某处,并行计算4个值(使用gnu p
我想在几个输入上运行几个长时间运行的进程。例如。: solver_a problem_1 solver_b problem_1 ... solver_b problem_18 solver_c pro
TParallel.&For 和 TParallel.For 之间有区别吗? 两者都可以在 Delphi 10 Seattle 中编译。那么我应该坚持哪一个呢? 最佳答案 TParallel.&For
我第一次使用 julia 进行并行计算.我有点头疼。所以假设我开始 julia如下:julia -p 4 .然后我为所有处理器声明 a 函数,然后将它与 pmap 一起使用还有@parallel fo
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10年前关闭。 Improve this
我有一堆相互排斥的方法,因此可以并行运行。有这样做的好方法吗?到目前为止,我有以下两种实现方式,但我不确定是否应该选择其中一种。 使用 Parallel.For : Parallel.For(0, 2
我对并行运行脚本很感兴趣,并且我已经开始查看 GNU 并行工具,但是我遇到了一些麻烦。我的脚本 doSomething 有 3 个参数,我想在参数的不同值上并行运行脚本。我该怎么做? 我试过:para
我需要在多核(和多线程)机器上运行多个作业。我正在使用 GNU Parallel utility跨核心分配作业以加速任务。要执行的命令在名为“命令”的文件中可用。我使用以下命令运行 GNU Paral
我正在尝试使用如下两个输入运行 Python 脚本。我得到了大约 300 个这两个输入,所以我想知道是否有人可以建议如何并行运行它们。 单次运行看起来像: python stable.py KOG_1
每天我都必须更新一堆存储库,并在其中一些中执行另一个命令(来自 CARTON,Perl 模块依赖管理器)。我总是使用循环来执行此操作,但我想与 并行执行GNU 并行 如果可能,但我不太了解它的tuto
正如标题所说:@parallel 之间究竟有什么区别?和 pmap ?我的意思不是明显的一个是循环的宏,另一个适用于函数,我的意思是它们的实现究竟有什么不同,我应该如何使用这些知识在它们之间进行选择?
我有一些矩阵乘法运算。我想通过多个处理器并行执行这些操作。这可以使用 MPI(消息传递接口(interface))在高性能计算集群上完成。 同样,我可以使用多个辅助角色在云中进行一些并行化吗?有什么办
joblib模块提供了一个简单的帮助程序类,以使用多处理并行编写循环的循环。 这段代码使用列表推导来完成这项工作: import time from math import sqrt from job
我的问题是这样的one .但我想做一些不同的事情... 例如,在我的并行区域内,我想在 4 个线程上运行我的代码。当每个线程进入 for 循环时,我想在 8 个线程上运行我的代码。像 #pramga
我正在尝试使用 ipython 并行库中的并行计算。但是我对此知之甚少,而且我发现很难从对并行计算一无所知的人那里阅读该文档。 有趣的是,我发现的所有教程都只是重复使用文档中的示例,并使用相同的解释,
我的项目结构看起来像 Root + subproj1 + subproj2 在每个子项目中定义了自己的任务 run(){}。 我想要做的是从 Root 项目的运行任务并行运行 :subpro
我有一个 Foo ID 的列表。我需要为每个 ID 调用一个存储过程。 例如 Guid[] siteIds = ...; // typically contains 100 to 300 elemen
我是一名优秀的程序员,十分优秀!