0


【HPC最全最新离线安装开源资源管理、作业调度软件-SLURM】

文章目录

HPC 离线最全安装开源资源管理、作业调度软件-SLURM

一、★ 软件简介

1.1 软件定义

Slurm(Simple Linux Utility for Resource Management, http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统。超级计算系统可利用Slurm对资源和作业进行管理,以避免相互干扰,提高运行效率。所有需运行的作业,无论是用于程序调试还是业务计算,都可以通过交互式并行

srun

、批处理式

sbatch

或分配式

salloc

等命令提交,提交后可以利用相关命令查询作业状态等。

1.2 软件架构

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

,可认证集群、有效用户、有效记账账户等。

在这里插入图片描述

1.3 slurm 插件
  • cgroup 任务约束 如果存在 hwloc 开发库,将构建任务/cgroup 插件。
  • HDF5 作业分析 如果存在 HDF5 开发库,将构建 acct_gather_profile/hdf5 作业分析插件。
  • HTML 手册页 如果存在 man2html 命令,将生成手册页的 HTML 版本。
  • IPMI 能耗 如果存在 freeipmi 开发库,将构建 acct_gather_energy/ipmi 会计插件。
  • InfiniBand Accounting 如果存在 libibmad 和 libibumad 开发库,将构建 acct_gather_interconnect/ofed InfiniBand 插件。
  • Lua 支持 如果存在 lua 开发库,lua API 将在各种插件中可用。
  • MUNGE 如果安装了 MUNGE 身份验证开发库,将构建身份验证/munge 插件。MUNGE用作默认的身份验证机制。
  • MySQL MySQL对会计的支持将建立在mysql开发库(最好是5.5或更高版本)或MariaDB开发库存在的情况下。
  • PAM 支持 如果安装了 PAM 开发库,将添加 PAM 支持。
  • 如果安装了 numa 开发库,则任务/关联插件中的 NUMA 关联 NUMA 支持将可用。
  • Readline 支持 如果存在 readline 开发库,则 scontrol 和 sacctmgr 交互模式下的 readline 支持将可用。
  • RRD 外部传感器数据收集 如果存在 rrdtool 开发库,则将构建 ext_sensors/rrd 插件。
  • sview 仅当安装了 gtk2时,才会构建 sview 命令。
1.5 slurm配置模式分类
  • 传统模式:客户节点采用 /etc/slurm/ 目录下的 slurm.conf 等配置文件进行配置。
  • 无配置(configless)模式:计算节点无需配置 /etc/slurm 目录下相应的配置文件。(20.02版起支持)

注意! slurm.conf配置文件的位置,是根据安装方式不同而不同的,如果是利用rpmbuild,那么默认的位置就是/etc/slurm下;如果是源码安装且没有指定–prefix安装位置,那么就在/usr/local下寻找;如果是源码安装利用–prefix参数指定了位置了,那就是在指定的位置下寻找。本篇是指定了安装位置。

无配置模式说明

无配置模式是Slurm的一项新特性(从20.02版起支持),可以允许计算节点和用户登录节点从slurmctld守护进程获取配置而无需采用 /etc/slurm 等目录下的本地配置文件。集群在Slurm控制节点上统一控制配置文件,计算节点、登录节点和其它集群节点只需通过 /lib/systemd/system/slurmd.service 文件配置slurmd服务启动参数,利用启动后的slurmd服务获取所需配置信息即可,而无需复制管理节点上的这些文件成为本地文件(降低文件配置不一样的风险)。支持的配置文件有:

  • slurm.conf
  • acct_gather.conf
  • cgroup.conf
  • cgroup_allowed_devices_file.conf
  • cli_filter.lua
  • ext_sensors.conf
  • gres.conf
  • helpers.conf
  • job_container.conf
  • knl_cray.conf
  • knl_generic.conf
  • oci.conf
  • plugstack.conf
  • topology.conf
1.6 slurm无配置方式

slurmd服务启动时将从指定的slurmctld节点获取配置文件,slurmctld节点也可以采用

--conf-server

参数准确指定

  • 采用 --conf-server 参数指定(默认端口6817可省略):- 仅一个管理节点slurmctl-primary:slurmd --conf-server slurmctl-primary:6817- 一个管理节点slurmctl-primary和一个备份节点slurmctl-secondary:​ slurmd --conf-server slurmctl-primary:6817,slurmctl-secondary
二、★ 安装环境

2.1 集群环境规划
  • 集群名:LDD-cluster
  • 管理节点:LDD-manage- 内网IP:193.168.100.10- munge安装路径:/opt/hpc/slurm/munge-0.5.15- slurm安装路径 :/opt/hpc/slurm/slurm-23.02.1- 配置文件: /opt/hpc/slurm/slurm-23.02.1/etc目录下的 cgroup.confslurm.confslurmdbd.conf 等文件
  • 需要启动(按顺序)的守护进程服务:1. 通信认证:munge2. 系统数据库:mariadb3. Slurm数据库:slurmdbd4. 主控管理器:slurmctld5. 登录节点:slurmd
  • 数据库节点(运行slurmdbd服务):- 内网IP:193.168.100.10- 可与管理节点共用,本篇中与管理节点共用
  • 用户登录节点:- 内网IP:193.168.100.10- 可与管理节点共用,本篇中与管理节点共用
  • 计算节点node[10-20]:- 内网IP:193.168.100.[10-20]- munge安装路径:/opt/hpc/slurm/munge-0.5.15- slurm安装路径:/opt/hpc/slurm/slurm-23.02.1- 管理节点root用户可以通过密钥无需输入密码ssh进入各节点安装好- 管理节点建立slurm用户后,各计算节点也要建立。但如果配置账号NIS服务可以不需要- slurmd计算节点 需要启动(按顺序)的服务: 1. 通信认证:munge 2. Slurm数据库:slurmd
2.2 系统及软件包信息
  • 管理节点:centos7.9离线(已配置离线YUM源) - Centos7.9_YUM源离线配置链接
  • 权限说明:具有root或sudo权限
  • 编译器版本:GNU4.8.5
  • 三方依赖软件包: - mariadb mariadb-devel mariadb-server (离线yum)- munge (源码编译安装)- hwloc-libs hwloc-devel (离线yum)- hdf5(源码编译安装)- pam-devel (离线yum)- perl-ExtUtils-MakeMaker (离线yum)- readline-devel (离线yum)- kernel-headers (离线yum)- dbus-devel (离线yum)- rrdtool rrdtool-devel (离线yum)- gtk2 gtk2-devel (离线yum)- rpm-build (离线yum)- infiniband-diags infiniband-diags-devel (离线yum)- libevent libevent-devel (离线yum)
  • 主程序版本:slurm-23.2.01.tar.bz2 (源码编译安装)
  • slurm源码安装包及对应三方库安装包链接->
2.3 管理/计算节点无秘钥访问
  • 管理节点和计算节点需要配置无秘钥认证访问
  • ssh-keygen -t rsa
foriin`seq1020`;do ssh-copy-id -i  ~/.ssh/id_rsa.pub   node$i;done
2.4 PDSH管理/计算节点网路传输
  • 使用 pdsh 命令处理个节点文件的传输和命令的执行:# 离线安装# 版本信息:pdsh-2.34-5.el7.x86_64.rpm pdsh-rcmd-ssh-2.34-5.el7.x86_64.rpm 安装# 安装文件存放位置:/opt/hpc/slurm/pdsh-2.34foriin`seq1020`;dosshnode$i"hostname;cd /opt/hpc/slurm/pdsh-2.34;rpm -ivh *.rpm";done``````# 联网安装foriin`seq1020`;dosshnode$i'wget -P /etc/pki/rpm-gpg/ http://mirrors.ustc.edu.cn/epel/RPM-GPG-KEY-EPEL-7';doneforiin`seq1020`;dosshnode$i"yum install pdsh -y";done注意! 使用pdsh/pdcp命令,需要在管理节点和计算节点都安装PDSH软件包,如果没有安装也可以不用安装,本篇内容还提供for…in…do命令方式同样可以达到与pdsh一样的效果,二者任选其一
三、★ slurm依赖软件源码安装

3.1 三方依赖包安装
# 离线yum方式安装(管理节点)
yum install -y hwloc-libs hwloc-devel pam-devel perl-ExtUtils-MakeMaker readline-devel \
kernel-headers dbus-devel gtk2 gtk2-devel rrdtool rrdtool-devel  libevent libevent-devel \
infiniband-diags infiniband-diags-devel mariadb mariadb-devel mariadb-server
# 离线yum方式安装(计算节点安装)# pdsh命令方式sudo pdsh -w node[10-20]"hostname;yum install -y hwloc-libs hwloc-devel pam-devel \
perl-ExtUtils-MakeMaker readline-devel kernel-headers dbus-devel gtk2 gtk2-devel \
rrdtool rrdtool-devel  libevent libevent-devel mariadb mariadb-devel mariadb-server \
infiniband-diags infiniband-diags-devel"# for..in..do命令方式foriin`seq1020`;dosshnode$i"hostname;yum install -y hwloc-libs hwloc-devel \
pam-devel perl-ExtUtils-MakeMaker readline-devel kernel-headers dbus-devel gtk2 gtk2-devel rrdtool \
rrdtool-devel  libevent libevent-devel";done
3.2 munge认证服务编译安装
# 创建munge账号和组(管理节点)useradd  -M -s /sbin/nologin -u 600 munge
groupmod -g 600 munge
# 创建munge账号和组(计算节点)# pdsh命令方式sudo pdsh -w node[10-20]"hostname;useradd  -M -s /sbin/nologin -u 600 munge;groupmod -g 600 munge"# for..in..do命令方式foriin`seq1220`;dosshnode$i"hostname;useradd  -M -s /sbin/nologin -u 600 munge;groupmod -g 600 munge";done

注意! 本篇没有配置NIS账号管理服务,所以管理节点和计算节点都需要建立账号(下面slurm账号的建立一样),如果配置了NIS服务,只需要在管理节点创建账号。

# munge软件编译安装# 软件版本:munge-munge-0.5.15.tar.gz (管理节点安装步骤)MUNGE_DIR=/opt/hpc/slurm/munge-0.5.15
tar -zxf munge-munge-0.5.15.tar.gz
cd munge-munge-0.5.15/
./bootstrap
./configure --prefix=$MUNGE_DIR\
--sysconfdir=$MUNGE_DIR/etc \
--localstatedir=$MUNGE_DIR/var \
-with-runstatedir=$MUNGE_DIR/var/run
makesudomakeinstall# 软件版本:munge-munge-0.5.15.tar.gz(计算节点安装步骤)# pdsh命令方式sudo pdsh -w node[10-20]"cd 管理节点munge源码包路径;make install"# for..in..do命令方式foriin`seq1020`;dosshnode$i"cd 管理节点munge源码包路径;make install";done

注意! 如果出现错误:configure: error: unable to locate cryptographic library,说明缺少包openssl加密库, 利用离线yum安装:yum install openssl openssl-devel

注意! 整个用户的家目录在管理节点和计算节点是共享的,且管理节点和计算节点munge安装目录都是一样的,所以在计算节点安装munge的时候可以直接make install 进行安装。

# 修改目录权限及配置文件 (管理节点配置)cd$MUNGE_DIRmkdir -p var/run/munge
chown -R munge.munge ../munge
echo -e "OPTIONS=\"--key-file=/opt/software/install/hpc/slurm/munge/etc/munge/munge.key --num-threads=2\"">> /opt/hpc/slurm/munge-0.5.15/etc/sysconfig/munge

# 修改目录权限及配置文件 (计算节点配置)# pdsh命令方式sudo pdsh -w node[10-20]"cd /opt/hpc/slurm/munge-0.5.15;mkdir -p var/run/munge;chown -R munge.munge ../munge-0.5.15"sudo pdsh -w node[10-20]"echo -e 'OPTIONS=\"--key-file=/opt/hpc/slurm/munge-0.5.15/etc/munge/munge.key --num-threads=2\"' >> /opt/hpc/slurm/munge-0.5.15/etc/sysconfig/munge"# for..in..do命令方式foriin`seq1020`;dosshnode$i"cd /opt/hpc/slurm/munge-0.5.15;mkdir -p var/run/munge;chown -R munge.munge ../munge-0.5.15";doneforiin`seq1020`;dosshnode$i"echo -e 'OPTIONS=\"--key-file=/opt/hpc/slurm/munge-0.5.15/etc/munge/munge.key --num-threads=2\"' >> /opt/hpc/slurm/munge-0.5.15/etc/sysconfig/munge";done
# 生成munge.key文件(只需管理节点生成,复制到各个计算节点)cd /opt/hpc/slurm/munge-0.5.15/etc/munge
echo -n "Hello.MyMungeKey.This is your munge key."| sha1sum |cut -d' ' -f1 > munge.key
chmod600 munge
chown munge.munge /opt/hpc/slurm/munge-0.5.15/etc/munge/munge.key

# pdsh命令方式
pdcp -w node[10-20] munge.key  /opt/hpc/slurm/munge-0.5.15/etc/munge/
pdsh -w node[10-20]"chown munge.munge /opt/hpc/slurm/munge-0.5.15/etc/munge/munge.key"# for...in...do命令方式foriin`seq1020`;doscp -r munge.key node$i:/opt/hpc/slurm/munge-0.5.15/etc/munge/;doneforiin`seq1020`;dosshnode$i"chown munge.munge /opt/hpc/slurm/munge-0.5.15/etc/munge/munge.key";done
# 复制启动文件目录(管理节点)cp /opt/hpc/slurm/munge-0.5.15/lib/systemd/system/munge.service  /usr/lib/systemd/system/

# 复制到启动文件目录(计算节点)# pdsh命令方式sudo pdcp -w node[10-20] /opt/hpc/slurm/munge-0.5.15/lib/systemd/system/munge.service /usr/lib/systemd/system/

# for...in...do命令方式foriin`seq1020`;doscp -r /opt/hpc/slurm/munge-0.5.15/lib/systemd/system/munge.service node$i:/usr/lib/systemd/system/;done
# 启动管理节点munge
systemctl daemon-reload
systemctl enable --now munge.service

# 启动计算节点munge#pdsh命令方式sudo pdsh -w node[10-20]"systemctl daemon-reload;systemctl enable --now munge"# for...in...do命令方式foriin`seq1020`;dosshnode$i"systemctl daemon-reload;systemctl enable --now munge";done
# 安装munge后目录树结构如下
├── bin
│   ├── munge
│   ├── remunge
│   └── unmunge
├── etc
│   ├── logrotate.d
│   │   └── munge
│   ├── munge
│   │   └── munge.key
│   └── sysconfig
│       └── munge
├── include
│   └── munge.h
├── lib
│   ├── libmunge.a
│   ├── libmunge.la
│   ├── libmunge.so -> libmunge.so.2.0.0
│   ├── libmunge.so.2 -> libmunge.so.2.0.0
│   ├── libmunge.so.2.0.0
│   ├── pkgconfig
│   │   └── munge.pc
│   └── systemd
│       └── system
├── sbin
│   ├── munged
│   └── mungekey
├── share
│   └── man
│       ├── man1
│       ├── man3
│       ├── man7
│       └── man8
└── var
    ├── lib
    │   └── munge
    ├── log
    │   └── munge
    └── run
        └── munge
3.3 mariadb数据库安装
# mariadbs (管理节点配置)# 配置/etc/my.cnf文件中[mysqld]增加如下配置innodb_buffer_pool_size=1024M
# 设置InnoDB存储引擎缓存池大小# show global variables like 'innodb_buffer_pool_size';innodb_log_file_size=512M
# 配置的Redo空间越大,InnoDB就能更好的优化写操作;然而,增大Redo空间也意味着更长的恢复时间当出现崩溃或掉电等意外时。# show variables like 'innodb_log_file_size'; innodb_lock_wait_timeout=900

注意! 上面的配置数值是根据自己实际硬件配置而设定的,硬件配置越高数值越高。

# mariadb数据库所在的服务器,本篇中就是管理节点(管理节点安装)
systemc start mariadb
# 启动mariadb服务

mysql -uroot
# 新安装的mariadb数据库是没有密码的,需要自己设置

SET password for'root'@'LDD-HPC'=password('MySetPassdWord');# LDD-HPC为自己的主机名,MySetPassdWord为自己设置新密码

mysql -uroot -p
# 重新利用新密码登录

create user 'slurm'@'LDD-HPC' identified by 'MySetPassdWord';# 生成slurm用户,以便该用户操作slurm_acct_db数据库,其密码是自己设置的密码

create database slurm_acct_db;# 生成账户数据库slurm_acct_db

grant all on slurm_acct_db.* TO 'slurm'@'LDD-HPC' identified by 'MySetPassdWord' with grant option;# 赋予slurm从本机LDD-HPC采用密码,登录具备操作slurm_acct_db数据下所有表的全部权限

create database slurm_jobcomp_db;# 生成作业信息数据库slurm_jobcomp_db

grant all on slurm_jobcomp_db.* TO 'slurm'@'LDD-HPC' identified by 'MySetPassdWord' with grant option;# 赋予slurm从本机LDD-HPC采用密码,登录具备操作slurm_jobcomp_db数据下所有表的全部权限

flush privileges;# 立即刷新权限

show databases;# 显示当前的数据库信息

show grants for slurm@'LDD-HPC';# 显示slurm用户下数据库信息
3.4 pmix3/pmix4并行插件安装
# 为了增加slurm并行的适配行,两个版本都安装(管理节点安装)# 软件版本:openpmix-3.2.3.tar.gz  tar -zxf openpmix-3.2.3.tar.gz
cd openpmix-3.2.3
./autogen.pl
./configure --prefix=/opt/hpc/slurm/pmix/pmix-3.2.3
makemakeinstall# 软件版本:openpmix-4.2.2.tar.gztar -zxf openpmix-4.2.2.tar.gz
cd openpmix-4.2.2
./autogen.pl
./configure --prefix=/opt/hpc/slurm/pmix/pmix-4.2.2
makemakeinstall
四、★ slurm主程序编译安装

4.1 管理/登录/数据库节点slurm账号建立
# 管理节点创建slurm账号useradd -M  -s /sbin/nologin -u 601  slurm
groupmod  -g 601 slurm

# 计算节点创建slurm账号# pdsh命令方式
pdsh -w node[10-20]"useradd -M -s /sbin/nologin -u 601 slurm;groupmod -g 601 slurm"# for...in...do命令方式foriin`seq1020`;dosshnode$i"useradd -M -s /sbin/nologin -u 601 slurm;groupmod -g 601 slurm";done
4.2 管理/登录/数据库节点slurm安装
# 软件版本:slurm-23.02.1.tar.bz2# 管理节点配置tar -xf slurm-23.02.1.tar.bz2
cd slurm-23.02.1/
./configure --prefix=/opt/hpc/slurm/slurm-23.02.1 \
--sysconfdir=/opt/hpc/slurm/slurm-23.02.1/etc \
--localstatedir=/opt/hpc/slurm/slurm-23.02.1/var \
--runstatedir=/opt/hpc/slurm/slurm-23.02.1/var/run \
--with-munge=/opt/hpc/slurm/munge-0.5.15 \
--with-pmix=/opt/hpc/slurm/pmix/pmix-3.2.3:/opt/hpc/slurm/pmix/pmix-4.2.2 \
--enable-pam \
--with-hdf5=yes
make -j 4makeinstall# 安装pmi2并行协议cd contribs/pmi2
makeinstall# 安装pam认证协议cd contribs/pam_slurm_adopt/
makemakeinstall# 计算节点配置## 还是在管理节点把安装好的文件传输给每个计算节点### pdsh命令方式
pdsh -w node[10-20]"mkdir -p /opt/hpc/slurm"
pdcp -r -w node[10-20] /opt/hpc/slurm/slurm-23.02.1  /opt/hpc/slurm/

### for...in...do命令方式foriin`seq1020`;dosshnode$i"mkdir -p /opt/hpc/slurm";doneforiin`seq1020`;doscp -r /opt/hpc/slurm/slurm-23.02.1 node$i:/opt/hpc/slurm;done## 传输pam插件配置文件(为下面pam配置做准备,如果不配置可以不运行以下命令)#### pdsh命令方式
pdcp -w node[10-20] /lib64/security/pam_slurm_adopt.* /lib64/security

#### for...in...doforiin`seq1020`;doscp -r /lib64/security/pam_slurm_adopt.* node$i:/lib64/security;done
# 创建slurm配置目录和文件(管理节点配置)mkdir /opt/hpc/slurm/slurm-23.02.1/etc
mkdir -p /opt/hpc/slurm/slurm-23.02.1/var/{log,run,spool}mkdir -p /opt/hpc/slurm/slurm-23.02.1/var/log/slurm
touch /opt/hpc/slurm/slurm-23.02.1/var/log/slurm/{slurmctld.log,slurmd.log}mkdir -p /opt/hpc/slurm/slurm-23.02.1/var/spool/{slurmctld,slurmd}chown slurm.slurm /opt/hpc/slurm/slurm-23.02.1/var/spool/slurmctld

# 复制slurm配置文件(管理节点配置)sudocp slurm.conf.example /opt/hpc/slurm/slurm-23.02.1/etc/slurm.conf
sudocp slurmdbd.conf.example /opt/hpc/slurm/slurm-23.02.1/etc/slurmdbd.conf
sudocp cgroup.conf.example /opt/hpc/slurm/slurm-23.02.1/etc/cgroup.conf

# 修改slurm配置文件属性(管理节点配置)# slurmdbd.conf文件所有者须为slurm用户,文件权限须为600:chown slurm.slurm /opt/hpc/slurm/slurm-23.02.1/etc/slurmdbd.conf
chmod600 /opt/hpc/slurm/slurm-23.02.1/etc/slurmdbd.conf
chown root /opt/hpc/slurm/slurm-23.02.1/etc/slurm.conf
chown slurm.slurm /opt/hpc/slurm/slurm-23.02.1/var/log/slurm/
chown slurm.slurm /opt/hpc/slurm/slurm-23.02.1/var/spool/slurmctld
chown slurm.slurm /opt/hpc/slurm/slurm-23.02.1/var/spool/slurmd

# 计算节点slurm配置文件及属性配置
pdsh -w node[10-20]"mkdir -p /opt/hpc/slurm/slurm-23.02.1/var/{log,run,spool};mkdir -p /opt/hpc/slurm/slurm-23.02.1/var/log/slurm"
pdsh -w node[10-20]"touch /opt/hpc/slurm/slurm-23.02.1/var/log/slurm/slurmd.log;mkdir -p /opt/hpc/slurm/slurm-23.02.1/var/spool/slurmd;chown slurm.slurm /opt/hpc/slurm/slurm-23.02.1/var/spool/slurmd/"
# 配置slurmctlld slurmdbd slurmd启动文件(管理节点)sudocp slurmctld.service  slurmdbd.service  slurmd.service /usr/lib/systemd/system

注意! slurmctld.service slurmdbd.service slurmd.service启动配置文件的位置是在源码安装包内/etc目录里,编译安装后并不会自动安装到指定目录下,需要自己手动复制到/usr/lib/systemd/system启动目录下。

4.3 slurm.conf主配置文件
# 配置slurm.conf文件(管理节点)# scontrol reconfig 启动后修改此配置文件需要重新输入命令进行更新# Cluster Name:集群名ClusterName=LDD-INSPUR # 集群名,任意英文和数字名字# Control Machines:Slurmctld控制进程节点SlurmctldHost=LDD-HPC # 启动slurmctld进程的节点名# BackupController=   # 冗余备份节点,可空着SlurmctldParameters=enable_configless # 采用无配置模式# Slurm User:Slurm用户SlurmUser=slurm # slurmctld启动时采用的用户名# Slurm Port Numbers:Slurm服务通信端口SlurmctldPort=6817# Slurmctld服务端口,设为6817,如不设置,默认为6817号端口SlurmdPort=6818# Slurmd服务端口,设为6818,如不设置,默认为6818号端口# State Preservation:状态保持StateSaveLocation=/opt/hpc/slurm/slurm-23.02.1/var/spool/slurmctld 
    # 存储管理节点slurmctld服务状态的目录,如有备份控制节点,则需要所有SlurmctldHost节点都能共享读写该目录SlurmdSpoolDir=/opt/hpc/slurm/slurm-23.02.1/var/spool/slurmd 
    # 计算节点Slurmd服务所需要的目录,为各节点各自私有目录,不得多个slurmd节点共享ReturnToService=1#设定当DOWN(失去响应)状态节点如何恢复服务,默认为0。# 0: 节点状态保持DOWN状态,只有当管理员明确使其恢复服务时才恢复# 1: 仅当由于无响应而将DOWN节点设置为DOWN状态时,才可以当有效配置注册后使DOWN节点恢复服务。# 如节点由于任何其它原因(内存不足、意外重启等)被设置为DOWN,其状态将不会自动更改。# 当节点的内存、GRES、CPU计数等等于或大于slurm.conf中配置的值时,该节点才注册为有效配置。# 2: 使用有效配置注册后,DOWN节点将可供使用。该节点可能因任何原因被设置为DOWN状态。#当节点的内存、GRES、CPU计数等等于或大于slurm.conf 中配置的值,该节点才注册为有效配置。# Default MPI Type:默认MPI类型MPIDefault=None
     # MPI-PMI2: 对支持PMI2的MPI实现# MPI-PMIx: Exascale PMI实现# None: 对于大多数其它MPI,建议设置# Process Tracking:进程追踪,定义用于确定特定的作业所对应的进程的算法,它使用信号、杀死和记账与作业步相关联的进程ProctrackType=proctrack/cgroup
     # Cgroup: 采用Linux cgroup来生成作业容器并追踪进程,需要设定/etc/slurm/cgroup.conf文件# Cray XC: 采用Cray XC专有进程追踪# LinuxProc: 采用父进程IP记录,进程可以脱离Slurm控制# Pgid: 采用Unix进程组ID(Process Group ID),进程如改变了其进程组ID则可以脱离Slurm控制# Scheduling:调度# DefMemPerCPU=0 # 默认每颗CPU可用内存,以MB为单位,0为不限制。# 如果将单个处理器分配给作业(SelectType=select/cons_res 或 SelectType=select/cons_tres),通常会使用DefMemPerCPU# MaxMemPerCPU=0 # 最大每颗CPU可用内存,以MB为单位,0为不限制。# 如果将单个处理器分配给作业(SelectType=select/cons_res 或 SelectType=select/cons_tres),通常会使用MaxMemPerCPU# SchedulerTimeSlice=30 # 当GANG调度启用时的时间片长度,以秒为单位SchedulerType=sched/backfill 
    # 要使用的调度程序的类型。注意,slurmctld守护程序必须重新启动才能使调度程序类型的更改生效(重新配置正在运行的守护程序对此参数无效)。如果需要,可以使用scontrol命令手动更改作业优先级。可接受的类型为:# sched/backfill # 用于回填调度模块以增加默认FIFO调度。如这样做不会延迟任何较高优先级作业的预期启动时间,则回填调度将启动较低优先级作# 回填调度的有效性取决于用户指定的作业时间限制,否则所有作业将具有相同的时间限制,并且回填是不可能的。# 注意上面SchedulerParameters选项的文档。这是默认配置# sched/builtin # 按优先级顺序启动作业的FIFO调度程序。如队列中的任何作业无法调度,则不会调度该队列中优先级较低的作业。# 对于作业的一个例外是由于队列限制(如时间限制)或关闭/耗尽节点而无法运行。在这种情况下,可以启动较低优先级的作业,# 而不会影响较高优先级的作业。# sched/hold # 如果 /etc/slurm.hold 文件存在,则暂停所有新提交的作业,否则使用内置的FIFO调度程序。# Resource Selection:资源选择,定义作业资源(节点)选择算法SelectType=select/cons_tres
     # select/cons_tres: 单个的CPU核、内存、GPU及其它可追踪资源作为可消费资源(消费及分配),建议设置# SelectTypeParameters:资源选择类型参数,当SelectType=select/linear时仅支持CR_ONE_TASK_PER_CORE和CR_Memory;# 当SelectType=select/cons_res、 SelectType=select/cray_aries和SelectType=select/cons_tres时,# 默认采用CR_Core_MemorySelectTypeParameters=CR_Core_Memory
     # CR_Core_Memory: CPU和内存作为可消费资源# Task Launch:任务启动TaskPlugin=task/cgroup,task/affinity 
     #设定任务启动插件。可被用于提供节点内的资源管理(如绑定任务到特定处理器),TaskPlugin值可为:# task/affinity: CPU亲和支持(man srun查看其中--cpu-bind、--mem-bind和-E选项)# task/cgroup: 强制采用Linux控制组cgroup分配资源(man group.conf查看帮助)# Event Logging:事件记录# Slurmctld和slurmd守护进程可以配置为采用不同级别的详细度记录,从0(不记录)到7(极度详细)SlurmctldDebug=info # 默认为infoSlurmctldLogFile=/opt/hpc/slurm/slurm-23.02.1/var/log/slurm/slurmctld.log 
    # 如是空白,则记录到syslogSlurmdDebug=info # 默认为infoSlurmdLogFile=/opt/hpc/slurm/slurm-23.02.1/var/log/slurm/slurmd.log 
    # 如为空白,则记录到syslog,如名字中的有字符串"%h",则"%h"将被替换为节点名# Job Completion Logging:作业完成记录JobCompType=jobcomp/mysql
# 设定数据库在哪里运行,且如何连接JobCompHost=LDD-HPC 
    # 存储作业完成信息的数据库主机名# JobCompPort= # 存储作业完成信息的数据库服务器监听端口JobCompUser=slurm 
    # 用于与存储作业完成信息数据库进行对话的用户名JobCompPass=MySetPassdWord 
    # 用于与存储作业完成信息数据库进行对话的用户密码# Job Accounting Gather:作业记账收集JobAcctGatherType=jobacct_gather/linux 

# jobacct_gather/linux: 收集Linux进程表信息,建议JobAcctGatherFrequency=30# 设定轮寻间隔,以秒为单位。若为-,则禁止周期性抽样# Job Accounting Storage:作业记账存储AccountingStorageType=accounting_storage/slurmdbd
# 与作业记账收集一起,Slurm可以采用不同风格存储可以以许多不同的方式存储会计信息,可为以下值之一:# accounting_storage/none: 不记录记账信息# accounting_storage/slurmdbd: 将作业记账信息写入Slurm DBD数据库# AccountingStorageLoc: 设定文件位置或数据库名,为完整绝对路径或为数据库的数据库名,当采用slurmdb时默认为slurm_acct_db# 设定记账数据库信息,及如何连接AccountingStorageHost=LDD-HPC # 记账数据库主机名# AccountingStoragePort= # 记账数据库服务监听端口# AccountingStorageUser=slurm # 记账数据库用户名# AccountingStoragePass=MySetPassdWord # 记账数据库用户密码。对于SlurmDBD,提供企业范围的身份验证,# 如采用于Munge守护进程,则这是应该用munge套接字socket名(/var/run/munge/global.socket.2)代替。默认不设置# AccountingStoreFlags= # 以逗号(,)分割的列表。选项是:# job_comment:在数据库中存储作业说明域# job_script:在数据库中存储脚本# job_env:存储批处理作业的环境变量# AccountingStorageTRES=gres/gpu # 设置GPU时需要# GresTypes=gpu # 设置GPU时需要# Process ID Logging:进程ID记录,定义记录守护进程的进程ID的位置SlurmctldPidFile=/opt/hpc/slurm/slurm-23.02.1/var/run/slurmctld.pid 
    # 存储slurmctld进程号PID的文件SlurmdPidFile=/opt/hpc/slurm/slurm-23.02.1/var/run/slurmd.pid 
    # 存储slurmd进程号PID的文件# Timers:定时器# SlurmctldTimeout=120 # 设定备份控制器在主控制器等待多少秒后成为激活的控制器SlurmdTimeout=300# Slurm控制器等待slurmd未响应请求多少秒后将该节点状态设置为DOWNInactiveLimit=0# 潜伏期控制器等待srun命令响应多少秒后,将在考虑作业或作业步骤不活动并终止它之前。0表示无限长等待MinJobAge=300# Slurm控制器在等待作业结束多少秒后清理其记录KillWait=30# 在作业到达其时间限制前等待多少秒后在发送SIGKILLL信号之前发送TERM信号以优雅地终止WaitTime=0# 在一个作业步的第一个任务结束后等待多少秒后结束所有其它任务,0表示无限长等待# Compute Machines:计算节点NodeName=LDD-HPC NodeAddr=193.168.1.195 CPUs=8RealMemory=16045Sockets=1CoresPerSocket=8ThreadsPerCore=1State=UNKNOWN
NodeName=node01 NodeAddr=193.168.1.42 CPUs=8RealMemory=16045Sockets=1CoresPerSocket=8ThreadsPerCore=1State=UNKNOWN
# NodeName=node[10-20] NodeAddr=10.110.100.[10-20] CPUs=192 RealMemory=128581 Sockets=2 CoresPerSocket=48 ThreadsPerCore=2 State=UNKNOWN# NodeName=gnode[01-10] Gres=gpu:v100:2 CPUs=40 RealMemory=385560 Sockets=2 CoresPerSocket=20 ThreadsPerCore=1 State=UNKNOWN #GPU节点例子,主要为Gres=gpu:v100:2# NodeName=node[1-10] # 计算节点名,node[1-10]表示为从node1、node2连续编号到node10,其余类似# NodeAddr=192.168.1.[1-10] # 计算节点IP# CPUs=48 # 节点内CPU核数,如开着超线程,则按照2倍核数计算,其值为:Sockets*CoresPerSocket*ThreadsPerCore# RealMemory=192000 # 节点内作业可用内存数(MB),一般不大于free -m的输出,当启用select/cons_res插件限制内存时使用# Sockets=2 # 节点内CPU颗数# CoresPerSocket=24 # 每颗CPU核数# ThreadsPerCore=1 # 每核逻辑线程数,如开了超线程,则为2# State=UNKNOWN # 状态,是否启用,State可以为以下之一:# CLOUD   # 在云上存在# DOWN    # 节点失效,不能分配给在作业# DRAIN   # 节点不能分配给作业# FAIL    # 节点即将失效,不能接受分配新作业# FAILING # 节点即将失效,但上面有作业未完成,不能接收新作业# FUTURE  # 节点为了将来使用,当Slurm守护进程启动时设置为不存在,可以之后采用scontrol命令简单地改变其状态,# 而不是需要重启slurmctld守护进程。当这些节点有效后,修改slurm.conf中它们的State。在它们被设置为有效前# 采用Slurm看不到它们,也尝试与其联系。# 动态未来节点(Dynamic Future Nodes):# slurmd启动时如有-F[<feature>]参数,将关联到一个与slurmd -C命令显示配置(sockets、cores、threads)相同的配置的FUTURE节点。# 节点的NodeAddr和NodeHostname从slurmd守护进程自动获取,并且当被设置为FUTURE状态后自动清除。# 动态未来节点在重启时保持non-FUTURE状态。利用scontrol可以将其设置为FUTURE状态。# 若NodeName与slurmd的HostName映射未通过DNS更新,动态未来节点不知道在之间如何进行通信,# 其原因在于NodeAddr和NodeHostName未在slurm.conf被定义,# 而且扇出通信(fanout communication)需要通过将TreeWidth设置为一个较高的数字(如65533)来使其无效。# 若做了DNS映射,则可以使用cloud_dns SlurmctldParameter。# UNKNOWN # 节点状态未被定义,但将在节点上启动slurmd进程后设置为BUSY或IDLE,该为默认值。PartitionName=master Nodes=LDD-HPC Default=NO MaxTime=INFINITE State=UP
PartitionName=compute Nodes=node[10-20]Default=YES MaxTime=INFINITE State=UP
# PartitionName=batch Nodes=node[1-10] Default=YES MaxTime=INFINITE State=UP# PartitionName=batch # 队列分区名# Nodes=node[1-10] # 节点名# Default=Yes # 作为默认队列,运行作业不知明队列名时采用的队列# MaxTime=INFINITE # 作业最大运行时间,以分钟为单位,INFINITE表示为无限制# State=UP # 状态,是否启用# Gres=gpu:v100:2 # 设置节点有两块v100 GPU卡,需要在GPU节点 /etc/slum/gres.conf 文件中有类似下面配置:#AutoDetect=nvml# Name=gpu Type=v100 File=/dev/nvidia[0-1] #设置资源的名称Name是gpu,类型Type为v100,名称与类型可以任意取,# 但需要与其它方面配置对应,File=/dev/nvidia[0-1]指明了使用的GPU设备。#Name=mps Count=100
4.4 cgroup.conf文件配置
# 配置cgroup.conf(管理节点配置)# 启用cgroup资源限制,可以防止用户实际使用的资源超过用户为该作业通过作业调度系统申请到的资源。# 如不设定,注释掉在 /etc/slurm/slurm.conf中 ProctrackType=proctrack/cgroup 及 TaskPlugin=task/cgroup 参数。# 如需要设定,打开/etc/slurm/slurm.conf中 ProctrackType=proctrack/cgroup 和 TaskPlugin=task/cgroup 参数,# 还需要设定 /etc/slurm/cgroup.conf 文件内容类似如下:# Slurm cgroup support configuration file# See man slurm.conf and man cgroup.conf for further# information on cgroup configuration parametersCgroupAutomount=yes 
# Cgroup自动挂载。Slurm cgroup插件需要挂载有效且功能正常的cgroup子系统于 /sys/fs/cgroup/<subsystem_name>。# 当启动时,插件检查该子系统是否可用。如不可用,该插件将启动失败,直到CgroupAutomount设置为yes。# 在此情形侠,插件首先尝试挂载所需的子系统。CgroupMountpoint=/sys/fs/cgroup 
# 设置cgroup挂载点,该目录应该是可写的,可以含有每个子系统挂载的cgroups。默认在/sys/fs/cgroup。# CgroupPlugin= # 设置与cgroup子系统交互采用的插件。其值可以为cgroup/v1(支持传统的cgroup v1接口)或autodetect(根据系统提供的cgroup版本自动选择)。#默认为autodetect。ConstrainCores=yes 
# 如设为yes,则容器允许将CPU核作为可分配资源子集,该项功能使用cpuset子系统。由于HWLOC 1.11.5版本中修复的错误,# 除了task/cgroup外,可能还需要task/affinity插件才能正常运行。默认为no。ConstrainDevices=yes 
# 如设为yes,则容器允许将基于GRES的设备作为可分配资源,这使用设备子系统。默认为no。ConstrainRAMSpace=yes 
# 如设为yes,则通过将内存软限制设置为分配的内存,并将硬限制设置为分配的内存AllowedRAMSpace来限制作业的内存使用。# 默认值为no,在这种情况下,如ConstrainSwapSpace设为“yes”,则作业的内存限制将设置为其交换空间(SWAP)限制。#注意:在使用ConstrainRAMSpace时,如果一个作业步中所有进程使用的总内存大于限制,那么内核将触发内存不足(Out Of Memory,OOM)事件,# 将杀死作业步中的一个或多个进程。作业步状态将被标记为OOM,但作业步本身将继续运行,作业步中的其它进程也可能继续运行。
4.5 slurmdb.conf文件配置
# 配置slurmdbd.conf (管理节点配置)# 认证信息AuthType=auth/munge 
    # 认证方式,该处采用munge进行认证AuthInfo=/opt/hpc/slurm/munge-0.5.15/var/run/munge/munge.socket.2 
    # 为了与slurmctld控制节点通信的其它认证信息# slurmDBD信息DbdHost=LDD-HPC # 数据库节点名DbdAddr=127.0.0.1 # 数据库IP地址# DbdBackupHost=admin2 # 数据库冗余备份节点# DbdPort=7031 # 数据库端口号,默认为7031SlurmUser=slurm 
    # 用户数据库操作的用户MessageTimeout=60# 允许以秒为单位完成往返通信的时间,默认为10秒DebugLevel=debug5 # 调试信息级别,quiet:无调试信息;fatal:仅严重错误信息;# error:仅错误信息;# info:错误与通常信息;verbose:错误和详细信息;# debug:错误、详细和调试信息;debug2:错误、详细和更多调试信息;# debug3:错误、详细和甚至更多调试信息;# debug4:错误、详细和甚至更多调试信息;# debug5:错误、详细和甚至更多调试信息。debug数字越大,信息越详细DefaultQOS=normal # 默认QOSLogFile=/opt/hpc/slurm/slurm-23.02.1/var/log/slurm/slurmdbd.log 
    # slurmdbd守护进程日志文件绝对路径PidFile=/opt/hpc/slurm/slurm-23.02.1/var/run/slurmdbd.pid 
    # slurmdbd守护进程存储进程号文件绝对路径PrivateData=accounts,events,users,usage,jobs 
    # 对于普通用户隐藏的数据。默认所有信息对所有用户开放,SlurmUser、root和AdminLevel=Admin用户可以查看所有信息。# 多个值可以采用逗号(,)分割:# accounts:阻止用户查看账户信息,除非该用户是他们的协调人# events:阻止用户查看事件信息,除非该用户具有操作员或更高级身份# jobs:阻止普户查看其他用户的作业信息,除非该用户是使用 sacct 时运行作业的帐户的协调员。# reservations:限制具有操作员及以上身份的用户获取资源预留信息。# usage:阻止用户查看其他用户利用率。适用于sreport命令# users:阻止用户查看除自己以外的任何用户的信息,使得用户只能看到他们处理的关联。# 协调人可以看到他们作为协调人的帐户中所有用户的关联,但只有在列出用户时才能看到自己。#TrackWCKey=yes # 工作负载特征键。用于设置Workload Characterization Key的显示和跟踪。# 必须设置为跟踪wckey的使用。这必须设置为从WCKeys生成汇总使用表。# 注意:如果在此处设置TrackWCKey而不是在您的各种slurm.conf文件中,则所有作业都将归因于它们的默认WCKey。# Database信息,详细解释参见前面slurm.conf中的StorageType=accounting_storage/mysql # 数据存储类型StorageHost=LDD-HPC # 存储数据库节点名StorageLoc=slurm_acct_db # 存储位置StoragePort=3306# 存储数据库服务端口号StorageUser=slurm # 存储数据库用户名StoragePass=MySetPassdWord # 存储数据库密码
4.6 计算节点启动文件配置
# 增加 --conf-server LDD-HPC:6817设定slurmctld管理服务器主机名vim slurmd.service
[Unit]Description=Slurm node daemon
After=munge.service network-online.target remote-fs.target
Wants=network-online.target
#ConditionPathExists=/opt/hpc/slurm/slurm-23.02.1/etc/slurm.conf[Service]Type=simple
EnvironmentFile=-/etc/sysconfig/slurmd
EnvironmentFile=-/etc/default/slurmd
ExecStart=/opt/hpc/slurm/slurm-23.02.1/sbin/slurmd --conf-server LDD-HPC:6817 -D -s $SLURMD_OPTIONSExecReload=/bin/kill -HUP $MAINPIDKillMode=process
LimitNOFILE=131072LimitMEMLOCK=infinity
LimitSTACK=infinity
Delegate=yes

# Uncomment the following lines to disable logging through journald.# NOTE: It may be preferable to set these through an override file instead.#StandardOutput=null#StandardError=null[Install]WantedBy=multi-user.target
# 将该文件复制到各节点:# pdsh命令方式sudo pdcp -w node[10-20] slurmd.service /lib/systemd/system/

#for...in...do命令方式foriin`seq1020`;dosshnode$i"slurmd.service /lib/systemd/system/"
# 启动各计算节点slurmd服务sudo pdsh -w node[10-20]"systemctl daemon-reload; systemctl enable --now slurmd"##for...in...do命令方式foriin`seq1020`;dosshnode$i"systemctl daemon-reload; systemctl enable --now slurmd"
4.7 启动slurm及相关服务
# 设置服务开机启动,且现在就开始启动# 管理节点
systemctl restart munge
systemctl enable --now mariadb
systemctl enable --now slurmdbd
systemctl enable --now slurmctld

# 计算节点
systemctl restart munge
systemctl enalbe --now slurmd
4.8 pam插件安装(可选)

slurm可以通过pam插件限制普通用户随意登录计算节点,只有通过srun sbatch salloc命令提交到了作业后才可以进入计算节点,如果选择配置,那么在4.2节slurm安装的时候就需要运行配置pam插件命令

管理节点:主要配置文件 slurm.conf cgroup.conf

计算节点:主要配置文件/etc/pam.d/sshd /etc/pam.d/system-auth /etc/pam.d/password-auth

# slurm.conf 增加如下三个参数,如果已有就忽略(管理节点)PrologFlags=CONTAIN
TaskPlugin=task/cgroup
ProctrackType=proctrack/cgroup
# cgroup.conf 增加如下二个参数,如果已有就忽略(管理节点)CgroupAutomount=yes
ConstrainCores=yes
# 刷新slurm.conf配置
scontrol reconfig
# /etc/pam.d/sshd 配置内容(计算节点)#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
account    sufficient   pam_listfile.so item=user sense=allow file=/etc/ssh/allowed_users onerr=fail #(新增)
account    required     pam_slurm.so #(新增)# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare
# pdsh 命令方式
pdsh -w node[10-20]'echo -e "#slurm\naccount    sufficient   pam_listfile.so item=user sense=allow file=/etc/ssh/allowed_users onerr=fail" >> /etc/pam.d/sshd'
pdsh -w node[10-20]'echo -e "account    required     pam_slurm_adopt.so" >> /etc/pam.d/sshd'#for...in...do命令方式foriin`seq1020`;dosshnode$i'echo -e "#slurm\naccount    sufficient   pam_listfile.so item=user sense=allow file=/etc/ssh/allowed_users onerr=fail" >> /etc/pam.d/sshd';doneforiin`seq1020`;dosshnode$i'echo -e "account    required     pam_slurm_adopt.so" >> /etc/pam.d/sshd';done
# /etc/pam.d/system-auth 配置内容(计算节点)#%PAM-1.0# This file is auto-generated.# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_fprintd.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >=1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
#account     sufficient    pam_localuser.so (注释)
account     sufficient    pam_succeed_if.so uid <1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
#-session     optional      pam_systemd.so (注释)
session     [success=1default=ignore] pam_succeed_if.so servicein crond quiet use_uid
session     required      pam_unix.so
# pdsh 命令方式
pdsh -w node[10-20]"sed -i 's/account*.*pam_localuser.so/#account     sufficient    pam_localuser.so/g' /etc/pam.d/system-auth"
pdsh -w node[10-20]"sed -i 's/-*.*pam_systemd.so/#-session     optional      pam_systemd.so/g' /etc/pam.d/system-auth"#for...in..do命令方式foriin`seq1020`;dosshnode$i"sed -i 's/account*.*pam_localuser.so/#account     sufficient    pam_localuser.so/g' /etc/pam.d/system-auth";doneforiin`seq1020`;dosshnode$i"sed -i 's/-*.*pam_systemd.so/#-session     optional      pam_systemd.so/g' /etc/pam.d/system-auth";done
# /etc/pam.d/password-auth 配置内容(计算节点)#%PAM-1.0# This file is auto-generated.# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >=1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
#account     sufficient    pam_localuser.so (注释)
account     sufficient    pam_succeed_if.so uid <1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok

password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
#-session     optional      pam_systemd.so (注释)
session     [success=1default=ignore] pam_succeed_if.so servicein crond quiet use_uid
session     required      pam_unix.so
# pdsh 命令方式
pdsh -w node[10-20]"sed -i 's/account*.*pam_localuser.so/#account     sufficient    pam_localuser.so/g' /etc/pam.d/password-auth"
pdsh -w node[10-20]"sed -i 's/-*.*pam_systemd.so/#-session     optional      pam_systemd.so/g' /etc/pam.d/password-auth"#for...in..do命令方式foriin`seq1020`;dosshnode$i"sed -i 's/account*.*pam_localuser.so/#account     sufficient    pam_localuser.so/g' /etc/pam.d/password-auth";doneforiin`seq1020`;dosshnode$i"sed -i 's/-*.*pam_systemd.so/#-session     optional      pam_systemd.so/g' /etc/pam.d/password-auth";done
# 创建无作业可登录计算节点白名单# 把允许登录计算节点的用户名写入各计算节点/etc/ssh/allowed_users文件中## pdsh 命令方式
pdsh -w node[10-20]"touch /etc/ssh/allowed_users;chmod 600 /etc/ssh/allowed_users"sudo pdsh -w node[10-20]"echo -e `whoami` >> /etc/ssh/allowed_users"#for...in..do命令方式foriin`seq1020`;dosshnode$i"touch /etc/ssh/allowed_users;chmod 600 /etc/ssh/allowed_users";doneforiin`seq1020`;dosshnode$i"echo -e `whoami` >> /etc/ssh/allowed_users";done
# 重启各计算节点sshd服务## pdsh命令方式
pdsh -w node[10-20]"systemctl restart sshd"#for...in..do命令方式foriin`seq1020`;dosshnode$i"systemctl restart sshd";done
五、★ slurm基本命令

5.1 sinfo 查看集群状态

sinfo -l 查看队列信息

sinfo -N 查看节点信息

节点状态包括:

drain

(节点故障),

alloc

(节点在用),

idle

(节点可用),

down

(节点下线),

mix

(节点部分占用,但仍有剩余资源)。

5.2 squeue 查看作业信息

squeue -j 52 查看特定作业号信息

squeue -l 查看当前作业信息

作业状态包括

R

(正在运行),

PD

(正在排队),

CG

(即将完成),

CD

(已完成)。

默认情况下,

squeue

只会展示在排队或在运行的作业。

5.3 sbatch 作业脚本提交

准备作业脚本然后通过

sbatch

提交是 Slurm 的最常见用法。 为了将作业脚本提交给作业系统,Slurm 使用 sbatch test.slurm

#sbatch 作业脚本示例#!/bin/bash### 输入申请资源信息#SBATCH --job-name=ping#SBATCH -p compute#SBATCH -N 2#SBATCH -n 4#SBATCH --ntasks-per-node=2#SBATCH --time=00:02:00#SBATCH --output=%j.out#SBATCH --error=%j.err### 输入当前作业所需环境
module load xxxx/xxxx

### 输入作业提交命令及相关输出信息echo LDD-INSPUR JOB_ID:${SLURM_JOB_ID}echo LDD-INSPUR JOB_NAME:${SLURM_JOB_NAME}echo LDD-INSPUR SQUEUE_NAME:${SLURM_JOB_PARTITION}echo LDD-INSPUR COMPUTE_NODE_LIST:${SLURM_JOB_NODELIST}echo LDD-INSPUR COMPUTE_NODE_NUMS:${SLURM_JOB_NUM_NODES}echo LDD-INSPUR NTASKS_NUMS:${SLURM_NTASKS}echo LDD-INSPUR JOB_DIR:${SLURM_SUBMIT_DIR}echo LDD-INSPUR JOB_HOSTNAME:${SLURM_SUBMIT_HOST}echo${SLURM_JOB_NAME}_start_on:$(date)ping -c 50 node10
echo${SLURM_JOB_NAME}_end_on:$(date)
5.4 scontrol 节点状态信息
# 查看计算节点信息
scontrol show node node10

# 查看分区信息
scontrol show partition

# 重启计算节点状态信息
scontrol update nodename=node10 state=resume

# 设置计算节点状态
scontrol update nodename=node10 state=down reason='memory bad'# 挂起作业号21
scontrol hold 21# 重新释放被挂起的作业
scontrol release 21# 添加作业依赖,以便在前面作业号完成后才开始运行
scontrol update dependency=21
5.5 sacct 完成作业信息
# 此命令需要root权限# 显示过去24小时作业信息
sacct

# 查看更多信息
sacct --format=jobid,jobname,partition,account,user,ntasks,alloccpus,elapsed,state,exitcode -j 36# 查看平均作业内存消耗和最大内存消耗
sacct --format="jobid,averss,maxrss" -j 36# 查看指定时间内的已完成的作业信息
sacct -S 2023-02-02 -E now -u ldd
六、★ slurm提交并行作业

6.1 sbatch提交并行计算脚本

注意! 本脚本需要运行的集群安装控制环境软件module,并且运行软件的求解器不需要界面模式就可以运行

#!/bin/bash### 输入计算资源信息#SBATCH --job-name=test#SBATCH -p Compute-Node#SBATCH -N 2#SBATCH -n 8#SBATCH --ntasks-per-node=4#SBATCH --chdir=/xxx/xxxx/xxx#SBATCH --output=%4j_%u.out#SBATCH --error=%4j_%u.err### 输入当前作业所需环境### module load xxx/xxx
module load mpich4/4.1.1
ulimit -s unlimited
ulimit -l unlimited

### 输入作业相关输出信息echo LDD-INSPUR JOB_ID:${SLURM_JOB_ID}echo LDD-INSPUR JOB_NAME:${SLURM_JOB_NAME}echo LDD-INSPUR SQUEUE_NAME:${SLURM_JOB_PARTITION}echo LDD-INSPUR COMPUTE_NODE_LIST:${SLURM_JOB_NODELIST}echo LDD-INSPUR COMPUTE_NODE_NUMS:${SLURM_JOB_NUM_NODES}echo LDD-INSPUR NTASKS_NUMS:${SLURM_NTASKS}echo LDD-INSPUR JOB_DIR:${SLURM_SUBMIT_DIR}echo LDD-INSPUR JOB_HOSTNAME:${SLURM_SUBMIT_HOST}echo${SLURM_JOB_NAME}_start_on:$(date)### 输入作业提交命令# export OMP_MUM_THREADS=8
mpirun ./xxxxxx
echo${SLURM_JOB_NAME}_end_on:$(date)
6.2 sbatch 提交star-ccm+脚本
#!/bin/bash### 输入计算资源信息#SBATCH --job-name=star-ccm+#SBATCH -p Compute-Node#SBATCH -N 2#SBATCH -n 96#SBATCH --ntasks-per-node=48#SBATCH --chdir=/xxx/xxxx/xxx#SBATCH --output=%4j_%u.out#SBATCH --error=%4j_%u.err### 输入当前作业所需环境### module load xxx/xxx
module load starccm+/2022
module load intel/2020
ulimit -s unlimited
ulimit -l unlimited

### 输入作业相关输出信息echo LDD-INSPUR JOB_ID:${SLURM_JOB_ID}echo LDD-INSPUR JOB_NAME:${SLURM_JOB_NAME}echo LDD-INSPUR SQUEUE_NAME:${SLURM_JOB_PARTITION}echo LDD-INSPUR COMPUTE_NODE_LIST:${SLURM_JOB_NODELIST}echo LDD-INSPUR COMPUTE_NODE_NUMS:${SLURM_JOB_NUM_NODES}echo LDD-INSPUR NTASKS_NUMS:${SLURM_NTASKS}echo LDD-INSPUR JOB_DIR:${SLURM_SUBMIT_DIR}echo LDD-INSPUR JOB_HOSTNAME:${SLURM_SUBMIT_HOST}echo${SLURM_JOB_NAME}_start_on:$(date)### 输入作业提交命令cat /dev/null > hostfiles
scontrol show hostname$SLURM_JOB_NODELIST> hostfiles
starccm+ -power -machinefile './hostfiles' -np $SLURM_NTASKS -rsh ssh -cpubind -batch run -batch-report xxxx.sim
echo${SLURM_JOB_NAME}_end_on:$(date)
七、最后

以上内容都是经过实战验证过的,由于配置环境是集群且离线安装,所以过程有些复杂,命令过于多,请仔细查看和复制命令以免照成不必要的错误。

(●’◡’●)最后感谢屏幕另一端的你,强有力的支持。


本文转载自: https://blog.csdn.net/weixin_41914699/article/details/130345284
版权归原作者 xyq_龙呆呆 所有, 如有侵权,请联系我们删除。

“【HPC最全最新离线安装开源资源管理、作业调度软件-SLURM】”的评论:

还没有评论