本文地址
👍如果大家觉得本文有用的话,希望能点个赞鼓励一下,十分感谢各位的支持
文章目录
- 1 前言
- 1.1 slurm系统的简介
- 1.2 slurm系统的资源申请过程的简要说明
- 2 Slurm系统的基础命令
- 2.1 shell脚本文件与批处理文件的提交
- 3 个人编辑的功能小脚本
- 5 不需要cd命令,快速运行脚本
- 5.1 运行程序的常用情况
- 5.2 如何直接执行sh脚本
- 6 Mobaxterm终端操作小技巧
1 前言
本文针对一般的新手小白的需要进行原理介绍,所以会介绍的比较抽象一些。
本文主要参考了以下文章。转载本文需要附上本文链接。
【Slurm系统入门】
[1] SLURM 资源管理系统(自可乐,简书)
[2] slurm系统的使用格式示范
[3] PBS或SLURM提交任务的命令对比
【超算使用手册】
[4] 中国科大超算中心用户使用手册(虚拟gnome桌面) (衍生命令讲的比较详细)
[5] 北京大学超算中心使用手册 (排版比较好)
[6] 超算slurm进阶 (讲了很多额外功能)
1.1 slurm系统的简介
SLURM (Simple Linux Utility for Resource Management)是一种可用于大型计算节点集群的高度可伸缩和容错的集群管理器和作业调度系统,被世界范围内的超级计算机和计算集群广泛采用。SLURM 维护着一个待处理工作的队列并管理此工作的整体资源利用。它以一种共享或非共享的方式管理可用的计算节点(取决于资源的需求),以供用户执行工作。SLURM 会为任务队列合理地分配资源,并监视作业至其完成。
如今,SLURM 已经成为了很多最强大的超级计算机上使用的领先资源管理器,如天河二号上便使用了 SLURM 资源管理系统。其实天河二号也通用slurm的系统指令,只不过把slurm指令开头的“s"换成了银河的拼音缩写"yh", slurm指令的英文单词简化成首字母, 例如,squeue
和yhq
都是查看作业情况的命令。sinfo
和yhi
都是查看分区的情况。具体见超算HPC3N系统用户手册。
(转载自 可乐(简书): SLURM 资源管理系统)
1.2 slurm系统的资源申请过程的简要说明
使用Slurm系统提交作业和本地计算机使用的区别在于,执行sh脚本以及调用核数都需要参与排队。不论是本地计算机安装的slurm队列系统,还是超算上安装的队列系统,对于普通用户的意义在于在有限资源的情况下,以先到先得的原则将资源分配给多个人进行计算。此外,如果一个任务算完,不需要人为的等到任务算完再执行计算任务,系统可以自动检测之前的任务算完,自动执行计算任务,这样就能充分利用好计算资源一直进行计算。过程示意图如下所示:
另外,指令的输入个人建议使用mobaxterm
(必应搜索官网下载), 文件的传输建议使用winscp
(其实也可以输入简单指令,但是不太好用)。 一些常用的unix指令见HPC3N系统用户手册的附录。mobaxterm鼠标中键可以直接输出路径,可以查看cpu使用率等等,功能很方便,可以多尝试尝试。
对于执行作业的方式,有三种作业运行模式,分别为批处理模式(sbatch), 交互模式(srun), 分配模式(salloc)。具体见引文1。
2 Slurm系统的基础命令
常用的指令如下
(其中(4)系统控制指令scontrol
配合 show jobs jobid
, release jobid
, release jobid
等可实现多种功能)
(jobid为你在整个超算系统的任务队列序号,超算按照jobid从小到大的顺序提供计算资源, 未挂起的任务将会按照jobid的顺序获得计算资源)
常用命令 | slurm系统 | 天河二号系统 |
---|---|---|
(1)提交批处理文件 | sbatch | yhbatch |
(2)执行作业(类似mpirun) | srun | yhrun |
(3)查看队列状态 | squeue | yhq |
(4)系统控制 | scontrol | yhcotnrol |
(5)取消作业 | scancel | yhcancel |
(6) 查看节点与分区状态 | sinfo | yhi |
注: 查看用户使用权限命令: yhacctmgr list association |
2.1 shell脚本文件与批处理文件的提交
用sbatch提交作业首先要申请资源,申请多少资源(节点数,输入输出等等)需要进行说明,有两种说明方法(以提交的shell脚本为task.sh为例,提交前建议给该文件777权限):
个人目前使用情况(未在shell脚本中说明, 使用1个节点32个核,gjf计算文件/vasp计算文件夹内执行):
(gaussian 16 : sbatch -c32 -pTH_LONG3N g16.sh)
(VASP : sbatch -N 1 -n 32 -p TH_LONG3N vasp.sh)
(1) 不在脚本中声明,在在终端中进行声明,如:
①shell脚本的内容如下:
#!/bin/bash#<1.source 环境变量>
# 天河二号和非sbatch提交的脚本会自动source ~/.bashrc,因此此步可以忽略
# 本地计算机使用sbatch命令提交shell脚本,由于是在由于是在nonloginshell环境里运行,而非interactive loginshell,并不会自动source ~/.bashrc 的环境变量,因此有两种解决方案
解决方案1: 此处加上source ~/.bashrc
解决方案2: 此处按顺序export 和source所有所需的变量。# <2.执行运行软件>
# 高斯执行方式1(gjf文件同目录下直接执行): g16 < test.gjf > test.out
# 高斯执行方式2(同目录下,srun): srun -c 32 -p TH_LONG3N g16 < test.gjf > test.out
# VASP执行方式1(文件夹内, srun,老超算): srun -p TH_NEW1 -N 1 -n 12 vasp软件路径
# VASP执行方式2(文件夹内, srun,新超算): srun -p LONG_3N -N 1 -n 32 vasp软件路径
②终端提交命令如下:
cd task.sh的文件路径 #mobaxterm可以中键锁定路径,不用手动输入了
sbatch -p TH_LONG3N -N 1 -n 1 -c 32 task.sh #也可以winscp打开文件所在位置,shift+ctrl+T, 然后输入命令。这样可以不需要cd命令。
(2) 在shell脚本文件开头进行声明,在终端直接提交:
注释行并非没用, 第一行#!是说明用什么语言,比如bash语言,删了就不能正常运行。
#SBATCH其实是能正常读取的。具体说明见北大超算sbatch 常用参数。2
#!/bin/bash
#SBATCH -p TH_LONG3N #可以用sinfo查看分区,老超算为TH_NEW1,新超算为TH_LONG3N,超算中debug3N分区不用参与大循环,但是运行时间上线为半小时。
#SBATCH -N 1 #使用1个节点
#SBATCH -n 1 #1个进程
#SBATCH -c 32 #每个任务所需要的核心数为32个核(clusters)。老超算则为12个核# $SLURM_SUBMIT_DIR #提交任务的当前路径
#第一行对应: $SLURM_PARTITION,类似-p, --partition
#第二行-N对应:$SLURM_NNODES,作业分配的节点数
#第三行-n对应: $SLURM_NPROCS , 要加载的进程数
#第四行 -c对应:SLURM_CPUS_PER_TASK:类似-c, --cpus-per-task
#参考: https://scc.ustc.edu.cn/zlsc/user_doc/html/slurm/slurm.html#id21Index of task relative to jobDeprecated. Same as SLURM_JOB_NUM_NODES$SLURM_JOB_NUM_NODESNumber of nodes allocated to job#<1.source 环境变量>
# 天河二号和非sbatch提交的脚本会自动source ~/.bashrc,因此此步可以忽略
# 本地计算机使用sbatch命令提交shell脚本,由于是在由于是在nonloginshell环境里运行,而非interactive loginshell,并不会自动source ~/.bashrc 的环境变量,因此有两种解决方案
解决方案1: 此处加上 source ~/.bashrc
解决方案2: 此处按顺序 export 和 source 所有所需的变量。# <2.执行运行软件>
# 高斯执行方式1(gjf文件同目录下直接执行): g16 < test.gjf > test.out
# 高斯执行方式2(同目录下,srun): srun -c 32 -p TH_LONG3N g16 < test.gjf > test.out
# VASP执行方式1(文件夹内, srun,老超算): srun -p TH_NEW1 -N 1 -n 12 vasp软件路径
# VASP执行方式2(文件夹内, srun,新超算): srun -p LONG_3N -N 1 -n 32 vasp软件路径
②终端提交命令如下:
cd task.sh的文件路径 #mobaxterm可以中键锁定路径,不用手动输入了
sbatch task.sh #因为已经在sh文件中声明了,所以此处就不需要-N -n了
补充: 如果想要多个程序并行执行,需要在程序运行命令后面加上&
符号(运行该命令后继续执行脚本,而等待程序运行完再进入下一步),并且再sh脚本最后加上wait
命令,即等待所有程序运行结束后脚本才停止。否则会因脚本的直接停止关掉程序。
3 个人编辑的功能小脚本
复制其中一行到超算里,并回车即可进行统计。(Momol,2021/09/07,命令适用于天河超算)
(1)查看R,运行(Run)节点总数
squeue | awk '$5 ~ /R/ {print $7}' | awk '{sum+=$1}END{print sum}' #R 运行节点总数 (mhk2021)
(2)查看PD,排队(PaiDui)节点总数
squeue | awk '$5 ~ /PD/ {print $7}' | awk '{sum+=$1}END{print sum}' #PD 排队节点总数 (mhk2021)
(3)查看PD+R,排队+运行节点总数
squeue | awk '{print $7}' | awk '{sum+=$1}END{print sum}' #R+PD 节点总数 (mhk2021)
命令原理解释:“|”为管道符号,输出信息到后者
(1)显示运行节点总数
squeue | awk ‘$5 ~ /R/ {print $7}’ | awk ‘{sum+=$1}END{print sum}’
#查找yhq输出信息包含"R"的行,并输出第7列,然后求和输出
(2)显示排队节点总数
squeue| awk ‘$5 ~ /PD/ {print $7}’ | awk ‘{sum+=$1}END{print sum}’
查找yhq输出信息包含"PD"的行,并输出第7列,然后求和输出
(3)运行+排队节点总数
squeue | awk ‘{print $7}’ | awk ‘{sum+=$1}END{print sum}’ #运行+排队节点总数(2021)
查找yhq信息,输出第7列,然后求和输出
awk语法参考网址: Linux awk 命令
5 不需要cd命令,快速运行脚本
5.1 运行程序的常用情况
对于部分不需要申请CPU计算资源进行计算的命令,可以放在一个文件夹下。
(1)一般运行.sh文件,都需要cd到当前目录后,执行文件。(类似于windows系统下双击exe文件的功能。只不过在linux里双击是编辑,在终端里输入文件路径/文件是执行文件)。在超算中,对于不需要核数的命令可以直接执行。
cd 你的文件所在目录 #对于mobaxterm,鼠标中键可以直接指向路径位置
./文件名.sh #"/"表示当前目录
或者执行文件的绝对路径也可以直接执行。
cd 文件名录/文件名.sh #"/"表示当前目录
5.2 如何直接执行sh脚本
直接运行sh脚本方法: 在终端里,如果输入以下命令,该终端下的文件夹ABCD的所有文件,直接输入名字便可以运行。这样不需要cd,在chmod +x sh
文件(或在桌面环境/winscp右键属性下)给予文件执行权限后,直接输入sh文件的全称就能直接运行scripts
文件夹下的sh脚本。
export PATH=~/文件夹scripts的路径:$PATH
如果你不想要每次打开终端都export
文件夹的路径,可以把路径设置加入到默认的全局环境变量设置文件.bashrc
里。
mkdir ~/scripts #用户目录下创建名为"scripts"的文件夹
echo 'export PATH=~/scripts:$PATH' >> ~/.bashrc #将该字符串追加写入~/.bashrc (不覆盖)
source ~/.bashrc #更新~/.bashrc的信息
[代码作用] 通过执行完上述代码,你的所有在scripts文件夹的脚本,直接输入脚本全名就能直接运行。
(1).bashrc文件的作用 : 所有#!/bin/bash
开头的文件会自动source/.bashrc的环境变量。
(2)export和source命令的作用 : ;和直接定义变量相比, export
命令的作用是使用export
定义的变量在该终端的子程序下仍然生效,不会因为切换程序消失。source
命令则是读取文件中的所有变量定义,并使其生效。
(3)环境变量PATH的作用 : 加入PATH路径之后,不需要cd,直接输入文件名就可以运行文件(先相当于自动进入所有PATH路径寻找同名文件运行)。 但是由于不同软件有可能会有相同名字的文件,这时可能会起冲突。因此对于多人使用的系统,建议在sh文件内部进行PATH环境变量的声明,而不是都放在.bashrc内部。
6 Mobaxterm终端操作小技巧
(0) 可录制宏命令(Macro), 需要时自动播放
[锁定文件位置和文件名]
(1) cd 文件路径: 在程序Mobaxterm中, 鼠标中键文件夹可自动输入文件路径。类似于windows系统中双击文件夹。 常用衍生命令: cd … 返回上级目录
(2) Tab键: 操作文件很好用,根据文件头自动检索文件,可自动根据开头补全信息(包括对空格自动转义): 输入开头字母后,按下tab键。按多次自动补全。
(3)"$(ls *.后缀)"
命令: 自动根据文件尾检索文件,双引号是为了避免文件有空格的情况。 如果没有空格,直接用*.sh也可以。
[程序输入小技巧]
(3) ctrl+C中断程序, 或者ctrl+U取消输入。
(4) cat 命令快速查看文本信息, grep命令和管道符号联用搜索文件内容。
SLURM 资源管理系统(自可乐,简书) ↩︎
北京大学超算中心使用手册 (排版比较好) ↩︎