跳转至

CentOS7 Slurm 集群搭建

集群基本情况

节点名称 节点IP (10.0.1/24) 节点描述
master 10.0.1.2 管理节点/存储节点
node1 10.0.1.3 计算节点
node2 10.0.1.4 计算节点
node3 10.0.1.5 计算节点

准备工作

软件包镜像

https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11e6Zyua

主机名

Bash
1
2
3
vim /etc/hostname
#更改为所需主机名(master node1 ...)
reboot

防火墙

建议自行配置防火墙规则,放通计算节点所在子网。

Bash
1
2
3
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

关闭 SELinux (待定)

Bash
1
2
3
4
5
#查看状态
sestatus 
vim /etc/selinux/config
#将SELINUX=  后面改为disabled
reboot

网络配置

IP (可选:通过网关分配静态节点IP)

Bash
1
2
3
4
5
6
7
ip a
vim /etc/sysconfig/network-scripts/ifcfg-<网卡名>
#添加内容:将BOOTPROTO="dhcp"修改为BOOTPROTO="static/none";并在末尾添加
IPADDR=<对应节点对应IP>
NETMASK=<子网掩码>
GATEWAY=<网关地址>
DNS1=114.114.114.114 #或本地及其它公共DNS服务器
Bash
1
2
3
4
//重启网络
service network restart
//检查网络通畅性
ping baidu.com

hosts

Bash
1
2
3
4
5
6
vim /etc/hosts
#添加如下内容
10.0.1.2   master
10.0.1.3   node1
10.0.1.4   node2
10.0.1.5   node3

拷贝主节点hosts内容到所有节点

Bash
1
2
3
4
5
scp -r /etc/hosts root@node1:/etc/
# ...

# for循环
for i in `seq 1 3`; do scp -r /etc/hosts root@node$i:/etc/; done

ssh 密钥配置

Bash
1
2
3
4
5
6
7
8
ssh-keygen -t rsa 
#一路回车直到生成密钥

#发送密钥至其他节点
ssh-copy-id -i <主节点ip>
ssh-copy-id -i node1
ssh-copy-id -i node2
#...

验证密钥登录

Bash
1
2
3
4
5
ssh node1
ssh master
ssh node2
ssh master
#...

NTP 时间同步配置

Bash
1
2
3
4
5
6
7
8
9
#所有节点安装ntp,并启动其服务
yum -y install ntp
#master对计算节点远程安装
for node in node1 node2; do echo "Installing ntp on $node"; ssh root@$node "yum -y install ntp"; done
#安装完毕之后,启动服务
systemctl start ntpd.service
systemctl enable ntpd.service
for node in node1 node2 node3; do echo "$node:"; ssh root@$node "systemctl start ntpd.service"; done
for node in node1 node2 node3; do echo "$node:"; ssh root@$node "systemctl enable ntpd.service"; done

管理节点作为ntpserver

Bash
1
2
3
vim /etc/ntp.conf
#添加如下内容
restrict <集群子网ip> mask <子网掩码>

启动NTP服务,查看状态

Bash
1
2
3
systemctl restart ntpd
ntpstat
ntpq -p

计算节点以管理节点作为参照,注释外网时间

Bash
1
2
3
4
5
6
7
vim /etc/ntp.conf
#注释server XX.centos.pool.ntp.org这种的四行,添加
server <主节点ip>

#验证
systemctl restart ntpd
ntpq -p

修改时区

Bash
timedatectl set-timezone Asia/Shanghai
for node in node1 node2 node3; do echo "$node"; ssh root@$node "timedatectl set-timezone Asia/Shanghai"; done

NFS 共享目录配置

主节点

Bash
mkdir -p /public
chmod 755 /public
vim /etc/exports
#添加下述内容
/public *(rw,sync,insecure,no_subtree_check,no_root_squash)

#启动服务
systemctl enable nfs
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
systemctl status nfs
systemctl status rpcbind

检查是否正常加载配置文件

Bash
showmount -e localhost
# 如果显示出/public *则成功加载

计算节点

Bash
1
2
3
4
5
yum install nfs-utils rpcbind  -y
systemctl enable nfs 
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind

创建public,并对/etc/fstab文件进行配置

Bash
1
2
3
mkdir /public
vim /etc/fstab
<主节点ip>:/public /public nfs rw,sync 0 0

挂载public目录

