作业调度开源软件Slurm的安装与使用。
Slurm,Simple Linux Utility for Resource Management。可以用于集群或者单机上,作为任务管理程序。
Slurm安装简单,使用便捷,以下介绍在Ubuntu 22.04上安装slurm,并进行配置。
sudo apt update
sudo apt install slurm-wlm
sudo apt install slurmd #启动、监控任务、分层通信
sudo apt install slurmctld #管理任务、故障切换、资源监控、队列管理、作业调度
代码如下(示例):
dpkg -L slurmctld | grep slurm-wlm-configurator.html
#/usr/share/doc/slurmctld/slurm-wlm-configurator.html
sudo chmod +r /usr/share/doc/slurmctld/slurm-wlm-configurator.html
cd /usr/share/doc/slurmctld
python3 -m http.server
#Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
浏览器打开,点击进入 slurm-wlm-configurator.html 按照配置需求填写以下必要设置。
SlurmctldHost: 计算机名(用hostname命令查看)
PartitionName: 分区名,比如设置为computing
cpus:cpu数量,线程数
Sockets: 指定cpu插槽数
CoresPerSocket: 每个插槽有多少core
ThreadsPerCore: 2
slurmuser:root
Process Tracking:选择 LinuxProc或者pgid
点击submit,生成slurm.conf网页。将内容保存到 /etc/slurm/slurm.conf
修改 sudo vim /etc/slurm/slurm.conf
修改 GresTypes:gpu
加入以下内容,保存
NodeName=XXX Gres=gpu:1 RealMemory=32000 Sockets=1 CoresPerSocket=8 ThreadsPerCore=2 State=UNKNOWN
PartitionName=computing Nodes=ALL Default=YES MaxTime=INFINITE State=UP
XXX:为hostname输出本机名称
Gres=gpu:1 ##GPU数量
RealMemory=32000 Sockets=1 CoresPerSocket=8 ThreadsPerCore=2 #表示32G内存,单颗CPU8核16线程
修改sudo vim /etc/slurm/gres.conf
##################################################################
# Slurm's Generic Resource (GRES) configuration file
# Define GPU device, with AutoDetect sanity checking
##################################################################
#AutoDetect=nvml
NodeName=XXX Name=gpu Type=K40 File=/dev/nvidia0
Type=K40 ## GPU型号
sudo mkdir /var/spool/slurmd
sudo mkdir /var/spool/slurmctld
依次启动程序:
sudo systemctl start slurmd
sudo systemctl enable slurmd
sudo systemctl status slurmd
sudo systemctl start slurmctld
sudo systemctl enable slurmctld
sudo systemctl status slurmctld
#赋予可读取写入权限:
sudo chmod -R 755 /var/lib/slurm/slurmd
sudo chmod -R 755 /var/lib/slurm/slurmctld
sudo chmod 755 /var/log/slurm/slurmd.log
sudo chmod 755 /var/log/slurm/slurmctld.log
#如果需要修改/etc/slurm/slurm.conf配置,需要依次重新启动:
sudo scontrol reconfig
sudo systemctl restart slurmd
sudo systemctl restart slurmctld
#如果启动失败,如下查看问题
sudo slurmd -Dvvv
分别为交互(srun),批处理(sbatch),分配(salloc),可使用的主要参数:
-c, --cpu-per-task=NCPUs #指定每个进程使用核数,不指定默认为1
-J, --job-name=JOBNAME #指定作业名称
-n, --ntask=NTASKs #指定总进程数;不使用cpus-per-task,可理解为进程数即为核数
--ntask-per-node=N #指定每个节点进程数/核数,使用-n参数后变为每个节点最多运行的进程数
-N, --nodes=N #指定节点数量
-o, --output=out_filename #指定输出文件输出
-p, --partion=computing #指定分区
-t, --time=dd-hh:mm:ss #作业最大运行时间
--mem-per-cpu=MB #指定计算cpu最大占用内存大小
--mail-type=END/FAIL/ALL #邮件提醒,可选:END,FAIL,ALL
--mail-user=mail_address #通知邮箱地址
批处理模式是指用户编写作业脚本,指定资源需求约束,提交后台执行作业。
运行提交任务后,工作目录中会生成以 slurm 开头的.out 文件为输出文件。
作业提交命令:sbatch filename
#!/bin/bash
#批处理脚本
#SBATCH --job-name=JOBNAME %指定作业名称
#SBATCH --partition=computing %指定分区
#SBATCH --nodes=2 %指定节点数量
#SBATCH --cpus-per-task=1 %指定每个进程使用核数,不指定默认为1
#SBATCH -n 32 %指定总进程数;不使用cpus-per-task,可理解为进程数即为核数
#SBATCH --ntasks-per-node=16 %指定每个节点进程数/核数,使用-n参数(优先级更高),变为每个节点最多运行的任务数
#SBATCH --time=dd-hh:mm:ss %作业最大运行时长,参考格式填写
#SBATCH --mail-type=ALL %邮件提醒,可选:END,FAIL,ALL
#SBATCH --mail-user=address %通知邮箱地址
###task###
Slurm 命令
Sinfo命令:
sinfo #查看所有分区状态
sinfo -a #查看所有分区状态
sinfo -N #查看节点状态
sinfo -n node-name #查看指定节点状态
sinfo --help #查看sinfo的说明
sudo scontrol update NodeName=XXX State=RESUME
scontrol show job JOBID #查看作业的详细信息
scontrol show node #查看所有节点详细信息
scontrol show node node-name #查看指定节点详细信息
scontrol show node | grep CPU #查看各节点cpu状态
scontrol show node node-name | grep CPU #查看指定节点cpu状态
作业提交后,可使用slurm命令,查看,取消,修改作业。
作业调度开源软件Slurm的安装与使用。