一.slurm简介
Slurm(Simple Linux Utility for Resource Management, http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统。超级计算系统可利用Slurm对资源和作业进行管理,以避免相互干扰,提高运行效率。所有需运行的作业,无论是用于程序调试还是业务计算,都可以通过交互式并行 srun 、批处理式 sbatch 或分配式 salloc 等命令提交,提交后可以利用相关命令查询作业状态等
二.slurm架构
Slurm采用slurmctld服务(守护进程)作为中心管理器用于监测资源和作业,为了提高可用性,还可以配置另一个备份冗余管理器。各计算节点需启动slurmd守护进程,以便被用于作为远程shell使用:等待作业、执行作业、返回状态、再等待更多作业。slurmdbd(Slurm DataBase Daemon)数据库守护进程(非必需,建议采用,也可以记录到纯文本中等),可以将多个slurm管理的集群的记账信息记录在同一个数据库中。还可以启用slurmrestd(Slurm REST API Daemon)服务(非必需),该服务可以通过REST API与Slurm进行交互,所有功能都对应的API。用户工具包含 srun 运行作业、 scancel 终止排队中或运行中的作业、 sinfo 查看系统状态、 squeue 查看作业状态、 sacct 查看运行中或结束了的作业及作业步信息等命令。 sview 命令可以图形化显示系统和作业状态(可含有网络拓扑)。 scontrol 作为管理工具,可以监控、修改集群的配置和状态信息等。用于管理数据库的命令是 sacctmgr ,可认证集群、有效用户、有效记账账户等
![image-20250113135248629]()
三.slurm 组件
节点
Head Node:头节点、管理节点、控制节点,运行slurmctld管理服务的节点。
Compute Node:计算节点,运行作业计算任务的节点,需运行slurmd服务。
Login Node:用户登录节点,用于用户登录的节点。
SlurmDBD Node:SlurmDBD节点、SlurmDBD数据库节点,存储调度策略、记账和作业等信息的节点,需运行slurmdbd服务。
客户节点:含计算节点和用户登录节点。
用户
account:账户,一个账户可以含有多个用户。
user:用户,多个用户可以共享一个账户。
bank account:银行账户,对应机时费等。
资源
GRES:Generic Resource,通用资源。
TRES:Trackable RESources,可追踪资源。
QOS:Quality of Service,服务质量,作业优先级。
association:关联。可利用其实现,如用户的关联不在数据库中,这将阻止用户运行作业。该选项可以阻止用户访问无效账户。
Partition:队列、分区。用于对计算节点、作业并行规模、作业时长、用户等进行分组管理,以合理分配资源。
插件¶
Slurm含有一些通用目的插件可以使用,采用这些插件可以方便地支持多种基础结构,允许利用构建块方式吸纳多种Slurm配置,主要包括如下插件:
记账存储(Accounting Storage):主要用于存储作业历史数据。当采用SlurmDBD时,可以支持有限的基于系统的历史系统状态。
账户收集能源(Account Gather Energy):收集系统中每个作业或节点的能源(电力)消耗,该插件与记账存储Accounting Storage和作业记账收集Job Account Gather插件一起使用。
通信认证(Authentication of communications):提供在Slurm不同组件之间进行认证机制。
容器(Containers):HPC作业负载容器支持及实现。
信用(Credential,数字签名生成,Digital Signature Generation):用于生成电子签名的机制,可用于验证作业步在某节点上具有执行权限。与用于身份验证的插件不同,因为作业步请求从用户的 srun 命令发送,而不是直接从slurmctld守护进程发送,该守护进程将生成作业步凭据及其数字签名。
通用资源(Generic Resources):提供用于控制通用资源(如GPU)的接口。
作业提交(Job Submit):该插件提供特殊控制,以允许站点覆盖作业在提交和更新时提出的需求。
作业记账收集(Job Accounting Gather):收集作业步资源使用数据。
作业完成记录(Job Completion Logging):记录作业完成数据,一般是记账存储插件的子数据集。
启动器(Launchers):控制srun启动任务时的机制。
MPI:针对多种MPI实现提供不同钩子,可用于设置MPI环境变量等。
抢占(Preempt):决定哪些作业可以抢占其它作业以及所采用的抢占机制。
优先级(Priority):在作业提交时赋予作业优先级,且在运行中生效(如,它们生命期)。
进程追踪(Process tracking,为了信号控制):提供用于确认各作业关联的进程,可用于作业记账及信号控制。
调度器(Scheduler):用于决定Slurm何时及如何调度作业的插件。
节点选择(Node selection):用于决定作业分配的资源插件。
站点因子(Site Factor,站点优先级):将作业多因子组件中的特殊的site_factor优先级在作业提交时赋予作业,且在运行中生效(如,它们生命期)。
交换及互联(Switch or interconnect):用于网络交换和互联接口的插件。对于多数网络系统(以太网或InifiniBand)并不需要。
作业亲和性(Task Affinity):提供一种用于将作业和其独立的任务绑定到特定处理器的机制。
网络拓扑(Network Topology):基于网络拓扑提供资源选择优化,用于作业分配和提前预留资源。
四.配置模式
slurm 两种配置模式
传统模式:客户节点采用 /etc/slurm/ 目录下的 slurm.conf 等配置文件进行配置。
无配置(configless)模式:客户节点无需配置 /etc/slurm 目录下相应的配置文件
无配置文件介绍https://slurm.schedmd.com/configless_slurm.html
环境准备
集群名:MyCluster
管理节点admin:
内网IP:191.168.1.254
/opt/ 目录:通过NFS网络共享给其它节点使用
配置文件: /etc/slurm/ 目录下的 cgroup.conf 、 slurm.conf 、 slurmdbd.conf 等文件
需要启动(按顺序)的守护进程服务:
-通信认证:munge
-系统数据库:mariadb(也可采用文本保存,更简单,本文不涉及)
-Slurm数据库:slurmdbd
-主控管理器:slurmctld
数据库节点(运行slurmdbd服务)admin:
可与管理节点共用,本文档与管理节点共用
用户登录节点login:
内网IP:191.168.1.250
/opt/ 目录:通过NFS服务共享管理节点上的 /opt/ 目录
计算节点node[1-10]:
内网IP:191.168.1.[1-10
/opt/ 目录:通过NFS服务共享管理节点上的 /opt/ 目录
需要启动(按顺序)的服务:
-通信认证:munge
-Slurm数据库:slurmdbd
各节点node[1-10],login:
-admin节点root用户可以通过密钥无需输入密码ssh进入各节点
-安装好munge包
-配置有NIS或LDAP等用户信息服务同步admin节点用户信息(管理节点建立slurm用户后,各节点执行 id slurm 可确认其slurm用户是否存在)
并行操作:
各节点执行同样命令可以利用 pdsh 命令或for循环处理:
-如需安装PDSH并行shell包,可利用源 http://mirrors.ustc.edu.cn/epel/ 进行安装配置。
-在node[1-10]节点执行 id slurm 可用下述命令之一:
pdsh: pdsh -w node[1-10] id slurm
for循环: for i in `seq 1 10`; do ssh node$i id slurm; done
-复制 /etc/hosts 文件到node[1-3,5,7-10]节点 /etc 目录下可执行下述命令之一:
pdsh: pdcp -w node[1-3,5,7-10] /etc/hosts /etc
for循环: for i in `seq 1 10`; do scp -a /etc/hosts node$i:/etc/; done
管理服务的常用命令(以slurmd为例):
设置开机自启动服务: systemctl enable slurmd
启动服务: systemctl start slurmd
重新启动服务: systemctl restart slurmd
停止服务: systemctl stop slurmd
查看服务状态及出错信息: systemctl status slurmd
查看服务日志: journalctl -xe
五.安装slurm
一、Slurm 安装与配置规划
在Ubuntu22.04上亲自实践安装Slurm21.08.8.,按照本教程顺利安装。(注意:服务端可以免密登录客户端)
二、服务端安装(172.23.10.32)
1.安装必要库文件
sudo su
apt-get install make hwloc libhwloc-dev libmunge-dev libmunge2 munge mariadb-server libmysqlclient-dev -y
2.启动munge服务
systemctl enable munge // 设置munge开机自启动
systemctl start munge // 启动munge服务
systemctl status munge // 查看munge状态
生成密钥信息
#等待随机数据 (推荐给偏执狂):
dd if=/dev/random bs=1 count=1024 >/etc/munge/munge.key
新建用户并修改文件所属用户(全部节点)注意:客户端也需要同样的操作,在客户端安装好必要的软件之后
#新建用户及其主目录和登录shell
useradd munge -m -s /bin/bash
#给用户赋密码
passwd munge
#修改目录属主
chown -R munge.munge /var/{lib,log,run}/munge
chown -R munge.munge /etc/munge
#修改目录模式
chmod 711 /var/lib/munge
chmod 700 /var/log/munge
chmod 755 /var/run/munge
chmod 700 /etc/munge
chmod 400 /etc/munge/munge.key
拷贝密钥(主节点)
#拷贝主节点密钥到其余节点
scp /etc/munge/munge.key munge@ip:/etc/munge
重启munge服务
systemctl restart munge
3.编译安装slurm
# 将slurm-21.08.8.tar.bz2源码包放置在/home/dlmu/package目录下
cd /home/dlmu/package
tar -jxvf slurm-21.08.8.tar.bz2
cd slurm-21.08.8/
./configure --prefix=/opt/slurm/21.08.8 --sysconfdir=/opt/slurm/21.08.8/etc
make -j16
make install
4.配置数据库
cp -r etc/slurm*.service /etc/systemd/system/
systemctl enable mariadb // 设置mariadb开机自启动
systemctl start mariadb // 启动mariadb服务
systemctl status mariadb // 查看mariadb状态
进入数据库
mysql
CREATE USER 'slurm'@'localhost' IDENTIFIED BY '密码';
GRANT ALL ON *.* TO 'slurm'@'localhost';
create database slurm_acct_db;
grant all on slurm_acct_db.* to 'slurm'@'localhost' identified by '密码' with grant option;
exit;
5. 修改slurm 服务端的配置文件
mkdir /opt/slurm/21.08.8/etc
在/opt/slurm/21.08.8/etc 下创建cgroup.conf文件:(原封不动的粘进去)
###
#
# Slurm cgroup support configuration file
#
# See man slurm.conf and man cgroup.conf for further
# information on cgroup configuration parameters
#--
CgroupAutomount=yes
ConstrainCores=no
ConstrainRAMSpace=no
在/opt/slurm/21.08.8/etc 下创建slurm.conf文件:(原封不动的粘进去,一些密码需要修改 )这个配置文件,实现了 gpus 的限制,以及队列的分配,
#
# Example slurm.conf file. Please run configurator.html
# (in doc/html) to build a configuration file customized
# for your environment.
#
#
# slurm.conf file generated by configurator.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ClusterName=hpc01
SlurmctldHost=aictrl3
#SlurmctldHost=
#
MpiDefault=none
ProctrackType=proctrack/cgroup
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmdUser=root
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
TaskPlugin=task/affinity
#
#
# TIMERS
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=120
SlurmdTimeout=300
Waittime=0
# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory
#
#
# JOB PRIORITY
AccountingStorageEnforce=qos,limits
AccountingStorageHost=localhost
AccountingStoragePass=/var/run/munge/munge.socket.2
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageTRES=gres/gpu
JobCompHost=localhost
JobCompLoc=slurm_acct_db
JobCompPass=123456
JobCompType=jobcomp/none
JobCompUser=slurm
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/linux
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurmd.log
GresTypes=gpu
NodeName=aiwkr1 RealMemory=1000000 Gres=gpu:8 State=UNKNOWN Sockets=2 CoresPerSocket=32 CPUs=64
NodeName=aiwkr2 RealMemory=1000000 Gres=gpu:8 State=UNKNOWN Sockets=2 CoresPerSocket=32 CPUs=64
NodeName=aiwkr3 RealMemory=1000000 Gres=gpu:8 State=UNKNOWN Sockets=2 CoresPerSocket=32 CPUs=64
PartitionName=gpu1 Nodes=aiwkr[1-3] Default=YES MaxTime=168:00:00 State=UP
PartitionName=gpu2-8 Nodes=aiwkr[1-3] Default=YES MaxTime=168:00:00 State=UP
PartitionName=cpu Nodes=aiwkr[1-3] Default=YES MaxTime=168:00:00 State=UP
在/opt/slurm/21.08.8/etc 下创建gres.conf文件:在服务端里面不放任何内容
在/opt/slurm/21.08.8/etc 下创建slurmdbd.conf文件(原封不动粘进去,一些密码需要修改)
AuthType=auth/munge
AuthInfo=/var/run/munge/munge.socket.2
#
# slurmDBD info
DbdAddr=127.0.0.1
DbdHost=localhost
#DbdPort=7031
SlurmUser=root
#MessageTimeout=300
DebugLevel=verbose
#DefaultQOS=normal,standby
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
#PluginDir=/usr/lib/slurm
#PrivateData=accounts,users,usage,jobs
#TrackWCKey=yes
#
# Database info
StorageType=accounting_storage/mysql
StorageHost=localhost
StoragePort=3306
StoragePass=123456
StorageUser=slurm
StorageLoc=slurm_acct_db
6.启动slurm服务
在服务端只需要启动 slurmdbd slurmctld
systemctl enable slurmdbd
systemctl start slurmdbd
systemctl status slurmdbd
systemctl enable slurmctld
systemctl start slurmctld
systemctl status slurmctld
7.配置slurm
SLURMPATH=/opt/slurm/21.08.8
echo "export PATH=\$PATH:$SLURMPATH/bin:$SLURMPATH/sbin" >> /etc/bash.bashrc
source /etc/bash.bashrc
三、客户端安装(172.23.10.33)
1.安装必要库文件
sudo su
apt-get install make hwloc libhwloc-dev libmunge-dev libmunge2 munge -y
2.启动munge服务
systemctl enable munge // 设置munge开机自启动
systemctl start munge // 启动munge服务
systemctl status munge // 查看munge状态
新建用户并修改文件所属用户
#新建用户及其主目录和登录shell
useradd munge -m -s /bin/bash
#给用户赋密码
passwd munge
#修改目录属主
chown -R munge.munge /var/{lib,log,run}/munge
chown -R munge.munge /etc/munge
#修改目录模式
chmod 711 /var/lib/munge
chmod 700 /var/log/munge
chmod 755 /var/run/munge
chmod 700 /etc/munge
chmod 400 /etc/munge/munge.key
重启munge服务
systemctl restart munge
3.编译安装slurm
# 将slurm-21.08.8.tar.bz2源码包放置在/home/dlmu/package目录下
cd /home/dlmu/package
tar -jxvf slurm-21.08.8.tar.bz2
cd slurm-21.08.8/
./configure --prefix=/opt/slurm/21.08.8 --sysconfdir=/opt/slurm/21.08.8/etc
make -j16
make install
4. 修改slurm 客户端的配置文件
mkdir /opt/slurm/21.08.8/etc
在/opt/slurm/21.08.8/etc 下创建cgroup.conf文件:(原封不动的粘进去)
###
#
# Slurm cgroup support configuration file
#
# See man slurm.conf and man cgroup.conf for further
# information on cgroup configuration parameters
#--
CgroupAutomount=yes
ConstrainCores=no
ConstrainRAMSpace=no
在/opt/slurm/21.08.8/etc 下创建slurm.conf文件:(原封不动的粘进去,一些密码需要修改 )这个配置文件,实现了 gpus 的限制,以及队列的分配,
#
# Example slurm.conf file. Please run configurator.html
# (in doc/html) to build a configuration file customized
# for your environment.
#
#
# slurm.conf file generated by configurator.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ClusterName=hpc01
SlurmctldHost=aictrl3
#SlurmctldHost=
#
MpiDefault=none
ProctrackType=proctrack/cgroup
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmdUser=root
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
TaskPlugin=task/affinity
#
#
# TIMERS
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=120
SlurmdTimeout=300
Waittime=0
# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory
#
#
# JOB PRIORITY
AccountingStorageEnforce=qos,limits
AccountingStorageHost=localhost
AccountingStoragePass=/var/run/munge/munge.socket.2
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageTRES=gres/gpu
JobCompHost=localhost
JobCompLoc=slurm_acct_db
JobCompPass=123456
JobCompType=jobcomp/none
JobCompUser=slurm
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/linux
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurmd.log
GresTypes=gpu
NodeName=aiwkr1 RealMemory=1000000 Gres=gpu:8 State=UNKNOWN Sockets=2 CoresPerSocket=32 CPUs=64
NodeName=aiwkr2 RealMemory=1000000 Gres=gpu:8 State=UNKNOWN Sockets=2 CoresPerSocket=32 CPUs=64
NodeName=aiwkr3 RealMemory=1000000 Gres=gpu:8 State=UNKNOWN Sockets=2 CoresPerSocket=32 CPUs=64
PartitionName=gpu1 Nodes=aiwkr[1-3] Default=YES MaxTime=168:00:00 State=UP
PartitionName=gpu2-8 Nodes=aiwkr[1-3] Default=YES MaxTime=168:00:00 State=UP
PartitionName=cpu Nodes=aiwkr[1-3] Default=YES MaxTime=168:00:00 State=UP
在/opt/slurm/21.08.8/etc 下创建gres.conf文件:
Name=gpu Type=A800 File=/dev/nvidia[0-7]
在/opt/slurm/21.08.8/etc 下创建slurmdbd.conf文件(原封不动粘进去,一些密码需要修改)
AuthType=auth/munge
AuthInfo=/var/run/munge/munge.socket.2
#
# slurmDBD info
DbdAddr=127.0.0.1
DbdHost=localhost
#DbdPort=7031
SlurmUser=root
#MessageTimeout=300
DebugLevel=verbose
#DefaultQOS=normal,standby
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
#PluginDir=/usr/lib/slurm
#PrivateData=accounts,users,usage,jobs
#TrackWCKey=yes
#
# Database info
StorageType=accounting_storage/mysql
StorageHost=localhost
StoragePort=3306
StoragePass=123456
StorageUser=slurm
StorageLoc=slurm_acct_db
5.启动slurm服务
在客户端只需要启动slurmd
systemctl enable slurmd
systemctl start slurmd
systemctl status slurmd
6.配置slurm
SLURMPATH=/opt/slurm/21.08.8
echo "export PATH=\$PATH:$SLURMPATH/bin:$SLURMPATH/sbin" >> /etc/bash.bashrc
source /etc/bash.bashrc
六.slurm基础命令
1.管理分区与节点的状态
sinfo
#格式化输出sinfo -N -o "%8P %3N %.6D %.11T %12C %.8z %.6m %.8d %.6w %.8f %20E"
-s 简要格式输出
-N 显示每个节点的信息
-p <partition> 只显示特定分区的信息
输出字段:
PARTITION: 分区名称
AVAIL: 节点可用性状态(up/down)
TIMELIMIT: 分区的时间限制
NODES: 分区中的节点数量
STATE: 节点状态:drain(节点故障),alloc(节点在用),idle(节点可用),down(节点下线),mix(节点被占用,但仍有剩余资源)
NODELIST: 节点名称列表
2.查看配置
scontrol show job <jobid>: 显示作业细节
用途: 提供有关特定作业的详细信息,包括作业配置和当前状态。
示例:
scontrol show job 1234
3.查看分区
scontrol show partition
4.查看节点
scontrol show node
5.查看作业
#查看所有作业
scontrol show jobs
#具体查看某个作业
scontrol show job jobid --名称+查看作业id
6.提交单个作业
srun hostname
srun -N 2 -l hostname
srun sleep 60 &
7.sbatch提交作业
用途: 提交批处理作业脚本。
示例:
1.sbatch my_job_script.sh
常用选项:
--job-name=<name> 设置作业名称
--partition=<partition> 指定作业提交的分区
--time=<time> 设置作业运行时间限制
8.作业跟踪
要查看您提交的作业的状态,可以使用 squeue 命令。这个命令提供了作业的队列状态、运行状态等信息。通过 squeue,您可以实时监控作业的执行情况。
----
# 查看某个作业,须知道jobid
scontrol show job ${JOBID}
# 查看某用户的作业
squeue -u ${USERNAME}
9.更新任务
我们可以使用scontrol update选项来更新已提交的作业,示例如下
# 使用方法:
scontrol update jobid=${JOBID} <TAB> <TAB>
# 举例:
scontrol update jobid=938 partition=gpu gres=gpu:1
10.取消作业 scancel
.用途: 取消一个或者多个作业
.实例:
# 取消具体某作业id对应作业
scancel ${jobid}
# 取消某用户的作业
scancel -u ${username}
.选项:
-u <username> 取消特定用户的所有作业
-p <partition> 取消特定分区中的作业
11.sacct显示用户作业历史
1)用途: 查询历史记录,显示已完成和正在进行的作业信息
2)选项:
-j <jobid> 查询特定作业
-S <YYYY-MM-DD> 查询指定开始日期的作业
-u <username> 查询特定用户的作业
3)输出字段:
.JobID:作业ID
.JobName:作业名称
.Partition:分区名称
.Account:用户账户
.State:作业状态
.Elapsed;作业运行状态
---
12)
scontrol 管理slurm系统
.用途 用于查询和更改slurm系统的配置和状态
常用命令
. scontrol show partition 显示分区信息
. scontrol update NodeName=<node> State=RESUME 恢复节点
# 将节点从drain状态恢复,使其能够接受新作业
scontrol update node=节点 state=resume
#将节点设置为drain状态以进行维护或调试,提供原因
scontrol update node=节点 state=drain reason="yanshieir"
13.squeue:显示当前作业状态
.用途:显示当前在队列排队和运行的作业标签
.选项:
.-u <username> 只显示特定用户的作业
.-p <partition> 只显示特定分区的作业
输出字段:
JOBID: 作业ID
PARTITION: 分区名称
NAME: 作业名称
USER: 用户名
ST: 作业状态(PD排队;R运行;S挂起;CG正在退出)
TIME: 作业运行时间
NODES: 作业使用的节点数量
NODELIST(REASON): 作业所在节点或排队原因
14.pestat:节点使用信息
.用途:显示集群节点和使用情况和状态信息
.实例:
pestat
15.seff<jobid>:查看已完成任务的资源使用情况
.用途;查看特定作业的详细信息,包括如何完成或失败
.实例:
sacct -j 12345
七.slurm配置文件
1.Slurm配置文件
Slurm的配置文件是Slurm集群管理的核心,通常名为slurm.conf。这个文件位于Slurm安装目录的etc子目录下/etc/slurm/slurm.conf。 配置文件中包含了集群的重要设置,如节点定义、分区配置、调度策略等。
配置文件结构
Slurm配置文件通常包含以下几个关键部分:
#控制节点:定义Slurm控制守护进程的主机。
#计算节点:定义集群中的计算节点及其属性。
#分区:定义作业分区,用于组织和管理作业队列。
#调度策略:设置作业调度的参数和策略。
编辑配置文件
编辑配置文件时,需要具备管理员权限。修改配置后,通常需要重启Slurm守护进程以应用更改。为确保配置的正确性,建议在修改前备份原始文件。
vim /etc/slurm/slurm.conf
#
# Example slurm.conf file. Please run configurator.html
# (in doc/html) to build a configuration file customized
# for your environment.
#
#
# slurm.conf file generated by configurator.html.
#
# See the slurm.conf man page for more information.
#
ClusterName=develop
ControlMachine=master01 --指定主控节点名称
ControlAddr=10.10.12.10 --指定主控节点IP地址
#BackupController= --备用节点
#BackupAddr= --备用节点IP
#
SlurmUser=root
SlurmdUser=root
SlurmctldPort=6817
SlurmdPort=6818
AuthType=auth/munge --内部认证类型
#JobCredentialPrivateKey=
#JobCredentialPublicCertificate=
StateSaveLocation=/var/spool/slurm/ctld
SlurmdSpoolDir=/var/spool/slurm/d
SwitchType=switch/none
MpiDefault=none
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
ProctrackType=proctrack/pgid
#PluginDir=
#FirstJobId=
ReturnToService=2
#MaxJobCount=
#PlugStackConfig=
#PropagatePrioProcess=
#PropagateResourceLimits=
#PropagateResourceLimitsExcept=
#Prolog=
#Epilog=
#SrunProlog=
#SrunEpilog=
#TaskProlog=
#TaskEpilog=
#TaskPlugin=
#TrackWCKey=no
#TreeWidth=50
#TmpFS=
#UsePAM=
#
# TIMERS
SlurmctldTimeout=300
SlurmdTimeout=300
InactiveLimit=0
MinJobAge=300
KillWait=30
Waittime=0
#
# SCHEDULING
SchedulerType=sched/backfill
#SchedulerAuth=
#SelectType=select/linear
FastSchedule=1
#PriorityType=priority/multifactor
#PriorityDecayHalfLife=14-0
#PriorityUsageResetPeriod=14-0
#PriorityWeightFairshare=100000
#PriorityWeightAge=1000
#PriorityWeightPartition=10000
#PriorityWeightJobSize=1000
#PriorityMaxAge=1-0
#
# LOGGING
SlurmctldDebug=3
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdDebug=3
SlurmdLogFile=/var/log/slurmd.log
#JobCompType=jobcomp/none
#JobCompLoc=
#
# ACCOUNTING
#JobAcctGatherType=jobacct_gather/linux
#JobAcctGatherFrequency=30
#
#AccountingStorageType=accounting_storage/slurmdbd
#AccountingStorageHost=
#AccountingStorageLoc=
#AccountingStoragePass=
#AccountingStorageUser=
#
AccountingStorageTRES=gres/gpu
DebugFlags=CPU_Bind,gres
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageHost=slurmmaster
AccountingStorageLoc=slurm
AccountingStoragePort=7031
AccountingStoragePass=/var/run/munge/munge.socket.2
AccountingStorageUser=slurm
# COMPUTE NODES
NodeName=master01 NodeAddr=10.10.12.10 CPUs=2 Procs=1 State=UNKNOWN
NodeName=client01 NodeAddr=10.10.12.11 CPUs=2 Procs=1 State=UNKNOWN
NodeName=client02 NodeAddr=10.10.12.12 CPUs=2 Procs=1 State=UNKNOWN
PartitionName=control Nodes=master01 Default=YES MaxTime=INFINITE State=UP
PartitionName=compute Nodes=client01,client02 Default=YES MaxTime=INFINITE State=UP
JobCompHost=127.0.0.1
JobCompLoc=mysql
JobCompPass=147258
JobCompPORT=3306
JobCompType=jobcomp/mysql
JobCompUser=root
————————————————
# slurm.conf file generated by configurator.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
ControlMachine= #主用节点名
ControlAddr= #主用节点IP
#BackupController= #备用节点
#BackupAddr= #备用节点IP
AuthType=auth/munge #内部认证
CacheGroups=0
#CheckpointType=checkpoint/none
CryptoType=crypto/munge
#DisableRootJobs=NO
#EnforcePartLimits=NO
#Epilog=/opt/slurm18/etc/slurm.epilog
#Prolog=/opt/slurm18/etc/slurm.prolog
#EpilogSlurmctld=/opt/slurm18/etc/slurmctld.epilog
#PrologSlurmctld=/opt/slurm18/etc/slurmctld.prolog
#SrunEpilog=
#SrunProlog=
#TaskEpilog=/opt/slurm18/etc/slurm.epilog
#TaskProlog=/opt/slurm18/etc/slurm.prolog
#FirstJobId=1
#MaxJobId=999999
#GresTypes=
#GroupUpdateForce=0
#GroupUpdateTime=600
#JobCheckpointDir=/opt/slurm18/checkpoint
#JobCredentialPrivateKey=
#JobCredentialPublicCertificate=
#JobFileAppend=0
#JobRequeue=1
#JobSubmitPlugins=1
#JobSubmitPlugins=lua #提交参数过滤
#KillOnBadExit=0 #异常作业清理
#LaunchType=launch/slurm
#Licenses=foo*4,bar
#MailProg=/bin/mail
MaxJobCount=3000000 #最大作业数300万
#MaxStepCount=40000
#MaxTasksPerNode=128
MpiDefault=none
#MpiParams=ports=#-#
#MpiParams=ports=12000-12999
#PluginDir=
#PlugStackConfig=
#PrivateData=jobs
#ProctrackType=proctrack/pgid
ProctrackType=proctrack/linuxproc #进程跟踪插件
PrologFlags=Alloc
#RebootProgram=
ReturnToService=2 #禁用自动恢复
#SallocDefaultCommand=
#SlurmctldPidFile=/opt/slurm18/run/slurmctld.pid
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817 # 主控服务端口
#SlurmdPidFile=/opt/slurm18/run/slurmd.pid
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=9601 #计算代理端口
SlurmdSpoolDir=/opt/slurm18/spool/slurmd # 计算代理缓存
SlurmUser=root #运行用户
#SlurmdUser=root # slurmd运行用户
StateSaveLocation=/opt/slurm18/spool # slurmctld本地文件缓存
SwitchType=switch/none
TaskPlugin=task/affinity # 资源控制方式cpuset
#TaskPlugin=task/cgroup # 资源控制方式cgroups
#TaskPlugin=task/none # 无特殊资源控制方式
#TaskPluginParam=
TaskPluginParam=sched
#TopologyPlugin=topology/tree #拓扑调度tree
#TopologyPlugin=topology/3d_torus #拓扑调度3d_torus
#TmpFS=/tmp
#TrackWCKey=no
#TreeWidth=
#UnkillableStepProgram=
#UsePAM=0
# TIMERS
#BatchStartTimeout=10
#CompleteWait=0
#EpilogMsgTime=2000
#GetEnvTimeout=2
#HealthCheckInterval=60 #检查间隔
#HealthCheckProgram=/usr/sbin/nhc #检查工具
InactiveLimit=0
KillWait=30
MessageTimeout=30
#ResvOverRun=0
MinJobAge=300 #完成作业保留时间
#OverTimeLimit=0
SlurmctldTimeout=30 #主备切换时间
SlurmdTimeout=300 #计算代理响应时间
#UnkillableStepTimeout=60
#VSizeFactor=0
Waittime=0
# SCHEDULING
#DefMemPerNode=100
#MaxMemPerNode=200
#DefMemPerCPU=30
#DefMemPerCPU=30
#MaxMemPerCPU=70
FastSchedule=1 #快速调度作业
#MaxMemPerCPU=60
#SchedulerRootFilter=1
#SchedulerTimeSlice=30
SchedulerType=sched/backfill #启用回填调度
#SchedulerType=sched/builtin #启用FIFO调度
SchedulerPort=7321 #调度器端口
SelectType=select/cons_res #资源选择算法
SelectTypeParameters=CR_Core #基于Core调度
#SelectTypeParameters=CR_Core_Memory #基于Core和内存调度
#SchedulerParameters=defer,default_queue_depth=50,bf_max_job_test=50
SchedulerParameters=batch_sched_delay=3,defer,sched_min_interval=10,sched_interval=30,default_queue_depth=100,bf_max_job_test=100,bf_interval=30
# 作业优先级
#PriorityFlags=
#PriorityType=priority/multifactor #优先级策略
#PriorityDecayHalfLife=30 #半衰期时长
#PriorityCalcPeriod=5 #FS统计间隔
#PriorityFavorSmall=
#PriorityMaxAge=
#PriorityUsageResetPeriod=
#PriorityWeightAge=
#PriorityWeightFairshare=1000 #FS权重
#PriorityWeightJobSize= #JobSize权重
#PriorityWeightPartition=1000 #分区权重
#PriorityWeightQOS= #QOS权重
# only permitted in slurmdbd.conf
#AccountingStorageType=accounting_storage/none
#AccountingStorageType=accounting_storage/filetxt
#AccountingStorageType=accounting_storage/mysql
AccountingStorageType=accounting_storage/slurmdbd #启用slurmdbd
AccountingStorageUser=root #记账服务
AccountingStoreJobComment=YES #记录作业注释
ClusterName=cluster_gv171 #集群名
# LOGGING AND ACCOUNTING
#AccountingStorageEnforce=0
AccountingStorageEnforce=associations,limits #组织关联和资源限制
AccountingStorageHost= #主用记账服务
#AccountingStorageBackupHost= #备用记账服务
#AccountingStorageLoc=/opt/slurm18/accounting/accounting
#AccountingStorageLoc=gv_slurm_db
#AccountingStoragePass=111111
AccountingStoragePort=7031 #记账服务端口
#DebugFlags=NO_CONF_HASH # 调试标识
#JobCompHost=localhost
#JobCompLoc=/opt/slurm18/job_completions/job_completions
#JobCompLoc=gv_slurm_db
#JobCompPass=111111
#JobCompPort=3309
JobCompType=jobcomp/none #禁止生成comp日志
#JobCompType=jobcomp/mysql
#JobCompType=jobcomp/filetxt
#JobCompType=jobcomp/slurmdbd
JobCompUser=root
#JobContainerType=job_container/none
JobAcctGatherFrequency=300 #作业采集间隔
#JobAcctGatherType=jobacct_gather/none
JobAcctGatherType=jobacct_gather/linux #启用Linux插件
JobRequeue=1 # 允许重新排队
SlurmctldDebug=3 #slurmctld日志级别
SlurmctldLogFile=/opt/slurm18/log/slurmctld.log #管理节点日志
SlurmdDebug=3 #slurmd日志级别
SlurmdLogFile=/opt/slurm18/log/slurmd_%h.log #计算节点日志
#SlurmdLogFile=/opt/slurm18/log/slurmd.log
PreemptMode=requeue,gang #抢占策略
PreemptType=preempt/partition_prio #队列优先级
# POWER SAVE SUPPORT FOR IDLE NODES (optional)
#SuspendProgram=
#ResumeProgram=
#SuspendTimeout=
#ResumeTimeout=
#ResumeRate=
#SuspendExcNodes=
#SuspendExcParts=
#SuspendRate=
SuspendTime=1800
PrivateData=accounts,events,jobs,reservations,usage,users # 权限控制
#GresTypes=gpu,mic
DebugFlags=NO_CONF_HASH
# COMPUTE NODES
NodeName=gv245 CPUs=2 State=IDLE
PartitionName=debug Default=YES PriorityTier=6000 State=UP MaxTime=INFINITE Nodes=ALL ##可以通过命令 slurmd -C 获得