Bash
1
2
3
4
mount -a
#验证
df
#出现了<主节点ip>:/public 目录即成功挂载

NIS 用户管理配置(可选)

网络信息服务(Network Information Service,NIS)是一种用于集中管理网络中用户和组信息、主机名、邮件别名等数据的协议。通过NIS,系统管理员可以在一个中心位置管理用户账户和配置文件,简化了跨多个系统的用户管理工作,提高了网络的可维护性和安全性。NIS常用于需要集中管理用户和资源的大型网络环境中。

在SLURM环境中,NIS通过集中管理用户账户和权限,确保在整个计算集群中用户身份的一致性,简化了用户管理,减少了维护成本。

主节点

Bash
yum install ypserv ypbind yp-tools rpcbind -y
#nisdomainname命令建立临时域名,但重启会失效
nisdomainname yuelaigroup.com
#永久设置域名
echo NISDOMAIN=yuelaigroup.com >> /etc/sysconfig/network
//为了使每次重启之后域名都能生效需要将nisdomainname命令添加到rc.local文件中
echo /usr/bin/nisdomainname yuelaigroup.com >> /etc/rc.d/rc.local
vim /etc/ypserv.conf
#添加以下内容,10.0.1.0/24 为集群子网地址
10.0.1.0/24           : *      : *         : none
Bash
systemctl  start  ypserv 
systemctl  start  yppasswdd 
systemctl  start  rpcbind
#设置系统启动的时候自动启动,需要使用system enable命令手动进行设置
systemctl enable  ypserv
systemctl enable  yppasswdd 
systemctl enable  rpcbind
/usr/lib64/yp/ypinit –m
#每次修改用户后,更新数据库 
make -C /var/yp 
systemctl restart rpcbind
systemctl restart yppasswdd
systemctl restart ypserv 

检查

Bash
rpcinfo -p localhost

计算节点

Bash
1
2
3
4
5
yum install ypbind yp-tools rpcbind -y
echo NISDOMAIN=yuelaigroup.com>> /etc/sysconfig/network
echo /usr/bin/nisdomainname yuelaigroup.com >> /etc/rc.d/rc.local
echo domain yuelaigroup.com server master >> /etc/yp.conf
echo ypserver m1 >> /etc/yp.conf

修改/etc/nsswitch.conf文件

Text Only
1
2
3
passwd:    files nis sss
shadow:    files nis sss
group:     files nis sss

修改/etc/sysconfig/authconfig文件,将USENIS修改为yes

Text Only
USENIS=yes

修改/etc/pam.d/system-auth文件,添加nis

Text Only
1
2
3
password   requisite   pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password   sufficient  pam_unix.so md5 shadow nis nullok try_first_pass use_authtok
password   required    pam_deny.so
Text Only
systemctl  start  ypbind 
systemctl enable  ypbind 

测试,yptest中用例3不通过没关系

Bash
1
2
3
yptest
ypwhich 
ypwhich -x

Munge 通信部署

MUNGE(MUNGE Uid ‘N’ Gid Emporium)是一种用于认证的工具,特别设计用于在分布式系统中验证用户的身份。MUNGE通过生成和验证带有加密签名的认证令牌,确保只有被授权的用户和进程才能访问系统资源。这种轻量级的认证机制具有高效、安全、易于配置的特点,广泛应用于高性能计算和集群环境中。

在SLURM环境中,MUNGE起到了至关重要的认证作用。SLURM利用MUNGE来验证提交作业的用户身份,确保只有合法用户才能提交和管理作业。通过这种机制,SLURM能够有效地防止未经授权的访问,保护计算资源和数据的安全。同时,MUNGE的高效性保证了认证过程不会成为系统性能的瓶颈,使得SLURM能够在大规模集群中高效运行。

同步所有节点UID和GID

Bash
1
2
3
#在每个节点上执行
groupadd -g 1108 munge
useradd -m -c "Munge Uid 'N' Gid Emporium" -d /var/lib/munge -u 1108 -g munge -s /sbin/nologin munge

查看munge id

Bash
#在每个节点上执行并查看是否相同
id munge

主节点执行

Bash
1
2
3
4
5
6
7
8
#在管理节点上,生成熵池
yum install -y rng-tools
rngd -r /dev/urandom
#修改service参数
vim /usr/lib/systemd/system/rngd.service
#修改如下:
[service]
ExecStart=/sbin/rngd -f -r /dev/urandom

