slurm简介

一.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 获得
posted @   颜十二  阅读(91)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示