gpt4 book ai didi

parallel-processing - SLURM `srun` 与 `sbatch` 及其参数

转载 作者:行者123 更新时间:2023-12-03 05:31:05 36 4
gpt4 key购买 nike

我试图了解 SLURM 的 srun 之间有什么区别和 sbatch命令。我会很高兴得到一般性的解释,而不是对以下问题的具体答案,但这里有一些具体的混淆点,可以作为一个起点,并让我了解我正在寻找什么。

根据documentationsrun 用于提交作业, sbatch 用于提交作业以供稍后执行,但我不清楚实际的区别,而且它们的行为似乎是相同的。例如,我有一个包含 2 个节点的集群,每个节点有 2 个 CPU。如果我连续执行 srun testjob.sh & 5x,它将很好地对第五个作业进行排队,直到 CPU 可用,执行 sbatch testjob.sh 也会如此。

为了让问题更具体,我认为一个好的起点可能是:哪些事情我可以用其中一个来做,而另一个却不能做,为什么?

这两个命令的许多参数都是相同的。看起来最相关的是 --ntasks--nodes--cpus-per-task--每个节点 ntasks它们之间有何关系,srunsbatch 有何不同?

一个特别的区别是,如果 testjob.sh 没有可执行权限,则 srun 将导致错误,即 chmod +x testjob.shsbatch 会很高兴地运行它。 “幕后”发生了什么导致出现这种情况?

文档还提到 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 默认继承它运行的 sbatchsalloc 的相关选项(来自 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/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com