主节点执行:启动服务

Bash
1
2
3
systemctl daemon-reload
systemctl start rngd
systemctl enable rngd

所有节点执行

Bash
yum install epel-release -y
yum install munge munge-libs munge-devel -y

主节点执行

Bash
1
2
3
4
5
6
# 密钥同步
/usr/sbin/create-munge-key -r
dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
scp -p /etc/munge/munge.key root@node1:/etc/munge/
scp -p /etc/munge/munge.key root@node2:/etc/munge/
# 其它node...

所有节点执行:赋权并启动

Bash
1
2
3
4
chown munge: /etc/munge/munge.key
chmod 400 /etc/munge/munge.key
systemctl start munge
systemctl enable munge

所有节点执行:查看状态,绿色即为正常

Bash
systemctl status munge

本地查看凭据

Bash
#预期为Success
munge -n | unmunge

凭证基准测试

Bash
remunge

Mariadb 数据库及 Slurm

Mariadb 及 SlurmID

主节点

Bash
yum -y install mariadb-server
systemctl start mariadb
systemctl enable mariadb
mysql
#设置mysql root密码
>set password=password('81SLURM@@rabGTjN7');
>create database slurm_acct_db;
>quit
mysql -uroot -p'81SLURM@@rabGTjN7'
>create user slurm;
#允许用户 slurm 使用密码 123456 从localhost连接到mysql服务器
>grant all on slurm_acct_db.* TO 'slurm'@'localhost' identified by '123456' with grant option;
>flush privileges;
>quit

所有节点:创建Slurm用户(可选)

Bash
1
2
3
4
5
6
groupadd -g 1109 slurm
useradd -m -c "Slurm manager" -d /var/lib/slurm -u 1109 -g slurm -s /bin/bash slurm
#设置密码
passwd slurm
#验证
id slurm

Slurm 安装配置

所有节点:安装依赖

Bash
yum install gcc gcc-c++ readline-devel perl-ExtUtils-MakeMaker pam-devel rpm-build mysql-devel python3 -y

主节点:buildrpm

Bash
1
2
3
wget https://download.schedmd.com/slurm/slurm-22.05.3.tar.bz2
yum install rpm-build -y
rpmbuild -ta --nodeps slurm-22.05.3.tar.bz2

编译制作完成后,可在目录/root/rpmbuild/RPMS/x86_64下得到rpm包

计算节点:创建文件夹

Bash
mkdir -p /root/rpmbuild/RPMS/ssh 

主节点:传输文件

Bash
1
2
3
scp -r /root/rpmbuild/RPMS/x86_64 root@node1:/root/rpmbuild/RPMS/x86_64
scp -r /root/rpmbuild/RPMS/x86_64 root@node2:/root/rpmbuild/RPMS/x86_64
#...

所有节点:安装Slurm

Bash
cd /root/rpmbuild/RPMS/x86_64/
yum localinstall slurm-*

主节点:修改配置文件slurm.conf以及slurmdbd.conf,并将slurm.conf传输至计算节点

Bash
1
2
3
4
5
6
cp /etc/slurm/cgroup.conf.example /etc/slurm/cgroup.conf
cp /etc/slurm/slurm.conf.example /etc/slurm/slurm.conf
cp /etc/slurm/slurmdbd.conf.example /etc/slurm/slurmdbd.conf

for node in node1 node2 node3; do echo "Copying to $node"; scp -r /etc/slurm/cgroup.conf root@$node:/etc/slurm/; done
for node in node1 node2 node3; do echo "Copying to $node"; scp -r /etc/slurm/slurm.conf root@$node:/etc/slurm/; done

所有节点:设置文件权限

Bash
mkdir /var/spool/slurmd

#可选
chown slurm: /var/spool/slurmd

mkdir /var/log/slurm

#可选
chown slurm: /var/log/slurm

mkdir /var/spool/slurmctld

#可选
chown slurm: /var/spool/slurmctld

主节点

Bash
1
2
3
4
5
6
7
systemctl start slurmdbd
systemctl enable slurmdbd
systemctl start slurmctld
systemctl enable slurmctld
#如果主节点也需要计算(需要计算的节点都需要启动该服务)
systemctl start slurmd
systemctl enable slurmd

所有计算节点

Bash
systemctl start slurmd
systemctl enable slurmd

