一.集群的介绍
集群采用slurm调度系统,NIS用户认证系统,操作系统为Centos Linux release 8.3.2011版本,家目录所在存储为/share06。计算节点CPU为2颗AMD EPYC 7H12,每颗CPU有64核心,单节点共计128核心,内存为512G。
1.调度系统:slurm
Slurm(Simple Linux Utility for Resource Management,http://slurm.schedmd.com/)是开源的、具有容错性和高度可扩展大型和小型Linux集群资源管理和作业调度系统。超级计算系统可利用Slurm进行资源和作业管理,以避免相互干扰,提高运行效率。所有需运行的作业无论是用于程序调试还是业务计算均必须通过交互式并行srun、批处理式sbatch或分配式salloc等命令提交,提交后可以利用相关命令查询作业状态等。请不要在登录节点直接运行作业(编译除外),以免影响其余用户的正常使用。
点击slurm官网查看更多内容和了解slurm的安装与使用。
2.用户认证系统:nis
集群登录节点与计算节点采用统一的用户认证.如果登录计算节点需要密码,输入访问集群的密码即可,当然也可以设置秘钥,实现节点间免密登录。
用户家目录(登入集群后所在目录即为每个用户的家目录)所在存储是共享到所有节点。
二.集群的使用
1.连接集群
windows可以使用Xshell和Putty工具;
mac和linux可以在终端里直接连接:ssh username@server_ip -P port。
ssh命令行登录:
ssh -i username.id username@server_ip -p port
scp传输文件:
scp -P port -i username.id file username@server_ip:/path/on/cluster/
(1)第一次登录后,强烈修改密码,密码长度建议超过10,且包含大小写、数字、特殊字符,提高安全性。(密码登录方式后续将统一修改成使用秘钥登录,第一次登录后不需要修改密码)
修改密码的命令:
$ yppasswd
(2)Mac和linux上设置免密登录服务器:
##通过命令将本地公钥id_rsa.pub拷贝到服务器上的authorized_keys文件中,也可以选择手动复制
ssh-copy-id -i ~/.ssh/id_rsa.pub -p port username@server_ip
2.加载环境变量
集群有部分软件已预设在module环境里;可以通过module工具去加载;其他自行安装的软件则可以通过export的命令去加载。
目前共享目录下安装了两款软件,intel编译器2022.2.0版本和openmpi的4.1.4版本。
- 方法一:module
$ module avail
------------- /share06/soft/modulefiles -------------
anaconda2-2019 anaconda3-2022 cmake-3.26.0 intel-2018u3 intel-2022.2.0 openmpi-4.1.4
$ module load intel-2022.2.0 ###加载环境变量
$ module list
Currently Loaded Modulefiles:
1) intel-2022.2.0
$ which mpirun
/share06/soft/intel-2022.2.0/mpi/2021.6.0/bin/mpirun
$ module unload intel-2022.2.0 ###卸载该环境变量
- 方法二:export
#加载可执行命令的环境变量
export PATH=/share06/soft/openmpi-4.1.4/bin:$PATH
#加载库的环境变量
export LD_LIBARY_PATH=/share06/soft/openmpi-4.1.4/bin/lib:$LD_LIBRARY_PATH
#加载include的环境变量
export CPATH=/share06/soft/openmpi-4.1.4/bin/include:$CPATH
3.登录&&管理节点
连接上集群后,登录的pmo002节点为登录&&管理节点,该节点不允许直接跑程序,否则会被自动杀掉,请将程序通过slurm调度系统提交到后端计算节点运行。
4.slurm基本情况的查看
常用命令:sinfo,squeue,sacct。下面简单介绍下用法,更多参数请查看man手册。
(1)查看队列与节点情况
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
th02 up infinite 1 mix th02
• PARTITION:分区名,也成为队列名称
• AVAIL:分区状态
• TIMELIMIT:时间限制
– infinite:表示没有时间限制
• NODES:该分区的节点数
• STATE:节点的状态
– idle:节点空闲
– mix:The node has some of its CPUs ALLOCATED while others are IDLE。
– alloc:节点资源已被全部分配,该节点不再接受新作业调度
– down:节点故障
– unk:节点状态未知
– drng/drain:节点被人为置为drain状态,如果当前有作业正在运行,则变成drng,作业结束后变成drain
– comp:有作业正在退出
• NODELIST:节点列表
(2)查看节点的详细信息
$ scontrol show node th02
NodeName=th02 Arch=x86_64 CoresPerSocket=1
CPUAlloc=20 CPUTot=128 CPULoad=25.85
AvailableFeatures=(null)
ActiveFeatures=(null)
Gres=(null)
NodeAddr=th02 NodeHostName=th02 Version=20.11.6
OS=Linux 4.18.0-240.el8.x86_64 #1 SMP Fri Sep 25 19:48:47 UTC 2020
RealMemory=515800 AllocMem=80560 FreeMem=503205 Sockets=128 Boards=1
State=MIXED ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
Partitions=th02
BootTime=2023-01-06T17:55:54 SlurmdStartTime=2023-01-10T10:46:46
CfgTRES=cpu=128,mem=515800M,billing=128
AllocTRES=cpu=20,mem=80560M
CapWatts=n/a
CurrentWatts=0 AveWatts=0
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
Comment=(null)
CPUAlloc=20:该节点已经使用了20个CPU核
CPUTot=128:该节点共有128个CPU核心可供分配
(3)查看已提交的作业
目前集群没有做作业限制,因此每个人都可以看到别人提交的作业信息。
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
284074 th02 el.sh xiazq R 10:17 1 th02
(4)查看历史提过运行过的作业
$ sacct -u xiazq -X --field=jobid,partition,jobname,user,nnodes,nodelist,start,end,elapsed,state
JobID Partition JobName User NNodes NodeList Start End Elapsed State
------------ ---------- ---------- --------- -------- --------------- ------------------- ------------------- ---------- ----------
284050 th02 hostname xiazq 1 th02 2023-01-10T10:54:04 2023-01-10T10:54:04 00:00:00 COMPLETED
284073 th02 el.sh xiazq 1 th02 2023-01-10T15:45:31 2023-01-10T15:59:32 00:14:01 FAILED
284074 th02 el.sh xiazq 1 th02 2023-01-10T15:55:24 Unknown 00:13:20 RUNNING
3.使用slurm提交作业
推荐使用slurm的提交脚本提交作业。提交命令为:sbatch sub.sh。
取消作业的命令为:scancel jobid(jobid为执行squeue获取到的第一列数值)。
每个用户最多使用128核。如集群当前空闲,用户需要超过128核时,可在微信群里进行申请。
(1)srun提交作业:适合新程序的调试使用,参数与sbatch参数一致,使用方式:srun -p th02 -N 1 -n 10 -J test python xxx.py
作业提交后,默认会在当前终端进行输出,当前终端连接断开后,则该作业也会中断,因此建议使用该方式进行作业调试。
(2)sbatch提交作业:适合日常程序的运行
一个简单的提交脚本如下所示:
$ cat sub.sh
#!/bin/bash
#SBATCH -p th02
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -J test
#SBATCH --mem 20GB
hostname
针对每一条的注释:
参数 | 含义 |
---|---|
sub.sh | 这是脚本名称,可以自定义 |
#SBATCH -p th02 | 指定使用的分区,th02分区 |
#SBATCH -N 1 | 指定一共使用的节点数,1个节点 |
#SBATCH -n 1 | 指定一共使用的核数,1个CPU核 |
#SBATCH -J test | 指定作业名,test |
#SBATCH --mem 20GB | 默认单核分配4G内存,如程序对内存消耗比较大,可指定需要的内存大小 |
#SBTACH -o %j.out | 指定正常输出,输出到以作业号命名的out文件(877.out),默认的输出文件名称为slurm-877.out |
#SBTACH -e %j.err | 指定错误输出,输出到以作业号命名的err文件(877.err),默认的输出文件名称为slurm-877.out |
hostname | 从这里开始,写程序本身运行时需要加载的环境变量以及运行命令即可 |
示例一:例如我们需要运行一个2节点共40个核的vasp程序,提交脚本如下:
$ cat sub.sh
#!/bin/bash
#SBATCH -p th02
#SBATCH -N 2
#SBATCH -n 40
#SBATCH -J vasp544
module load intel-2022.2.0
mpirun -np 40 vasp_std
示例二:例如我们需要运行一个1节点共1个核的python程序,提交脚本如下:
$ cat sub.sh
#!/bin/bash
#SBATCH -p th02
#SBATCH -N 1
#SBATCH -n 1
export PATH=/share06/soft/anaconda3/bin:$PATH
python myscript.py