dkv*_*dkv 65 parallel-processing jobs scheduler slurm sbatch
我试图了解SLURM srun
和sbatch
命令之间的区别.我会对一般性解释感到满意,而不是对以下问题的具体答案,但这里有一些具体的混淆点,可以作为一个起点,并让我知道我在寻找什么.
根据文件,srun
是提交工作,sbatch
是为了提交工作以供以后执行,但实际差异对我来说不清楚,他们的行为似乎是一样的.例如,我有一个包含2个节点的集群,每个节点有2个CPU.如果我srun testjob.sh &
连续执行5x,它将很好地排队第五个作业,直到CPU变为可用,就像执行一样sbatch testjob.sh
.
为了使问题更具体,我认为一个好的起点可能是:我可以用一个我不能用另一个做的事情做什么,为什么?
两个命令的许多参数都是相同的.似乎最相关的那些是--ntasks
,--nodes
,--cpus-per-task
,--ntasks-per-node
.这些是如何相互关联的,它们对于srun
vs有sbatch
什么不同?
一个特别不同的是,srun
将导致一个错误,如果testjob.sh
没有执行权限,即chmod +x testjob.sh
而sbatch
会开心地运行它."引擎盖下"发生了什么导致情况如此?
该文档还提到srun
了sbatch
脚本中常用的文档.这导致了一个问题:它们如何相互作用,以及它们之间的"规范"用例是什么?具体来说,我会独自使用srun
吗?
dam*_*ois 69
文件说
srun is used to submit a job for execution in real time
Run Code Online (Sandbox Code Playgroud)
而
sbatch is used to submit a job script for later execution.
Run Code Online (Sandbox Code Playgroud)
它们都接受几乎相同的参数集.主要区别在于srun
交互和阻塞(您在终端中获得结果,在完成之前无法编写其他命令),而sbatch
批处理和非阻塞(结果写入文件,您可以提交其他命令)马上).
如果您srun
在后台使用&
符号,则会删除"阻止"功能srun
,该功能会变为交互式但非阻塞功能.它仍然是交互式的,这意味着输出将使您的终端混乱,并且srun
进程将链接到您的终端.如果断开连接,您将失去对它们的控制权,否则它们可能会被杀死(取决于它们是否使用它们 stdout
).如果重新启动连接到提交作业的计算机,它们将被终止.
如果您使用sbatch
,则提交您的工作,由Slurm处理; 你可以断开连接,杀死你的终端等,没有任何后果.您的工作不再与正在运行的流程相关联.
我可以用另一个我不能做的事情做些什么,为什么?
可用sbatch
和不可用的功能srun
是作业arrrays.由于srun
可以在内部使用sbatch
的脚本,没有什么是你不能做sbatch
.
这些是如何相互关联的,它们与srun vs sbatch有何不同?
所有参数--ntasks
,--nodes
,--cpus-per-task
,--ntasks-per-node
在这两个命令的含义相同.对于几乎所有参数都是如此,除了明显的例外--exclusive
.
"引擎盖下"发生了什么导致情况如此?
srun
立即执行远程主机上的脚本,同时sbatch
将脚本复制到内部存储中,然后在作业启动时将其上载到计算节点上.您可以在提交后修改提交脚本来检查; 不会考虑更改(请参阅此内容).
他们如何互相交流,每个人的"规范"用例是什么?
您通常用于sbatch
提交作业,并srun
在提交脚本中创建作业步骤,因为Slurm会调用它们.srun
用于启动进程.如果您的程序是并行MPI程序,srun
则负责创建所有MPI进程.如果没有,srun
将按--ntasks
选项指定的次数运行您的程序.有许多用例取决于您的程序是否并行,运行时间是否长,是否包含单个可执行文件等.除非另有说明,否则srun
默认情况下会继承相关的选项sbatch
或salloc
运行它的相关选项在(从这里).
具体来说,我会单独使用srun吗?
除了小测试,没有.常见的用途是srun --pty bash
在计算作业上获取shell.
这实际上并没有完全回答这个问题,但这里有一些我发现的更多信息,可能对未来的人有帮助:
从一个相关的线程中,我发现了一个类似的问题:
简而言之,sbatch 和 salloc 为作业分配资源,而 srun 跨这些资源启动并行任务。在作业分配中调用时,srun 将在部分或全部分配的资源上启动并行任务。在这种情况下, srun 默认继承其运行所在的 sbatch 或 salloc 的相关选项。然后,您可以(通常)提供 srun 不同的选项,这些选项将覆盖默认情况下接收的内容。作业中对 srun 的每次调用都称为作业步骤。
srun 也可以在作业分配之外调用。在这种情况下,srun 请求资源,当这些资源被授予时,作为单个作业和作业步骤跨这些资源启动任务。
有一个相对较新的网页,其中详细介绍了 -B 和 --exclusive 选项。
doc/html/cpu_management.shtml
SLURM 常见问题页面中的其他信息。
srun 命令有两种不同的操作模式。首先,如果不在现有作业中运行(即不在由 salloc 或 sbatch 创建的 Slurm 作业分配中),那么它将创建作业分配并生成应用程序。如果在现有分配中运行,则 srun 命令仅生成应用程序。对于这个问题,我们将只解决第一种操作模式并比较使用 sbatch 和 srun 命令创建作业分配。
srun 命令是为交互式使用而设计的,有人监视输出。应用程序的输出被视为 srun 命令的输出,通常在用户的终端上。sbatch 命令旨在提交脚本以供稍后执行,并将其输出写入文件。作业分配中使用的命令选项几乎相同。选项中最显着的区别是 sbatch 命令支持作业数组的概念,而 srun 不支持。另一个显着差异是容错性。涉及 sbatch 作业的失败通常会导致作业重新排队并再次执行,而涉及 srun 的失败通常会导致生成错误消息,并期望用户以适当的方式响应。
另一个相关的对话在这里
归档时间: |
|
查看次数: |
22178 次 |
最近记录: |