测试

Bash
1
2
3
# 预期 AVAIL:up NODELIST:<所有node> STATE:idle
# 特别关注 STATE 
sinfo

Slurm 配置文件

slurm.conf

Text Only
#
# 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.
#
################################################
#                   CONTROL                    #
################################################
ClusterName=cluster    #集群名称
SlurmctldHost=master    #管理服务节点名称
SlurmctldPort=6817    #slurmctld服务端口
SlurmdPort=6818   #slurmd服务的端口
SlurmUser=slurm    #slurm的主用户
SlurmdUser=root    #slurmd服务的启动用户

################################################
#            LOGGING & OTHER PATHS             #
################################################
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurm/slurmd.log
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
SlurmdSpoolDir=/var/spool/slurmd
StateSaveLocation=/var/spool/slurmctld

################################################
#                  ACCOUNTING                  #
################################################
AccountingStorageEnforce=associations,limits,qos  #account存储数据的配置选项
AccountingStorageHost=master    #数据库存储节点
AccountingStoragePass=/var/run/munge/munge.socket.2    #munge认证文件,与slurmdbd.conf文件中的AuthInfo文件同名。
AccountingStoragePort=6819    #slurmd服务监听端口,默认为6819
AccountingStorageType=accounting_storage/slurmdbd    #数据库记账服务

################################################
#                      JOBS                    #
################################################
JobCompHost=localhost      #作业完成信息的数据库本节点
JobCompLoc=slurm_acct_db    #数据库名称
JobCompPass=123456    #slurm用户数据库密码
JobCompPort=3306    #数据库端口
JobCompType=jobcomp/mysql     #作业完成信息数据存储类型,采用mysql数据库
JobCompUser=slurm    #作业完成信息数据库用户名
JobContainerType=job_container/none
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/linux

################################################
#           SCHEDULING & ALLOCATION            #
################################################
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core

################################################
#                    TIMERS                    #
################################################
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=120
SlurmdTimeout=300
Waittime=0

################################################
#                    OTHER                     #
################################################
MpiDefault=pmi2 # 修改默认MPI
ProctrackType=proctrack/cgroup
ReturnToService=1
SwitchType=switch/none
TaskPlugin=task/affinity

################################################
#                    NODES                     #
################################################
# CPUs就是你的cpu核心数,一会开启时会有提示应该是多少,Sockets是cpu插槽数,CoresPerSocket每个插槽多少核心,ThreadsPerCore每个核心多少线程, RealMemory内存

# 改为自己的节点信息
NodeName=master NodeAddr=10.0.1.2  CPUs=2 CoresPerSocket=1 ThreadsPerCore=2 RealMemory=2000
NodeName=node1 NodeAddr=10.0.1.3  CPUs=2 CoresPerSocket=1 ThreadsPerCore=2 RealMemory=2000

################################################
#                  PARTITIONS                  #
################################################
# 节点分区,下面是吧所有节点作为compute区
# 如果节点名字是node1~node3,那么Nodes=node[1-3]

PartitionName=compute Nodes=ALL Default=YES MaxTime=INFINITE State=UP

slurmdbd.conf

Text Only
#
# slurmdbd.conf file.
#
# See the slurmdbd.conf man page for more information.
#
# Authentication info
AuthType=auth/munge     #认证方式,该处采用munge进行认证
AuthInfo=/var/run/munge/munge.socket.2     #为了与slurmctld控制节点通信的其它认证信息
#
# slurmDBD info
DbdAddr=master      #数据库节点名
DbdHost=localhost   #数据库IP地址
SlurmUser=slurm     #用户数据库操作的用户
DebugLevel=verbose  
LogFile=/var/log/slurm/slurmdbd.log     #slurmdbd守护进程日志文件绝对路径 
PidFile=/var/run/slurmdbd.pid     #slurmdbd守护进程存储进程号文件绝对路径
#
# Database info
StorageType=accounting_storage/mysql     #数据存储类型
StoragePass=123456     #存储数据库密码
StorageUser=slurm     #存储数据库用户名
StorageLoc=slurm_acct_db     #数据库名称

更新 slurm.conf 节点配置

各个节点状态可用 scontrol show node 查看,如果有问题会在 Reason 中显示。

