SLURM 的运行与批处理及其参数

我试图理解 SLURM 的 srunsbatch命令之间的区别。我很乐意给出一个一般性的解释,而不是对以下问题的具体回答,但这里有一些具体的困惑点,可以作为一个起点,并给出一个想法,我在寻找什么。

根据 文件srun是用来提交作业的,而 sbatch是用来提交作业以供以后执行的,但是我不清楚实际的区别,而且它们的行为似乎是一样的。例如,我有一个有2个节点的集群,每个节点有2个 CPU。如果我在一行中执行 srun testjob.sh &5x,它将很好地将第五个作业排队,直到有一个 CPU 可用,执行 sbatch testjob.sh也是如此。

为了使问题更具体,我认为一个好的开始可能是: 有什么事情是我可以用一个来做但是不能用另一个来做的,为什么?

两个命令的许多参数是相同的。看起来最相关的是 --ntasks--nodes--cpus-per-task--ntasks-per-node这些是如何相互关联的,它们在 ABC4和 sbatch之间有什么不同?

一个特别的区别是,如果 testjob.sh没有可执行权限,即 chmod +x testjob.sh,而 sbatch将愉快地运行它,那么 srun将导致错误。“引擎盖下”发生了什么导致了这种情况?

文档还提到,srun通常在 sbatch脚本内使用

69179 次浏览

文件上说

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 和 satch 有什么不同?

所有参数 --ntasks--nodes--cpus-per-task--ntasks-per-node在两个命令中都有相同的含义。几乎所有的参数都是如此,只有 --exclusive例外。

“引擎盖下”发生了什么导致了这种情况?

srun立即在远程主机上执行该脚本,而 sbatch在内部存储中复制该脚本,然后在作业启动时将其上载到计算节点。您可以通过在提交脚本之后修改它来检查这一点; 更改将不会被考虑在内(参见 这个)。

它们如何相互作用,它们各自的“规范”用例是什么?

您通常使用 sbatch提交作业,使用 srun在提交脚本中创建 Slurm 调用的作业步骤。srun用于启动进程。如果您的程序是一个并行 MPI 程序,那么 srun负责创建所有的 MPI 进程。如果没有,srun将按照 --ntasks选项指定的次数运行您的程序。有许多用例取决于您的程序是否并行,是否有长时间运行,是否由单个可执行文件组成,等等。除非另有说明,否则 srun默认继承 sbatchsalloc的相关选项,它在 sbatchsalloc下运行(从 给你开始)。

具体来说,我会自己用 Srun 吗?

除了用于小型测试之外,没有。一个常见的用法是 srun --pty bash在计算作业上获取 shell。

这实际上并没有完全回答这个问题,但这里有一些更多的信息,我发现这些信息可能对将来的某些人有帮助:


来自 我找到的相关线索的一个类似问题:

简而言之,satch 和 salloc 将资源分配给作业,而 srun 在这些资源之间启动并行任务。当在作业分配中调用时,srun 将跨部分或全部分配的资源启动并行任务。在这种情况下,srun 默认继承它所运行的 sbatch 或 salloc 的相关选项。然后您可以(通常)提供 srun 不同的选项,这些选项将覆盖它默认接收到的内容。作业中对 srun 的每次调用都称为作业步骤。

还可以在作业分配之外调用 srun。在这种情况下,运行请求资源,并且当这些资源被授予时,作为单个作业和作业步骤跨这些资源启动任务。

有一个相对较新的网页,详细介绍了-B 和-独家选项。

Doc/html/cpu _ management. shtml


来自 SLURM 常见问题页面的其他信息。

Srun 命令有两种不同的操作模式。首先,如果不在现有作业中运行(即不在由 salloc 或 sbatch 创建的 Slurm 作业分配中运行) ,那么它将创建一个作业分配并产生一个应用程序。如果在现有分配内运行,则 srun 命令只生成应用程序。对于这个问题,我们只讨论第一种操作模式,并比较使用 satch 和 srun 命令创建作业分配。

Srun 命令是为交互式使用而设计的,有人监视输出。应用程序的输出被视为 srun 命令的输出,通常位于用户的终端。Sbatch 命令的目的是提交一个脚本以供以后执行,其输出将写入一个文件。作业分配中使用的命令选项几乎相同。选项中最明显的区别在于 sbatch 命令支持作业数组的概念,而 srun 不支持。另一个显著的差异是容错性。涉及批处理作业的故障通常会导致作业被重新排队并再次执行,而涉及 srun 的故障通常会导致生成错误消息,并期望用户以适当的方式响应。


另一个相关对话