查询slurm集群各个节点的运行情况

发布时间:2024年01月05日

引言

slurm系统是一个集群,它原生的使用方式可以参考《slurm快速入门》。有时候我们想知道我们能申请哪些节点,以及各个节点的使用情况。

原生的指令大概有这两个,一个是使用squeue的方式列举出当前的工作列表。
在这里插入图片描述

而另一个则是sinfo。这两个命令给出的内容十分有限。

PARTITION        AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug               up    1:00:00      1  maint ceres19-compute-26
debug               up    1:00:00      1    mix ceres14-compute-4
debug               up    1:00:00      1   idle ceres19-compute-25
brief-low           up    2:00:00      2  maint ceres19-compute-[26,40]
brief-low           up    2:00:00      1  down* ceres19-compute-37
brief-low           up    2:00:00     59    mix ceres18-compute-[0-17,19-27],ceres19-compute-[0-5,7-9,12,21-24,35-36,38-39,41-42,44-45,47,55-63]
brief-low           up    2:00:00      4  alloc ceres18-compute-18,ceres19-compute-[6,28,43]
brief-low           up    2:00:00     26   idle ceres19-compute-[10-11,13-20,25,27,29-34,46,48-54]
mem768-low          up    2:00:00      3   idle ceres18-mem768-0,ceres19-mem768-[0-1]
mem-low             up    2:00:00      3    mix ceres18-mem-[0-1],ceres19-mem-1

即使借鉴一些参数让给出的参数多一些,也最多能像教程里给出的那样。

sinfo -o "%20P %5D %14F %10m %11l %N"
PARTITION            NODES NODES(A/I/O/T) MEMORY     TIMELIMIT   NODELIST
debug                3     0/3/0/3        126000+    1:00:00     ceres14-compute-4,ceres19-compute-[25-26]
brief-low            92    33/58/1/92     381000     2:00:00     ceres18-compute-[0-27],ceres19-compute-[0-63]
priority-gpu         1     1/0/0/1        379000     14-00:00:00 ceres18-gpu-0
short*               100   51/48/1/100    126000+    2-00:00:00  ceres14-compute-[1-24,26-29,32-39,44-56,58-67],ceres18-compute-[24-27],ceres19-compute-[27-63]
medium               67    49/17/1/67     126000+    7-00:00:00  ceres14-compute-[26-29,32-39,44-56,58-67],ceres18-compute-[25-27],ceres19-compute-[35-63]
long                 34    31/3/0/34      126000+    21-00:00:00 ceres14-compute-[44-56,58-67],ceres18-compute-[26-27],ceres19-compute-[55-63]
mem                  8     3/4/1/8        1530000+   7-00:00:00  ceres14-mem-[0-3],ceres18-mem-2,ceres19-mem-[2-4]
mem768               1     0/1/0/1        763000     7-00:00:00  ceres18-mem768-1
huge                 1     1/0/0/1        4:16:1   3095104    14990      1-00:00:00  fat,AVX,AVX2,AVX novahuge001

如果我们想要下面这样清楚的显示整个集群的使用情况,该怎么操作呢?
在这里插入图片描述
这样申请资源就可以使用以下命令即可:

srun --job-name=test --gres=gpu:1 -w <HOSTNAME> -p <Partition> -c 32 --pty bash

构建执行脚本

上面那么清楚的展示是怎么创造出来的呢?那显然单纯的使用slurm命令是无法满足的,这需要bash编程技术了,整个sh文件如下:

#!/bin/bash

# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color

# 打印标题行
printf "${GREEN}%-15s %-12s %-11s %-15s %-8s %-12s %-12s %-15s %-s${NC}\n" "Hostname" "Partition" "Node/State" "Num_CPU" "CPUload" "Memsize(MB)" "Freemem(MB)" "GRES/Node" "Joblist"

# 获取节点信息
nodes=$(sinfo -o "%N %P %T %C %O %m %e %G" -h)

# 循环每个节点
echo "$nodes" | while read node; do
  # 分割节点信息
  hostname=$(echo $node | awk '{print $1}')
  partition=$(echo $node | awk '{print $2}')
  state=$(echo $node | awk '{print $3}')
  num_cpu=$(echo $node | awk '{print $4}')
  cpuload=$(echo $node | awk '{print $5}')
  memsize=$(echo $node | awk '{print $6}')
  freemem=$(echo $node | awk '{print $7}')
  gres=$(echo $node | awk '{print $8}')

  # 获取与当前节点关联的作业列表
  joblist=$(squeue -h -o "%i %u %b" -w $hostname | awk -v ORS=' ' '{print $1, $2, $3}')

  # 根据状态设置颜色
  if [[ $state == "idle" ]]; then
    state_color=$GREEN
  else
    state_color=$RED
  fi

  # 输出整理好的信息
  printf "%-15s %-12s ${state_color}%-11s${NC} %-15s %-8s %-12s %-12s %-15s %-s\n" $hostname $partition $state $num_cpu $cpuload $memsize $freemem $gres "$joblist"
done

看起来很复杂对吗?但是有了GPT以后,这个难度大大降低了,你只需要知道自己想要什么样子的,对他进行一个详细的描述,GPT就可以为你生成了。但是正如我之前所说,GPT只能做你知道的事情,做不到你不知道的事情。它只能像一个增益器,而不是你的替代品,因此自己的知识储备才是真本事。

如果需要每个用户能用

需要把show_clauster.sh这个文件放入/etc/profile.d文件夹下,并且使用命令chmod 777 show_clauster.sh让其变为每个人都可以调用。

这样,按道理而言,每次用户使用ssh登录的时候就会有提示了。如果没有的话,可以使用source /ect/profile的命令将其调用。

文章来源:https://blog.csdn.net/qq_35082030/article/details/135401537
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。