slurm.conf 中的 RealMemory,假设安装了8 GB的内存,最好比最大内存低一些:将其更改为 RealMemory=5000 ,执行 scontrol reconfigure ,然后执行 scontrol update nodename=<nodename> state=resume

如果 sinfo 中出现状态为 unk 的节点,执行 scontrol update nodename=<nodename> state=resume

Slurm 测试

Bash
1
2
3
4
5
sinfo # 查看集群的节点信息
squeue # 查看集群的任务信息
srun hostname # 在集群上运行hostname命令
scontrol show node # 查看集群的节点信息
srun --mpi=list # 查看支持的mpi
  • PARTITION:节点的分区。每个任务都只能提交到分区中,不能跨分区。默认分区的名称后有 * 号;
  • AVAIL:分区的状态。UP 表示分区可用;
  • TIMELIMIT:分区对作业的时间限制。所有提交到该分区的作业都不能超过时间上限;
  • NODES:分区中的节点数量。这是该分区所有可以分配给用户的计算节点;
  • STATE:节点的状态。down 表示不可用,idle 表示空闲节点,alloc 表示已完全分配给用户使用,mix 表示已分配给用户,但仍有剩余的计算资源可用。同一分区可能会占据多个条目,这是因为分区中节点的状态不同;
  • NODELIST:节点的名称。同一节点可以编入多个分区。

Slurm 常用命令

https://hpcde.github.io/cluster-docs/docs/users/slurm/quickstart

为满足用户查询、提交、管理作业等需求,Slurm 提供了相当丰富的命令行工具,其中最为常用的如下:

命令 说明
sinfo 查看集群节点、节点分区等信息
squeue 查看作业队列、作业状态等信息
sacct 查看作业的计费信息,包括时长、资源使用量等
sattach 查看作业的标准输入输出
scancel 取消作业
salloc 申请计算资源
srun 提交一个作业步,在当前 shell 等待输出
sbatch 提交一个作业脚本,执行完成后结果输出到日志文件
scontrol 查看和修改各种 Slurm 对象,包括作业、节点、分区等
Bash
# 检查当前是否有足够的空闲节点:
$ sinfo -t idle
# 查看当前的作业队列,看是否有很多作业在排列中
$ squeue
# 查看历史作业的计费信息,看自己的作业是不是成功结束了
$ sacct



# 使用srun提交一个作业,等待标准输出
# "-N"指定节点数为"2"
# "-n"指定总任务数为"4",相当于说总共4个进程,每节点2个进程
# "-p"指定节点分区名称为"all"
# hostname是可执行文件,在这里我们仅仅让节点打印主机名
$ srun -p all -N 2 -n 4 hostname



# 写一个脚本文件,用"#SBATCH"向Slurm传递参数
# "-o slurm-log.txt"指定日志文件的路径
$ cat > ping.slurm << END
#!/bin/sh
#SBATCH -p all
#SBATCH -N 2
#SBATCH -o slurm-log.out
srun ping -c 60 nodedata
END

# 提交作业,立即返回不等待标准输出
$ sbatch ping.slurm
# 查看作业是否结束,状态为"PD"表示挂起,为"R"表示运行中,为"CG"表示正在结束
$ squeue
# 把当前标准I/O绑到运行中的作业步上,以便实时查看输出
#(假设作业号为31001,第一个作业步为31001.0)
$ sattach 31001.0
# 作业结束后,查看输出的日志文件
$ cat slurm-log.txt

Slurm 提交作业

https://hpcde.github.io/cluster-docs/docs/users/slurm/mpi-omp/

Bash
#!/bin/bash
#=================================================#
#     Job submission script for vasp@mmmsim      #
#=================================================#
#SBATCH --job-name=vasp-run
#_SBATCH --account=kzheng
#SBATCH --output=%x-%j.log
#SBATCH --error=%x-%j-error.log
#SBATCH --partition=compute
#_SBATCH --partition=platinum
#SBATCH --ntasks-per-node=56
#SBATCH --nodes 1
#SBATCH --exclusive
#_SBATCH --nodelist=node64
#_SBATCH --time=00:59:00

#>>>>>>>>>>>>>>>>>>>Job specification<<<<<<<<<<<<<<<<#
 ulimit -c unlimited
 ulimit -t unlimited
 ulimit -v unlimited
 ulimit -s unlimited
 ulimit -d unlimited
 ulimit -s unlimited
 ulimit -d unlimited
