SLURM sacct显示“batch”和“extern”作业名称

21

我已经将一个作业提交到SLURM队列,该作业已经运行并完成。然后,我使用sacct命令检查已完成的作业。但是,通过查看sacct命令的结果,我注意到了一些意外的额外结果:

       JobID                        JobName      State      NCPUS  Timelimit
5297048                                test  COMPLETED          1   00:10:00  
5297048.bat+                          batch  COMPLETED          1           
5297048.ext+                         extern  COMPLETED          1       

有人能解释一下“batch”和“extern”作业是什么以及它们的目的是什么吗?为什么即使主要作业失败,extern作业也总是完成呢?

我已经尝试搜索文档,但没有找到令人满意且完整的答案。

编辑:这里是我提交的脚本,用于生成上述sacct输出:

#!/bin/bash
echo test_script > done.txt

使用以下sbatch命令:

sbatch -A BRIDGE-CORE-SL2-CPU --nodes=1 --ntasks=1 -p skylake --cpus-per-task 1 -J jobname -t 00:10:00 --output=./output.out --error=./error.err < test.sh
2个回答

17

一个Slurm作业包含多个作业步骤,这些步骤在资源使用方面都由Slurm单独计算。通常,这些步骤使用srun/mpirun创建,并从0开始枚举。但除此之外,有时还有两个特殊的步骤。例如,考虑以下作业:

sbatch -n 4 --wrap="srun hostname; srun echo Hello World"

这导致了以下sacct输出:

       JobID    JobName  Partition    Account  AllocCPUS      State ExitCode 
------------ ---------- ---------- ---------- ---------- ---------- -------- 
5163571            wrap     medium      admin          4  COMPLETED      0:0 
5163571.bat+      batch                 admin          4  COMPLETED      0:0 
5163571.ext+     extern                 admin          4  COMPLETED      0:0 
5163571.0      hostname                 admin          4  COMPLETED      0:0 
5163571.1          echo                 admin          4  COMPLETED      0:0 

这两个srun调用创建了步骤5163571.05163571.15163571.bat+考虑了批处理脚本所需的资源(在本例中只是srun hostname; srun echo Hello World)。 --wrap只是把它放入一个文件中并添加#!/bin/sh)。

许多非 MPI 程序在批处理步骤中进行大量计算,因此将资源使用情况记录在那里。

现在来看5163571.ext+:该步骤记录了该作业在slurm之外使用的所有资源。仅当使用PrologFlag contain时才会显示此内容。

属于slurm作业但不受slurm直接控制的进程的示例是 ssh 会话。如果您ssh到运行您的作业之一的节点,则您的会话将被放置在作业的上下文中(如果设置了cgroups,则会限制可用资源)。并且您在该ssh会话中进行的所有计算都将在.extern作业步骤中计算。


感谢你深入浅出的回答,Marcus! - Parsa

0

一个工作由多个作业步骤组成。每个作业步骤都是独立显示的。在您的输出中,$JOBID代表整个预订,$JOBID.batch代表您提交的主脚本。

关于external...我不确定,但我猜您启动了一个作业步骤并将其命名为“external”。在这种情况下,那就是该作业步骤的信息。

如果您向我们展示您提交的脚本,我们可以澄清一些疑问。


1
如果$JOBID.batch代表我提交的脚本,而external是尚未解决的某些内容,那么仅使用$JOBID表示的作业代表什么? - Parsa
1
$JOBID代表整个预订。 - Poshi
如果您使用 -l 参数运行 sacct 命令,您会发现每行给出的信息都不同。也许您有一个预留了 8 个 CPU 和两个作业步骤,每个步骤使用 4 个 CPU。这些信息都可以在 sacct 中看到。 - Poshi
很遗憾,我在您的工作中既没有看到任何作业步骤被启动,也没有看到“external”的任何引用。我对此一无所知。 - Poshi
我认为.ext作业在SLURM中很常见,例如您可以在这个无关的问题中看到sacct输出显示了一个.ext作业步骤。 https://bugs.schedmd.com/show_bug.cgi?id=3461#c2 - Parsa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接