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

引言

slurm系统是一个集群,它原生的使用方式可以参考之前写的《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 /etc/profile的命令将其调用。

Slurm 是一个开源的高性能计算集群管理系统,用于在大规模计算环境中调度、管理和监控作业。下面是一些关于如何部署 Slurm 集群的基本教程: ## 1. 安装 Slurm 首先,需要在所有计算节点和管理节点上安装 Slurm。可以通过源代码或二进制软件包进行安装。 ### 安装依赖 在安装 Slurm 之前,需要安装一些依赖,包括 Munge、OpenSSL、PAM、Numactl、MySQL 或 MariaDB、Python 等。可以通过以下命令安装这些依赖: ``` sudo apt-get update sudo apt-get install munge libmunge-dev openssl libssl-dev libpam0g-dev numactl \ mariadb-server libmysqlclient-dev python3-dev python3-pip ``` ### 安装 Slurm 可以从官方网站下载最新版本的 Slurm 源代码:https://www.schedmd.com/downloads.php。然后将源代码解压缩并进行编译和安装。 ``` tar xzf slurm-20.11.7.tar.gz cd slurm-20.11.7 ./configure --prefix=/usr/local make sudo make install ``` ## 2. 配置 Slurm 在安装完 Slurm 后,需要配置集群。主要包括以下步骤: ### 配置 Munge Slurm 需要 Munge 来进行身份验证和加密。需要在所有节点上安装 Munge,并生成一个共享密钥。 ``` sudo apt-get install munge sudo systemctl enable munge sudo systemctl start munge sudo /usr/sbin/munged --force sudo dd if=/dev/random bs=1 count=1024 >/etc/munge/munge.key sudo chmod 400 /etc/munge/munge.key sudo chown munge:munge /etc/munge/munge.key ``` 将生成的密钥复制到所有节点上。 ### 配置 Slurm 配置文件 Slurm 的配置文件为 `/usr/local/etc/slurm.conf`。可以使用以下命令创建一个基本的配置文件: ``` sudo mkdir -p /etc/slurm-llnl sudo cp /usr/local/etc/slurm.conf.example /etc/slurm-llnl/slurm.conf ``` 然后,编辑配置文件并根据需要进行更改。以下是一些常用的配置项: ``` ControlMachine=<管理节点IP地址> MpiDefault=none SlurmUser=<Slurm用户> SlurmdUser=<slurmd用户> AuthType=auth/munge CryptoType=crypto/munge ``` ### 配置 slurmdbd slurmdbd 是一个用于将作业信息和节点状态存储在数据库中的守护进程。需要在管理节点上安装 MySQL 或 MariaDB,并创建一个数据库和一个用户。 ``` sudo apt-get install mariadb-server libmysqlclient-dev sudo systemctl enable mariadb sudo systemctl start mariadb sudo mysql_secure_installation sudo mysql -u root -p ``` 在 MySQL 命令行界面上,输入以下命令来创建数据库和用户: ``` CREATE DATABASE slurm_acct_db; GRANT ALL ON slurm_acct_db.* TO 'slurm'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` 然后,编辑 `/etc/slurm-llnl/slurmdbd.conf` 文件,并根据需要进行更改。以下是一些常用的配置项: ``` DbdAddr=<管理节点IP地址> DbdHost=<管理节点主机名> StorageType=accounting_storage/mysql DbdUser=<MySQL用户名> DbdPass=<MySQL用户密码> DbName=slurm_acct_db ``` ### 配置节点 在每个计算节点上,需要编辑 `/etc/slurm-llnl/slurmd.conf` 文件,并根据需要进行更改。以下是一些常用的配置项: ``` ControlMachine=<管理节点IP地址> AuthType=auth/munge CryptoType=crypto/munge ``` 然后,启动 `slurmd` 守护进程: ``` sudo systemctl enable slurmd sudo systemctl start slurmd ``` ## 3. 启动 Slurm 在完成所有配置后,可以启动 Slurm。首先,需要启动 `slurmdbd` 守护进程: ``` sudo systemctl enable slurmdbd sudo systemctl start slurmdbd ``` 然后,在管理节点上启动 `slurmctld` 守护进程: ``` sudo systemctl enable slurmctld sudo systemctl start slurmctld ``` ## 4. 测试 Slurm 可以使用以下命令测试 Slurm 是否正常工作: ``` srun -N <节点数> -n <任务数> hostname ``` 例如: ``` srun -N 2 -n 4 hostname ``` 运行此命令后,应该会在终端上看到所有节点的主机名。如果一切正常,则表示 Slurm 已经正确安装和配置。 以上是一个基本的 Slurm 集群部署教程,如果需要更高级的配置和管理,请参考 Slurm 官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI让世界更懂你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值