# Intel 2020
  export PATH=/opt/compilers_and_libraries_2020.4.304/linux/bin/intel64:$PATH
  export LD_LIBRARY_PATH=/opt/lib/intel64:/opt/mkl/lib/intel64:$LD_LIBRARY_PATH
  source /opt/compilers_and_libraries_2020.4.304/linux/bin/compilervars.sh intel64
# Intel MKL
  source /opt/mkl/bin/mklvars.sh  intel64
# export MKLROOT=/opt/compilers_and_libraries_2020.4.304/linux/mkl
# Intel MPI
  source /opt/compilers_and_libraries_2020.4.304/linux/mpi/intel64/bin/mpivars.sh  intel64
  export LD_LIBRARY_PATH=/home/kzheng/.conda/envs/kzheng/lib:/opt/compilers_and_libraries_2020.4.304/linux/mpi/intel64/libfabric/lib:$LD_LIBRARY_PATH

#>>>>>>>>>>>>>>>>>>>Job to run<<<<<<<<<<<<<<<<<<<<<#
mpirun="/opt/compilers_and_libraries_2020.4.304/linux/mpi/intel64/bin/mpiexec"

path="/opt/Code_CQJTU/bin/"
vasp5="/opt/Code_CQJTU/vasp.5.4.4/bin/vasp_std"
vasp6=$path"vasp_std_6.4.3"

$mpirun -n 56 $vasp6 > vasp.log 2>&1
Bash
#!/bin/bash
#=================================================#
# Job submission script for lammps-2017@mmmsim    #
#=================================================#
#SBATCH --job-name=lammps
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=56
#SBATCH --partition=compute
#SBATCH --exclusive
#SBATCH --output=%A.out
#_SBATCH --nodelist=node64
#_SBATCH --time=500:00:00
#>>>>>>>>>>>>>2. Job specification<<<<<<<<<<<<<<<<#
 ulimit -c unlimited
 ulimit -t unlimited
 ulimit -v unlimited
 ulimit -s unlimited
 ulimit -d unlimited
 ulimit -s unlimited
 ulimit -d unlimited
# Intel 2020
  export PATH=/opt/compilers_and_libraries_2020.4.304/linux/bin/intel64:$PATH
  export LD_LIBRARY_PATH=/opt/lib/intel64:/opt/mkl/lib/intel64$LD_LIBRARY_PATH
  source /opt/compilers_and_libraries_2020.4.304/linux/bin/compilervars.sh intel64
# Intel MKL
  source /opt/mkl/bin/mklvars.sh  intel64
# Intel MPI
  source /opt/compilers_and_libraries_2020.4.304/linux/mpi/intel64/bin/mpivars.sh  intel64
#=================================================#
export OMP_NUM_THREADS=1
input="md.in"
# make yes-USER-MISC yes-USER-YAFF yes-RIGID yes-MOLECULE yes-CLASS2 yes-KSPACE
mpi="/opt/compilers_and_libraries_2020.4.304/linux/mpi/intel64/bin/mpiexec"
#=================================================#
#>>>>>>>>>>>>>>>3. Job to run<<<<<<<<<<<<<<<<<<<<<#
#>>>>>>>>>>>>>>>>>LAMPPS-2017<<<<<<<<<<<<<<<<<<<<<#
$mpi -n 56 /opt/Code_CQJTU/bin/lmp_mpi_11Aug2017 -in $input > log 2>&1

常用命令

Bash
1
2
3
4
# 提交
sbatch <your-sbatch-script>
# 取消
scancel <job-id>

Slurm 集群管理

https://lemoncat.xyz/2020/04/08/Slurm%E9%9B%86%E7%BE%A4%E7%AE%A1%E7%90%86%E6%95%99%E7%A8%8B/

新建一个 Account
Bash
sacctmgr add account <account-name>
添加用户到指定的 Account
Bash
sacctmgr add user <username> account=<account-name>
查看用户情况
Bash
# format用于过滤显示的内容
sacctmgr list assoc format=Cluster,User,Account,Partition
查看任务
Bash
1
2
3
4
5
6
# squeue加上 -l 返回任务的运行状态
squeue -u <UserName>
squeue -j <JobID>

sacct -j <JobID>
sacct -u <UserName>

踩坑参考

https://yuhldr.github.io/posts/bfa79f01.html

https://jaredanwolfgang.github.io/articles/HPC/Slurm.html