[英]How to monitor resources during slurm job?
我在我們的大學集群上運行作業(普通用戶,沒有管理員權限),它使用 SLURM 調度系統,我有興趣隨時間繪制 CPU 和內存使用情況,即在作業運行時。 我知道sacct
和sstat
並且我正在考慮將這些命令包含在我的提交腳本中,例如
#!/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
沒有顯示當前使用了多少 CPU(僅為平均值)
如果我嘗試記錄一段時間內的內存使用情況,MaxRSS 也沒有幫助
似乎仍然存在一些錯誤(作業完成后腳本不會停止)
有誰知道如何正確地做到這一點? 也許甚至用top
或htop
而不是sstat
? 任何幫助深表感謝。
Slurm 提供了一個插件來將作業的配置文件(PCU 使用情況、內存使用情況,甚至某些技術的磁盤/網絡 IO)記錄到 HDF5 文件中。 該文件包含跟蹤的每個度量的時間序列,您可以選擇時間分辨率。
你可以用
#SBATCH --profile=<all|none|[energy[,|task[,|filesystem[,|network]]]]>
請參閱此處的文檔。
要檢查此插件是否已安裝,請運行
scontrol show config | grep AcctGatherProfileType
它應該輸出AcctGatherProfileType = acct_gather_profile/hdf5
。
這些文件在引用的文件夾中創建ProfileHDF5Dir
SLURM配置參數(在slurm.conf
)
至於您的腳本,您可以嘗試將sstat
替換為與計算節點的 SSH 連接以運行ps
。 假設安裝了pdsh
或clush
,您可以運行以下命令:
pdsh -j $SLURM_JOB_ID ps -u $USER -o pid,state,cputime,%cpu,rssize,command --columns 100 >> usage.txt
這將為您提供每個進程的 CPU 和內存使用情況。
最后要注意的是,您的工作永遠不會終止,因為它會在while
循環終止時終止,而while
循環將在工作終止時終止......條件"$JobStatus" == "COMPLETED"
永遠不會從內部觀察到劇本。 當作業完成時,腳本被終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.