我想这是一个非常微不足道的问题,但尽管如此,我正在寻找(我猜是 sacct)命令,它将显示 slurm 作业 ID 使用的 CPU 时间和内存。
6 回答
如果您的工作已完成,那么该sacct
命令就是您要查找的内容。否则,请查看sstat
. 因为sacct
--format 开关是另一个关键元素。如果您运行此命令:
sacct -e
您将获得可用于 --format 开关的不同字段的打印输出。每个字段的详细信息在手册页的 Job Account Fields 部分中进行了描述。对于 CPU 时间和内存,CPUTime 和 MaxRSS 可能是您正在寻找的。如果您想要以秒为单位的数字,也可以使用 cputimeraw,而不是通常的 Slurm 时间格式。
sacct --format="CPUTime,MaxRSS"
另一个回答输出的所有详细格式sacct
,这对于查看汇总在表格中的多个作业非常有用。
但是,有时您希望更详细地查看特定作业,以便您可以判断您的作业是否有效地使用了分配的资源。为此,seff
非常有用。语法很简单seff <Jobid>
。例如,这是我最近的一份工作(失败了):
$ seff 15780625
Job ID: 15780625
Cluster: mycluster
User/Group: myuser/mygroup
State: OUT_OF_MEMORY (exit code 0)
Nodes: 1
Cores per node: 16
CPU Utilized: 12:06:01
CPU Efficiency: 85.35% of 14:10:40 core-walltime
Job Wall-clock time: 00:53:10
Memory Utilized: 1.41 GB
Memory Efficiency: 70.47% of 2.00 GB
请注意,关键 CPU 指标 CPU Utilized 对应于TotalCPU字段sacct
,而 Memory Utilized 对应于MaxRSS。
sacct
确实是用于完成作业的命令。对于正在运行的作业,您可以查看sstat
命令。
@aaron.kizmiller 是对的,sacct
是要使用的命令。
可以通过将以下字段传递到saact --format="field,field"
领域:
Account AdminComment AllocCPUS AllocGRES
AllocNodes AllocTRES AssocID AveCPU
AveCPUFreq AveDiskRead AveDiskWrite AvePages
AveRSS AveVMSize BlockID Cluster
Comment ConsumedEnergy ConsumedEnergyRaw CPUTime
CPUTimeRAW DerivedExitCode Elapsed ElapsedRaw
Eligible End ExitCode GID
Group JobID JobIDRaw JobName
Layout MaxDiskRead MaxDiskReadNode MaxDiskReadTask
MaxDiskWrite MaxDiskWriteNode MaxDiskWriteTask MaxPages
MaxPagesNode MaxPagesTask MaxRSS MaxRSSNode
MaxRSSTask MaxVMSize MaxVMSizeNode MaxVMSizeTask
McsLabel MinCPU MinCPUNode MinCPUTask
NCPUS NNodes NodeList NTasks
Priority Partition QOS QOSRAW
ReqCPUFreq ReqCPUFreqMin ReqCPUFreqMax ReqCPUFreqGov
ReqCPUS ReqGRES ReqMem ReqNodes
ReqTRES Reservation ReservationId Reserved
ResvCPU ResvCPURAW Start State
Submit Suspended SystemCPU Timelimit
TotalCPU UID User UserCPU
WCKey WCKeyID WorkDir
例如,要列出所有作业 ID、经过时间和最大 VM 大小,您可以运行:
sacct --format='JobID,Elapsed,MaxVMSize'
尽管已经存在出色的解决方案,但我分享了另一个观点。
这种方法可以对很多节点进行实时监控。
我们可以编写一个脚本monitor.sh
来获取统计信息(以内存为例),然后将其记录到文件中。
#! /bin/sh
if [ -f "./free.log_"`hostname` ];then
echo "file existed , now deleting it !"
rm ./free.log_`hostname`
fi
echo "start recording!"
while true
do
echo "******["`date +%Y-%m-%d_%H:%M:%S`"]******" >> free.log_`hostname`
free -s 1 -c 2 -h|sed -n 1,2p >> free.log_`hostname`
done
然后编写您的作业脚本sbatch_input.sh
,可以通过 sbatch 调用。
#! /bin/sh
#SBATCH -N 2
#SBATCH -p cnall
srun hostname
srun ./monitor.sh
调用脚本
sbatch ./sbatch_input.sh
我们可以看到生成了一些日志。
您可以每次都导出SACCT_FORMAT
并输入。sacct
$ export SACCT_FORMAT="JobID%20,JobName,User,Partition,NodeList,Elapsed,CPUTime,State,AllocTRES%32"
$ sacct
JobID JobName User Partition NodeList Elapsed CPUTime State AllocTRES
-------------------- ---------- --------- ---------- --------------- ---------- ---------- ---------- --------------------------------
249527_4 xgb_tune zhaoqi cn cn12 00:26:50 1-11:46:40 RUNNING billing=80,cpu=80,mem=100G,node+
249527_1 xgb_tune zhaoqi cn cn09 00:26:50 1-11:46:40 RUNNING billing=80,cpu=80,mem=100G,node+
249527_2 xgb_tune zhaoqi cn cn10 00:26:50 1-11:46:40 RUNNING billing=80,cpu=80,mem=100G,node+
249527_3 xgb_tune zhaoqi cn cn11 00:26:50 1-11:46:40 RUNNING billing=80,cpu=80,mem=100G,node+
参考:https ://docs.ycrc.yale.edu/clusters-at-yale/job-scheduling/resource-usage/