【问题标题】:How to monitor resources during slurm job?如何在 slurm 工作期间监控资源?
【发布时间】:2017-10-06 19:53:44
【问题描述】:

我正在我们的大学集群(普通用户,没有管理员权限)上运行作业,该集群使用 SLURM 调度系统,我有兴趣绘制 CPU 和内存使用情况随时间的变化,即在作业运行时。我知道sacctsstat,我正在考虑将这些命令包含在我的提交脚本中,例如

#!/bin/bash
#SBATCH <options>

# Running the actual job in background
srun my_program input.in output.out &

# While loop that records resources
JobStatus="$(sacct -j $SLURM_JOB_ID | awk 'FNR == 3 {print $6}')"
FIRST=0
#sleep time in seconds
STIME=15
while [ "$JobStatus" != "COMPLETED" ]; do
    #update job status
    JobStatus="$(sacct -j $SLURM_JOB_ID | awk 'FNR == 3 {print $6}')"
    if [ "$JobStatus" == "RUNNING" ]; then
        if [ $FIRST -eq 0 ]; then
            sstat --format=AveCPU,AveRSS,MaxRSS -P -j ${SLURM_JOB_ID} >> usage.txt
            FIRST=1
        else
            sstat --format=AveCPU,AveRSS,MaxRSS -P --noheader -j ${SLURM_JOB_ID} >> usage.txt
        fi
        sleep $STIME
    elif [ "$JobStatus" == "PENDING" ]; then
        sleep $STIME
    else
        sacct -j ${SLURM_JOB_ID} --format=AllocCPUS,ReqMem,MaxRSS,AveRSS,AveDiskRead,AveDiskWrite,ReqCPUS,AllocCPUs,NTasks,Elapsed,State >> usage.txt
        JobStatus="COMPLETED"
        break
    fi
done

但是,我不太相信这个解决方案:

  • sstat 不幸的是没有显示在 时刻(仅平均)

  • 如果我尝试记录一段时间内的内存使用情况,MaxRSS 也无济于事

  • 似乎仍有一些错误(作业完成后脚本不会停止)

有没有人知道如何正确地做到这一点?甚至可能使用tophtop 而不是sstat?非常感谢任何帮助。

【问题讨论】:

  • 寻找同样问题的答案。我已经确定tophtop 都帮不上忙。

标签: memory cpu slurm resource-monitor


【解决方案1】:

Slurm 提供了一个插件,用于将作业的配置文件(PCU 使用情况、内存使用情况,甚至某些技术的磁盘/网络 IO)记录到 HDF5 文件中。该文件包含跟踪的每个度量的时间序列,您可以选择时间分辨率。

你可以激活它

#SBATCH --profile=<all|none|[energy[,|task[,|filesystem[,|network]]]]>

请参阅文档here

要检查此插件是否已安装,请运行

scontrol show config | grep AcctGatherProfileType

它应该输出AcctGatherProfileType = acct_gather_profile/hdf5

文件是在ProfileHDF5Dir Slurm 配置参数(slurm.conf)中引用的文件夹中创建的

至于您的脚本,您可以尝试将sstat 替换为与计算节点的SSH 连接以运行ps。假设已安装 pdshclush,您可以运行如下内容:

pdsh -j $SLURM_JOB_ID ps -u $USER -o pid,state,cputime,%cpu,rssize,command --columns 100 >> usage.txt

这将为您提供每个进程的 CPU 和内存使用情况。

最后一点,您的作业永远不会终止,因为它会在while 循环终止时终止,而while 循环将在作业终止时终止......条件"$JobStatus" == "COMPLETED" 将永远不会被观察到脚本内。作业完成后,脚本被终止。

【讨论】:

  • 我想我可以在链接的文档中找到它,但如果这能给出完整的答案会很好。我在哪里可以找到运行使用此#SBATCH 命令的任务时应该生成的 HDF5 文件?
  • 很抱歉再次打扰您。我找不到任何slurm.conf 这通常会存储在哪里?编辑:很抱歉在/etc/slurm 中找到了一个,但没有 ProfileHDF5Dir 的条目。在这种情况下是否使用任何默认值?
猜你喜欢
  • 1970-01-01
  • 2020-11-28
  • 2022-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多