Slurm介绍
Slurm
是一种开源的,用于高性能计算集群管理系统的软件。它能够有效地管理计算资源的分配和任务调度,支持Linux
等操作系统,是HPC
领域中最受欢迎的调度器之一。Slurm
具有高可用性和可扩展性,易于使用,提供了丰富的命令行界面和API
,可以为科学研究和工程计算等领域提供高效的支持。
Slurm安装
为了方便演示在此我们采用的是虚拟机进行Slurm
的部署操作演示,故每个虚拟机的分配资源都是一样的,在实际使用中控制节点和计算节点应该是有所区别的。
操作系统:Centos 7.9
节点介绍:
- 控制节点(master:192.168.128.130,分配资源:2个CPU,每个CPU4个核心;内存2048MB)
- 计算节点1(work1:192.168.128.131,分配资源:2个CPU,每个CPU4个核心;内存2048MB)
- 计算节点2(work2:192.168.128.132,分配资源:2个CPU,每个CPU4个核心;内存2048MB)
Python版本
:Python3.8.6
Mysql
版本:8.0.32
Slurm
版本:20.11.9
网卡配置过程
将所有节点的IP地址
设置为静态IP。
修改配置文件/etc/sysconfig/network-scripts/ifcfg-ens33
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改为以下内容,注意网卡信息不要修改:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.128.130
NETMASK=255.255.255.0
GATEWAY=192.168.128.2
DNS1=192.168.128.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=d7c045a6-f74a-4ef2-9738-17d109179541 # 网卡信息,不要随便改
DEVICE=ens33
ONBOOT=yes
以上为控制节点配置文件,计算节点同理,在此不再赘述。
分别在三个节点中设置主机名
vim /etc/hosts
192.168.128.130 master
192.168.128.131 work1
192.168.128.132 work2
给各个节点设置hostname
hostnamectl set-hostname master # 在控制节点中运行
hostnamectl set-hostname work1 # 在work1计算节点中运行
hostnamectl set-hostname work2 # 在work2计算节点中运行
关闭防火墙
systemctl status firewalld # 查看防火墙状态
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 永久关闭防火墙
关闭Selinux
查看Selinux状态
getenforce
临时关闭,该方法重启服务器后又会恢复为Enforcing
。
setenforce 0
永久关闭Selinux,进入/etc/selinux/config
然后将Selinux的值设置为disabled
。
vim /etc/selinux/config
配置SSH免密登录
安装ssh
服务
yum install openssl openssh-server -y
配置ssh
服务
vim /etc/ssh/sshd_config
- 设置
PermitRootLogin=yes
- 设置
PasswordAuthentication=yes
- 设置
PubkeyAuthentication=yes
生成密钥对
ssh-keygen -t rsa # 连续3次回车
输入该代码后在/root/.ssh
文件夹下会生成一系列的公钥和私钥。
将导入公钥id_rsa.pub
导出,然后导入到其他计算节点中。
在每个计算节点中运行以下代码,将公钥导入到所有计算节点。
cat id_rsa.pub >> ~/.ssh/authorized_keys
验证ssh
是否可以免登录。
ssh work1
免登录成功。
配置时区
配置CST时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
同步NTP服务器
yum install ntp -y
systemctl start ntpd
systemctl enable ntpd
安装EPEL源
yum install http://mirrors.sohu.com/fedora-epel/epel-release-latest-7.noarch.rpm
配置NFS服务
控制节点配置
安装
yum install nfs-utils rpcbind -y
自启动服务
systemctl enable rpcbind
systemctl enable nfs-server
systemctl enable nfs-lock
systemctl enable nfs-idmap
启动服务
systemctl start rpcbind
systemctl start nfs-server
systemctl start nfs-lock
systemctl start nfs-idmap
配置共享目录复制
vim /etc/exports
添加以下内容
/share 192.168.128.0/24(rw,sync,no_root_squash)
使其生效
exportfs -a
计算节点配置
安装
yum install nfs-utils -y
检查控制节点共享目录
showmount -e 192.168.128.130
创建共享目录
mkdir /share
配置NFS
开机自动挂载
vim /etc/rc.local
添加以下内容
mount -t nfs 192.168.128.130:/share /share
手动临时挂载
mount -t nfs 192.168.128.130:/share /share
验证
这个时候在控制节点的/share
目录中创建一个文件夹,看看在计算节点中是否同步。
在计算节点中进行查看。
在计算节点中也存在。
将需要用到的压缩包使用FTP
或者SFTP
传输到共享目录。
配置NIS服务
控制节点配置
安装
yum install ypserv ypbind yp-tools rpcbind -y
添加NIS
域名
vim /etc/rc.local
# 添加可执行权限
chmod +x /etc/rc.local
添加以下内容
nisdomainname nisdomain
然后执行以下代码使其生效。
nisdomainname nisdomain
创建域用户
useradd -s /bin/bash nisuser
设置密码
passwd nisuser
创建用户组
groupadd nisgroup
将用户添加到组中
usermod -G nisgroup nisuser
配置NIS客户端权限
vim /etc/ypserv.conf
添加以下内容:
192.168.128.0/24:*:*:none
初始化NIS数据库以及启动NIS服务
自启动NIS
服务
systemctl enable rpcbind
systemctl enable yppasswdd
systemctl enable ypserv
启动NIS
服务
systemctl start rpcbind
systemctl start yppasswdd
systemctl start ypserv
初始化NIS
数据库
/usr/lib64/yp/ypinit -m
依次输入work1
按回车,work2
按回车,直到将所有的计算节点添加完毕后按Ctrl + D
结束添加,然后输入y
完成初始化。
每次修改用户后,更新数据库
make -C /var/yp
初始化数据库后重启服务
systemctl restart rpcbind
systemctl restart yppasswdd
systemctl restart ypserv
检查服务是否启动
rpcinfo -p localhost
计算节点配置
安装客户端
yum install ypbind yp-tools rpcbind -y
添加NIS域
在网络中添加NIS域,使用authconfig-tui
配置客户端。
authconfig-tui
用户信息选择使用NIS
,认证选择使用shadow密码
和本地授权即可
,然后按F12
进入下一页。
接下来在域和服务器中分别输入以下内容:
域:nisdomain
服务器:192.168.128.130
然后按F12
保存即可。
添加自启动
systemctl enable rpcbind
systemctl enable ypbind
启动服务
systemctl start rpcbind
systemctl start ypbind
验证
在计算节点中输入以下内容:
yptest
返回以下内容说明安装成功。
安装munge认证服务
控制节点配置
首先要确保控制节点以前没有安装过munge
,如果安装过需要使用以下命令将之前的munge
和munge
用户删除。
yum remove munge munge-libs munge devel -y
userdel -r munge
创建Munge用户,Munge
用户要确保Master Node
和Compute Nodes
的UID
和GID
相同,所有节点都需要安装Munge
;
export MUNGEUSER=1120
groupadd -g $MUNGEUSER munge
useradd -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge -s /sbin/nologin munge
安装epel-release
yum install -y epel-release
控制节点需要安装以下几个包:
yum install munge munge-devel munge-libs rng-tools -y
为系统新增熵池:
rngd -r /dev/urandom
执行以下命令,创建munge.key
文件:
create-munge-key
执行完以后,在/etc/munge/
下面会生成munge.key
,需修改munge.key
的权限以及所属用户,把所属用户改成munge
。
dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key #在Master Node创建全局使用的密钥
chown munge: /etc/munge/munge.key
chmod 400 /etc/munge/munge.key
chown -R munge: /var/lib/munge
chown -R munge: /var/run/munge
chown -R munge: /var/log/munge
把munge.key
分发给其他的计算节点(需要先在计算节点安装munge
依赖包):
scp /etc/munge/munge.key root@work1:/etc/munge/
scp /etc/munge/munge.key root@work2:/etc/munge/
启动munge
服务并加入开机自启:
systemctl start munge
systemctl enable munge
计算节点配置
同样,计算节点也要保证没有安装过munge
,如果安装过则需要将以前的munge
和munge用户
删除。
yum remove munge munge-libs munge devel -y
userdel -r munge
删除完之后需要新建munge
用户,server
端和client
端的munge
用户UID
必须保持一致,因此必须在创建时指定UID
,执行如下命令即可。
export MUNGEUSER=1120
groupadd -g $MUNGEUSER munge
useradd -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge -s /sbin/nologin munge
安装epel-release
yum install -y epel-release
计算节点同样需要安装以下几个包。
yum install munge munge-devel munge-libs rng-tools
为系统新增熵池:
rngd -r /dev/urandom
在配置控制节点时已经将munge.key
发送到了计算节点,此时在计算节点同样需要修改munge.key
文件的所属用户,并修改相关目录权限,修改成munge
即可。
chmod 700 /etc/munge
chown -R munge: /etc/munge
chown -R munge: /var/lib/munge
chown -R munge: /var/run/munge
chown -R munge: /var/log/munge
修改完之后即可启动rngd
和munge
服务,然后加入开机自启。
systemctl start rngd
systemctl start munge
systemctl enable rngd
systemctl enable munge
验证
在控制节点中输入以下代码:
munge -n|unmunge
返回图示内容,说明控制节点中munge
服务安装成功。
接着输入再输入以下代码:
munge -n|ssh work1 unmunge
返回图示内容说明work1
计算节点中munge
服务安装成功。
同理验证其他计算节点。
安装Python3
此步骤需要在所有节点中均完成安装,以控制节点为例。
安装插件
yum -y groupinstall "Development tools"
预装的依赖
yum -y install zlib zlib-devel
yum -y install bzip2 bzip2-devel
yum -y install ncurses ncurses-devel
yum -y install readline readline-devel
yum -y install openssl openssl-devel
yum -y install openssl-static
yum -y install xz lzma xz-devel
yum -y install sqlite sqlite-devel
yum -y install gdbm gdbm-devel
yum -y install tk tk-devel
yum -y install libffi libffi-devel
解压安装包
cd /share
tar -xvf Python-3.8.6.tar.xz
将解压后的Python
目录复制到家目录。
cp -R /share/Python-3.8.6 ~/
安装Python3
cd ~/Python-3.8.6/
./configure --prefix=/usr/soft/python3
等待安装成功后进行编译
make -j 20 && make install
创建软链接
ln -s /usr/soft/python3/bin/python3.8 /usr/bin/python3
ln -s /usr/soft/python3/bin/pip3 /usr/bin/pip3
升级pip
。
pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
验证是否安装成功。
python3 -V
安装Mysql
此过程只需在控制节点中进行安装。
首先删除系统自带的Mariadb
# 查看系统中是否有maria
rpm -qa|grep maria
yum list installed|grep maria
# 逐条删除展示的结果
yum remove {展示的包名} -y
安装相关依赖
yum install libaio perl-ExtUtils-MakeMaker numactl net-tools -y
解压目录
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
开始安装
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
启动mysql
systemctl start mysqld.service
查询mysql
初始密码
grep "password" /var/log/mysqld.log
使用初始密码进入数据库
mysql -u root -p
降低密码的验证等级
set global validate_password_policy=LOW;
修改root
密码位123456
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
创建Slurm相关数据库
create database slurm_acct_db;
create database slurm_jobcomp_db;
然后创建一个slurm
用户拥有所有数据库的所有权限,并且不限制登录。
create user 'slurm'@'%' IDENTIFIED BY '123456';
grant ALL PRIVILEGES on *.* TO 'slurm'@'%';
将root
用户的访问权限也修改一下
create user 'root'@'%' IDENTIFIED BY '123456';
grant ALL PRIVILEGES on *.* TO 'root'@'%';
安装Slurm服务
所有节点通用配置
创建Slurm
用户
export SLURMUSER=1130
groupadd -g $SLURMUSER slurm
useradd -m -c "Slurm manager" -d /var/lib/slurm -u $SLURMUSER -g slurm -s /bin/bash slurm
安装Slurm
依赖
yum install gcc gcc-c++ readline-devel perl-ExtUtils-MakeMaker pam-devel rpm-build mysql-devel -y
进入到/share
目录,然后安装rpmbuild
开始编译Slurm
,制作rpm
包。
cd /share && yum install rpm-build
rpmbuild -ta --nodeps slurm-20.11.9.tar.bz2
安装生成好的所有rpm
包
安装生成好的所有rpm包
到此,Slurm
配置项已经做完,接下来开始修改配置文件并启动控制节点和计算节点的Slurm
服务。
控制节点配置
配置slurm.conf
文件
复制配置文件,并修改
cp /etc/slurm/cgroup.conf.example /etc/slurm/cgroup.conf
cp /etc/slurm/slurm.conf.example /etc/slurm/slurm.conf
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=linux
ControlMachine=master
#ControlAddr=
#BackupController=
#BackupAddr=
#
SlurmUser=slurm
#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=0
#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/cons_tres
SelectTypeParameters=CR_Core
#PriorityType=priority/multifactor
#PriorityDecayHalfLife=14-0
#PriorityUsageResetPeriod=14-0
#PriorityWeightFairshare=100000
#PriorityWeightAge=1000
#PriorityWeightPartition=10000
#PriorityWeightJobSize=1000
#PriorityMaxAge=1-0
#
# LOGGING
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurm/slurmd.log
JobCompType=jobcomp/none
#JobCompLoc=
#
# ACCOUNTING
#JobAcctGatherType=jobacct_gather/linux
#JobAcctGatherFrequency=30
#
#AccountingStorageType=accounting_storage/slurmdbd
#AccountingStorageHost=
#AccountingStorageLoc=
#AccountingStoragePass=
#AccountingStorageUser=
#
# COMPUTE NODES
NodeName=master CPUs=2 Sockets=1 CoresPerSocket=2 RealMemory=2048 State=UNKNOWN
NodeName=work1,work2 CPUs=2 Sockets=1 CoresPerSocket=2 RealMemory=2048 State=UNKNOWN
PartitionName=control Nodes=master Default=YES MaxTime=INFINITE State=UP
PartitionName=compute Nodes=work[1-2] Default=YES MaxTime=INFINITE State=UP
复制控制节点配置文件到计算节点
scp /etc/slurm/*.conf root@work1:/etc/slurm/
scp /etc/slurm/*.conf root@work2:/etc/slurm/
设置控制、计算节点文件权限(所有节点都运行)
#slurmdbd.conf文件为slurmdbd服务的配置文件,所有者必须为slurm用户
touch /etc/slurm/slurmdbd.conf
chown slurm:slurm /etc/slurm/slurmdbd.conf
#slurm.conf文件为slurmd、slurmctld的配置文件,所有者必须为root用户
touch /etc/slurm/slurm.conf
chown root:root /etc/slurm/slurm.conf
#建立slurmctld服务存储其状态等的目录,由slurm.conf中StateSaveLocation参数定义:
mkdir /var/spool/slurmctld
chown slurm:slurm /var/spool/slurmctld
mkdir /var/spool/slurm
chown slurm: /var/spool/slurm
#建立日志文件存储目录,并修改目录权限
mkdir /var/log/slurm
cd /var/log/slurm/
touch slurmd.log
touch slurmctld.log
touch slurmdbd.log
chown slurm:slurm /var/log/slurm
配置slurmdbd.conf
文件
cp /etc/slurm/slurmdbd.conf.example /etc/slurm/slurmdbd.conf
vim /etc/slurm/slurmdbd.conf
修改以下内容:
完整配置文件内容如下:
#
# Example slurmdbd.conf file.
#
# See the slurmdbd.conf man page for more information.
#
# Archive info
#ArchiveJobs=yes
#ArchiveDir="/tmp"
#ArchiveSteps=yes
#ArchiveScript=
#JobPurge=12
#StepPurge=1
#
# Authentication info
AuthType=auth/munge
AuthInfo=/var/run/munge/munge.socket.2
#
# slurmDBD info
DbdAddr=192.168.128.130
DbdHost=master
DbdPort=6819
SlurmUser=slurm
#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=master
StoragePort=3306
StoragePass=123456
StorageUser=root
StorageLoc=slurm_acct_db
启动slurmd
服务并加入开机自启。(所有节点都运行)
systemctl enable slurmd
systemctl start slurmd
查看slurmd
服务状态。
systemctl status slurmd
启动slurmctld
服务并加入开机自启。(仅控制节点运行)
systemctl enable slurmctld
systemctl start slurmctld
查看slurmctld
服务状态。
systemctl status slurmctld
启动集群
控制节点:
slurmctld -c && slurmd -c
计算节点:
slurmd -c
检查Slurm集群
查看集群
sinfo
展示分区
scontrol show partition
展示所有已配置节点
修改节点状态
在前面输出的节点信息中可以看到计算节点work[1-2]
这两个节点的状态STATE
为drain
(drain
是 Slurm
调度系统中控制节点的一种状态,表示该节点暂时处于离线状态,不接受新的任务。)
这个时候往其中去提交任务会导致阻塞,没有可用节点能够运行任务。
采用以下方法将其修改为idea
可用状态。
scontrol update NodeName=slave[1-2] State=DOWN Reason=hung_completing
systemctl restart slurm*
scontrol update NodeName=slave[1-2] State=RESUME
提交作业
srun -N2 hostname
查看作业
scontrol show jobs # 展示所有作业
显示队列中的作业
squeue -a
由于任务已经运行完毕,这里队列中不存在任务。
并且节点都处于可用状态。
GPU集群配置
上述的配置过程,由于节点是虚拟机,也不存在GPU资源需要配置,但是Slurm集群创建出来一定会需要去配置GPU资源的。要想集群能够调用节点的GPU资源还需要补充和修改相关配置文件。
下面给出我在搭建集群的时候的一个例子。
该集群一共有14个节点。其中gpu1-gpu9
为GPU
节点,master1
,master2
,cpu1
和cpu2
是CPU
节点。
一共包含4个配置文件。
cgroup.conf
:用于配置Slurm
与Linux控制组(cgroups)
之间的集成。Cgroups
是Linux
内核提供的一种机制,用于限制、控制和监视进程组的资源使用。Slurm
使用cgroups
来实现对作业和任务的资源管理和限制。slurmdbd.conf
:用于配置Slurm数据库守护进程(slurmdbd)
的配置文件。该守护进程负责与数据库交互,将集群中的作业、任务和其他相关数据存储到数据库中,以便进行监视、报告和分析。slurmd.conf
:用于配置Slurm计算节点守护进程(slurmd)
的配置文件。该守护进程在计算节点上运行,负责接收来自控制节点的指令并执行作业和任务。gres.conf
:是用于描述和管理通用资源的概念,例如加速器(如GPU、FPGA)
、特殊硬件设备或其他用户定义的资源。
以上所有的配置文件都在目录/etc/slurm/
下,我自己使用的配置文件如下:
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
slurmdbd.conf
#
# Example slurmdbd.conf file.
#
# See the slurmdbd.conf man page for more information.
#
# Archive info
#ArchiveJobs=yes
#ArchiveDir="/tmp"
#ArchiveSteps=yes
#ArchiveScript=
#JobPurge=12
#StepPurge=1
#
# Authentication info
AuthType=auth/munge
AuthInfo=/var/run/munge/munge.socket.2
#
# slurmDBD info
#DbdAddr=192.169.99.110
DbdHost=master1
DbdPort=6819
SlurmUser=slurm
# MessageTimeout=60
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=master1
StoragePort=3306
StoragePass=123456
StorageUser=root
StorageLoc=slurm_acct_db
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=linux
ControlMachine=master1
ControlAddr=192.168.99.110
BackupController=master2
BackupAddr=192.168.99.114
#
SlurmUser=slurm
#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=0
MaxJobCount=3000000
#PlugStackConfig=
#PropagatePrioProcess=
#PropagateResourceLimits=
#PropagateResourceLimitsExcept=
#Prolog=
#Epilog=
#SrunProlog=
#SrunEpilog=
#TaskProlog=
#TaskEpilog=
TaskPlugin=task/affinity,task/cgroup
TaskPluginParam=Sched
#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/cons_tres
SelectTypeParameters=CR_Core_Memory
#PriorityType=priority/multifactor
#PriorityDecayHalfLife=14-0
#PriorityUsageResetPeriod=14-0
#PriorityWeightFairshare=100000
#PriorityWeightAge=1000
#PriorityWeightPartition=10000
#PriorityWeightJobSize=1000
#PriorityMaxAge=1-0
#
# LOGGING
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurm/slurmd.log
#JobCompLoc=
#
# ACCOUNTING
JobCompHost=master1
JobCompPass=123456
JobCompPort=3306
JobCompType=jobcomp/mysql
#JobCompType=jobcomp/filetxt
JobCompUser=root
JobCompLoc=/var/log/slurm/slurm_jobcomp.log
#JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/linux
#
AccountingStorageType=accounting_storage/slurmdbd
#AccountingStorageEnforce=1
AccountingStorageHost=master1
AccountingStoragePort=6819
#AccountingStorageUser=root
#AccountingStoragePass=123456
#AccountingStorageType=accounting_storage/filetxt
#AccountingStorageLoc=/opt/slurm/acct
#AccountingStoreJobComment=YES
#
# COMPUTE NODES
GresTypes=gpu
NodeName=master1 CPUs=80 Boards=1 SocketsPerBoard=2 CoresPerSocket=20 ThreadsPerCore=2 RealMemory=321882 State=UNKNOWN
NodeName=cpu[1-2],master2 CPUs=80 Boards=1 SocketsPerBoard=2 CoresPerSocket=20 ThreadsPerCore=2 RealMemory=280000 State=UNKNOWN
NodeName=gpu1 CPUs=64 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=2 RealMemory=257377 State=UNKNOWN Gres=gpu:2
NodeName=gpu[2-5] CPUs=104 Boards=1 SocketsPerBoard=2 CoresPerSocket=26 ThreadsPerCore=2 RealMemory=250000 State=UNKNOWN Gres=gpu:2
NodeName=gpu[6-9] CPUs=40 Boards=1 SocketsPerBoard=2 CoresPerSocket=20 ThreadsPerCore=1 RealMemory=250000 State=UNKNOWN Gres=gpu:2
PartitionName=COMPUTE Nodes=master[1-2],cpu[1-2],gpu[1-9] Default=YES MaxTime=INFINITE State=UP
gres.conf
NodeName=gpu1 Name=gpu Type=gpu File=/dev/nvidia0
NodeName=gpu1 Name=gpu Type=gpu File=/dev/nvidia1
NodeName=gpu2 Name=gpu Type=gpu File=/dev/nvidia0
NodeName=gpu2 Name=gpu Type=gpu File=/dev/nvidia1
NodeName=gpu3 Name=gpu Type=gpu File=/dev/nvidia0
NodeName=gpu3 Name=gpu Type=gpu File=/dev/nvidia1
NodeName=gpu4 Name=gpu Type=gpu File=/dev/nvidia0
NodeName=gpu4 Name=gpu Type=gpu File=/dev/nvidia1
NodeName=gpu5 Name=gpu Type=gpu File=/dev/nvidia0
NodeName=gpu5 Name=gpu Type=gpu File=/dev/nvidia1
NodeName=gpu6 Name=gpu Type=gpu File=/dev/nvidia0
NodeName=gpu6 Name=gpu Type=gpu File=/dev/nvidia1
NodeName=gpu7 Name=gpu Type=gpu File=/dev/nvidia0
NodeName=gpu7 Name=gpu Type=gpu File=/dev/nvidia1
NodeName=gpu8 Name=gpu Type=gpu File=/dev/nvidia0
NodeName=gpu8 Name=gpu Type=gpu File=/dev/nvidia1
NodeName=gpu9 Name=gpu Type=gpu File=/dev/nvidia0
NodeName=gpu9 Name=gpu Type=gpu File=/dev/nvidia1