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
1 vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改为以下内容,注意网卡信息不要修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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
以上为控制节点配置文件,计算节点同理,在此不再赘述。
分别在三个节点中设置主机名
1 2 3 192.168.128.130 master192.168.128.131 work1192.168.128.132 work2
给各个节点设置hostname
1 2 3 hostnamectl set-hostname master # 在控制节点中运行 hostnamectl set-hostname work1 # 在work1计算节点中运行 hostnamectl set-hostname work2 # 在work2计算节点中运行
关闭防火墙 1 2 3 systemctl status firewalld # 查看防火墙状态 systemctl stop firewalld # 关闭防火墙 systemctl disable firewalld # 永久关闭防火墙
关闭Selinux 查看Selinux状态
临时关闭,该方法重启服务器后又会恢复为Enforcing
。
永久关闭Selinux,进入/etc/selinux/config
然后将Selinux的值设置为disabled
。
配置SSH免密登录 安装ssh
服务
1 yum install openssl openssh-server -y
配置ssh
服务
1 vim /etc/ssh/sshd_config
设置PermitRootLogin=yes
设置PasswordAuthentication=yes
设置PubkeyAuthentication=yes
生成密钥对
1 ssh-keygen -t rsa # 连续3次回车
输入该代码后在/root/.ssh
文件夹下会生成一系列的公钥和私钥。
将导入公钥id_rsa.pub
导出,然后导入到其他计算节点中。
在每个计算节点中运行以下代码,将公钥导入到所有计算节点。
1 cat id_rsa.pub >> ~/.ssh/authorized_keys
验证ssh
是否可以免登录。
免登录成功。
配置时区 配置CST时区
1 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
同步NTP服务器
1 2 3 yum install ntp -y systemctl start ntpd systemctl enable ntpd
安装EPEL源
1 yum install http://mirrors.sohu.com/fedora-epel/epel-release-latest-7.noarch.rpm
配置NFS服务 控制节点配置 安装
1 yum install nfs-utils rpcbind -y
自启动服务
1 2 3 4 systemctl enable rpcbind systemctl enable nfs-server systemctl enable nfs-lock systemctl enable nfs-idmap
启动服务
1 2 3 4 systemctl start rpcbind systemctl start nfs-server systemctl start nfs-lock systemctl start nfs-idmap
配置共享目录
添加以下内容
1 /share 192.168.128.0/24(rw,sync,no_root_squash)
使其生效
计算节点配置 安装
1 yum install nfs-utils -y
检查控制节点共享目录
1 showmount -e 192.168.128.130
创建共享目录
配置NFS
开机自动挂载
添加以下内容
1 mount -t nfs 192.168.128.130:/share /share
手动临时挂载
1 mount -t nfs 192.168.128.130:/share /share
验证 这个时候在控制节点的/share
目录中创建一个文件夹,看看在计算节点中是否同步。
在计算节点中进行查看。
在计算节点中也存在。
将需要用到的压缩包使用FTP
或者SFTP
传输到共享目录。
配置NIS服务 控制节点配置 安装
1 yum install ypserv ypbind yp-tools rpcbind -y
添加NIS
域名
1 2 3 vim /etc/rc.local # 添加可执行权限 chmod +x /etc/rc.local
添加以下内容
然后执行以下代码使其生效。
创建域用户
1 useradd -s /bin/bash nisuser
设置密码
创建用户组
将用户添加到组中
1 usermod -G nisgroup nisuser
配置NIS客户端权限
添加以下内容:
1 192.168.128.0/24:*:*:none
初始化NIS数据库以及启动NIS服务
自启动NIS
服务
1 2 3 systemctl enable rpcbind systemctl enable yppasswdd systemctl enable ypserv
启动NIS
服务
1 2 3 systemctl start rpcbind systemctl start yppasswdd systemctl start ypserv
初始化NIS
数据库
依次输入work1
按回车,work2
按回车,直到将所有的计算节点添加完毕后按Ctrl + D
结束添加,然后输入y
完成初始化。
每次修改用户后,更新数据库
初始化数据库后重启服务
1 2 3 systemctl restart rpcbind systemctl restart yppasswdd systemctl restart ypserv
检查服务是否启动
计算节点配置 安装客户端
1 yum install ypbind yp-tools rpcbind -y
添加NIS域
在网络中添加NIS域,使用authconfig-tui
配置客户端。
用户信息选择使用NIS
,认证选择使用shadow密码
和本地授权即可
,然后按F12
进入下一页。
接下来在域和服务器中分别输入以下内容:
域:nisdomain
服务器:192.168.128.130
然后按F12
保存即可。
添加自启动
1 2 systemctl enable rpcbind systemctl enable ypbind
启动服务
1 2 systemctl start rpcbind systemctl start ypbind
验证 在计算节点中输入以下内容:
返回以下内容说明安装成功。
安装munge认证服务 控制节点配置 首先要确保控制节点以前没有安装过munge
,如果安装过需要使用以下命令将之前的munge
和munge
用户删除。
1 2 yum remove munge munge-libs munge devel -y userdel -r munge
创建Munge用户,Munge
用户要确保Master Node
和Compute Nodes
的UID
和GID
相同,所有节点都需要安装Munge
;
1 2 3 export MUNGEUSER =1120groupadd -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
1 yum install -y epel-release
控制节点需要安装以下几个包:
1 yum install munge munge-devel munge-libs rng-tools -y
为系统新增熵池:
执行以下命令,创建munge.key
文件:
执行完以后,在/etc/munge/
下面会生成munge.key
,需修改munge.key
的权限以及所属用户,把所属用户改成munge
。
1 2 3 4 5 6 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
依赖包):
1 2 scp /etc/munge/munge.key root@work1:/etc/munge/ scp /etc/munge/munge.key root@work2:/etc/munge/
启动munge
服务并加入开机自启:
1 2 systemctl start munge systemctl enable munge
计算节点配置 同样,计算节点也要保证没有安装过munge
,如果安装过则需要将以前的munge
和munge用户
删除。
1 2 yum remove munge munge-libs munge devel -y userdel -r munge
删除完之后需要新建munge
用户,server
端和client
端的munge
用户UID
必须保持一致,因此必须在创建时指定UID
,执行如下命令即可。
1 2 3 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
1 yum install -y epel-release
计算节点同样需要安装以下几个包。
1 yum install munge munge-devel munge-libs rng-tools
为系统新增熵池:
在配置控制节点时已经将munge.key
发送到了计算节点,此时在计算节点同样需要修改munge.key
文件的所属用户,并修改相关目录权限,修改成munge
即可。
1 2 3 4 5 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
服务,然后加入开机自启。
1 2 3 4 systemctl start rngd systemctl start munge systemctl enable rngd systemctl enable munge
验证 在控制节点中输入以下代码:
返回图示内容,说明控制节点中munge
服务安装成功。
接着输入再输入以下代码:
1 munge -n|ssh work1 unmunge
返回图示内容说明work1
计算节点中munge
服务安装成功。
同理验证其他计算节点。
安装Python3 此步骤需要在所有节点中均完成安装,以控制节点为例。
安装插件
1 yum -y groupinstall "Development tools"
预装的依赖
1 2 3 4 5 6 7 8 9 10 11 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
解压安装包
1 2 cd /share tar -xvf Python-3.8.6.tar.xz
将解压后的Python
目录复制到家目录。
1 cp -R /share/Python-3.8.6 ~/
安装Python3
1 2 cd ~/Python-3.8.6/ ./configure --prefix=/usr/soft/python3
等待安装成功后进行编译
1 make -j 20 && make install
创建软链接
1 2 ln -s /usr/soft/python3/bin/python3.8 /usr/bin/python3 ln -s /usr/soft/python3/bin/pip3 /usr/bin/pip3
升级pip
。
1 pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
验证是否安装成功。
安装Mysql 此过程只需在控制节点中进行安装。
首先删除系统自带的Mariadb
1 2 3 4 5 # 查看系统中是否有maria rpm -qa|grep maria yum list installed|grep maria # 逐条删除展示的结果 yum remove {展示的包名} -y
安装相关依赖
1 yum install libaio perl-ExtUtils-MakeMaker numactl net-tools -y
解压目录
1 tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
开始安装
1 2 3 4 5 6 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
1 systemctl start mysqld.service
查询mysql
初始密码
1 grep "password" /var/log/mysqld.log
使用初始密码进入数据库
降低密码的验证等级
1 set global validate_password_policy=LOW;
将密码长度设置为6位
1 set global validate_password_length=6;
修改root
密码位123456
1 ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
创建Slurm相关数据库
1 2 create database slurm_acct_db; create database slurm_jobcomp_db;
然后创建一个slurm
用户拥有所有数据库的所有权限,并且不限制登录。
1 2 create user 'slurm'@'%' IDENTIFIED BY '123456'; grant ALL PRIVILEGES on *.* TO 'slurm'@'%';
将root
用户的访问权限也修改一下
1 2 create user 'root'@'%' IDENTIFIED BY '123456'; grant ALL PRIVILEGES on *.* TO 'root'@'%';
安装Slurm服务 所有节点通用配置 创建Slurm
用户
1 2 3 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
依赖
1 yum install gcc gcc-c++ readline-devel perl-ExtUtils-MakeMaker pam-devel rpm-build mysql-devel -y
进入到/share
目录,然后安装rpmbuild
开始编译Slurm
,制作rpm
包。
1 2 cd /share && yum install rpm-build rpmbuild -ta --nodeps slurm-20.11.9.tar.bz2
安装生成好的所有rpm
包
1 cd /root/rpmbuild/RPMS/x86_64/ && yum localinstall slurm-* && cd
到此,Slurm
配置项已经做完,接下来开始修改配置文件并启动控制节点和计算节点的Slurm
服务。
控制节点配置 配置slurm.conf
文件
复制配置文件,并修改
1 2 3 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
修改以下部分内容
完整配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 # # (in doc/html) to build a configuration file customized # for your environment.# # slurm.conf file generated by configurator.html. # # 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= # SlurmctldTimeout=300 SlurmdTimeout=300 InactiveLimit=0 MinJobAge=300 KillWait=30 Waittime=0 # 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 # SlurmctldDebug=info SlurmctldLogFile=/var/log/slurm/slurmctld.log SlurmdDebug=info SlurmdLogFile=/var/log/slurm/slurmd.log JobCompType=jobcomp/none # JobCompLoc= # # JobAcctGatherType=jobacct_gather/linux # JobAcctGatherFrequency=30 # # AccountingStorageHost= # AccountingStorageLoc= # AccountingStoragePass= # AccountingStorageUser= # 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
复制控制节点配置文件到计算节点
1 2 scp /etc/slurm/*.conf root@work1:/etc/slurm/ scp /etc/slurm/*.conf root@work2:/etc/slurm/
设置控制、计算节点文件权限(所有节点都运行)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # 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
文件
1 2 cp /etc/slurm/slurmdbd.conf.example /etc/slurm/slurmdbd.conf vim /etc/slurm/slurmdbd.conf
修改以下内容:
完整配置文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 # # # # ArchiveJobs=yes # ArchiveDir="/tmp" # ArchiveSteps=yes # ArchiveScript= # JobPurge=12 # StepPurge=1 # AuthType=auth/munge AuthInfo=/var/run/munge/munge.socket.2 # 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 # StorageType=accounting_storage/mysql StorageHost=master StoragePort=3306 StoragePass=123456 StorageUser=root StorageLoc=slurm_acct_db
启动slurmd
服务并加入开机自启。(所有节点都运行)
1 2 systemctl enable slurmd systemctl start slurmd
查看slurmd
服务状态。
启动slurmctld
服务并加入开机自启。(仅控制节点运行)
1 2 systemctl enable slurmctld systemctl start slurmctld
查看slurmctld
服务状态。
1 systemctl status slurmctld
启动集群 控制节点:
1 slurmctld -c && slurmd -c
计算节点:
检查Slurm集群 查看集群
展示分区
展示所有已配置节点
修改节点状态 在前面输出的节点信息中可以看到计算节点work[1-2]
这两个节点的状态STATE
为drain
(drain
是 Slurm
调度系统中控制节点的一种状态,表示该节点暂时处于离线状态,不接受新的任务。)
这个时候往其中去提交任务会导致阻塞,没有可用节点能够运行任务。
采用以下方法将其修改为idea
可用状态。
1 2 3 scontrol update NodeName=slave[1-2] State=DOWN Reason=hung_completing systemctl restart slurm* scontrol update NodeName=slave[1-2] State=RESUME
提交作业
查看作业 1 scontrol show jobs # 展示所有作业
显示队列中的作业
由于任务已经运行完毕,这里队列中不存在任务。
并且节点都处于可用状态。
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 1 2 3 4 5 6 7 8 9 10 11 # # # # information on cgroup configuration parameters # -- CgroupAutomount=yes ConstrainCores=no ConstrainRAMSpace=no
slurmdbd.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 # # # # ArchiveJobs=yes # ArchiveDir="/tmp" # ArchiveSteps=yes # ArchiveScript= # JobPurge=12 # StepPurge=1 # AuthType=auth/munge AuthInfo=/var/run/munge/munge.socket.2 # # 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 # StorageType=accounting_storage/mysql StorageHost=master1 StoragePort=3306 StoragePass=123456 StorageUser=root StorageLoc=slurm_acct_db
slurm.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 # # (in doc/html) to build a configuration file customized # for your environment.# # slurm.conf file generated by configurator.html. # # 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= # SlurmctldTimeout=300 SlurmdTimeout=300 InactiveLimit=0 MinJobAge=300 KillWait=30 Waittime=0 # 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 # SlurmctldDebug=info SlurmctldLogFile=/var/log/slurm/slurmctld.log SlurmdDebug=info SlurmdLogFile=/var/log/slurm/slurmd.log # JobCompLoc= # 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 # 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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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