我怎样才能从 SLURM 获得详细的工作 运行 信息(例如 LSF 为 "standard output" 生成的信息)?

How can I get detailed job run info from SLURM (e.g. like that produced for "standard output" by LSF)?

在 LSF 中使用 bsub 时,-o 选项提供了很多详细信息,例如作业开始和结束的时间以及作业占用的内存量和 CPU 时间。使用 SLURM,我得到的是与 运行 没有 LSF 的脚本相同的标准输出。

例如,给出这个 Perl 6 脚本:

warn  "standard error stream";
say  "standard output stream";

这样提交:

sbatch -o test.o%j -e test.e%j -J test_warn --wrap 'perl6 test.p6'

生成文件 test.o34380:

Testing standard output

和文件 test.e34380:

Testing standard Error  in block <unit> at test.p6:2


使用 LSF,我会在标准输出文件中获得各种详细信息,例如:

Sender: LSF System <lsfadmin@my_node>
Subject: Job 347511: <test> Done

Job <test> was submitted from host <my_cluster> by user <username> in cluster <my_cluster_act>.
Job was executed on host(s) <my_node>, in queue <normal>, as user <username> in cluster <my_cluster_act>.
</home/username> was used as the home directory.
</path/to/working/directory> was used as the working directory.
Started at Mon Mar 16 13:10:23 2015
Results reported at Mon Mar 16 13:10:29 2015

Your job looked like:

------------------------------------------------------------
# LSBATCH: User input
perl6 test.p6

------------------------------------------------------------

Successfully completed.

Resource usage summary:

    CPU time   :    0.19 sec.
    Max Memory :    0.10 MB
    Max Swap   :    0.10 MB

    Max Processes  :         2
    Max Threads    :         3

The output (if any) follows:

standard output stream

PS:

Read file <test.e_347511> for stderr output of this job.

更新:

sbatch 的一个或多个 -v 标志提供更多初步信息,但不会更改标准输出。

对于最近的工作,请尝试

sacct -l

在 "Job Accounting Fields" 部分 of the documentation 下查看输出中大约三列中每一列的描述。

仅针对作业 ID、使用的最大 RAM、最大虚拟内存大小、开始时间、结束时间、CPU 时间(以秒为单位)以及作业所在的节点列表 运行。默认情况下,这仅提供当天 运行 的工作信息(请参阅 --starttime--endtime 选项以获取其他日期的工作信息):

sacct --format=jobid,MaxRSS,MaxVMSize,start,end,CPUTimeRAW,NodeList

这将为您提供如下输出:

       JobID  MaxRSS  MaxVMSize               Start                 End CPUTimeRAW NodeList
------------ ------- ---------- ------------------- ------------------- ---------- --------
36511                           2015-04-29T11:34:37 2015-04-29T11:34:37          0  c50b-20
36511.batch     660K    181988K 2015-04-29T11:34:37 2015-04-29T11:34:37          0  c50b-20
36514                           2015-04-29T12:18:46 2015-04-29T12:18:46          0  c50b-20
36514.batch     656K    181988K 2015-04-29T12:18:46 2015-04-29T12:18:46          0  c50b-20


使用 --state COMPLETED 检查以前完成的作业。当检查 RUNNING 以外的状态时,您必须给出开始或结束时间。

sacct --starttime 08/01/15 --state COMPLETED --format=jobid,MaxRSS,MaxVMSize,start,end,CPUTImeRaw,NodeList,ReqCPUS,ReqMem,Elapsed,Timelimit

您还可以使用 scontrol:

获取有关作业的工作目录
scontrol show job 36514

这会给你这样的输出:

JobId=36537 JobName=sbatch
UserId=username(123456) GroupId=my_group(678)
......
WorkDir=/path/to/work/dir

但是,默认情况下,scontrol 只能在作业完成后大约五分钟内访问该信息,之后它会从内存中清除。

在我用来插入的每个作业的末尾

sstat -j $SLURM_JOB_ID.batch --format=JobID,MaxVMSize

将 RAM 使用添加到标准输出。