我怎样才能从 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 使用添加到标准输出。
在 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 使用添加到标准输出。