slurm作业调度系统与天河二号的基本命令(新手入门, 以gs和vasp为例)

本文地址
           👍如果大家觉得本文有用的话,希望能点个赞鼓励一下,十分感谢各位的支持
在这里插入图片描述


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指令的英文单词简化成首字母, 例如,squeueyhq都是查看作业情况的命令。sinfoyhi都是查看分区的情况。具体见超算HPC3N系统用户手册。
(转载自 可乐(简书): SLURM 资源管理系统

  1.2 slurm系统的资源申请过程的简要说明

    使用Slurm系统提交作业和本地计算机使用的区别在于,执行sh脚本以及调用核数都需要参与排队。不论是本地计算机安装的slurm队列系统,还是超算上安装的队列系统,对于普通用户的意义在于在有限资源的情况下,以先到先得的原则将资源分配给多个人进行计算。此外,如果一个任务算完,不需要人为的等到任务算完再执行计算任务,系统可以自动检测之前的任务算完,自动执行计算任务,这样就能充分利用好计算资源一直进行计算。过程示意图如下所示:

申请节点数和核数
排到号jobid
sbatch 脚本.sh
排队等待资源分配
执行sh脚本文件

    另外,指令的输入个人建议使用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)提交批处理文件sbatchyhbatch
(2)执行作业(类似mpirun)srunyhrun
(3)查看队列状态squeueyhq
(4)系统控制scontrolyhcotnrol
(5)取消作业scancelyhcancel
(6) 查看节点与分区状态sinfoyhi
注: 查看用户使用权限命令: 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#id21


	Index of task relative to job

	Deprecated. Same as SLURM_JOB_NUM_NODES
		$SLURM_JOB_NUM_NODES
			Number of nodes allocated to job




#<1.source 环境变量>
# 天河二号和非sbatch提交的脚本会自动source ~/.bashrc,因此此步可以忽略
# 本地计算机使用sbatch命令提交shell脚本,由于是在由于是在nonloginshell环境里运行,而非interactive loginshell,并不会自动source ~/.bashrc 的环境变量,因此有两种解决方案
解决方案1: 此处加上 source ~/.bashrc
解决方案2: 此处按顺序 exportsource 所有所需的变量。

# <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命令和管道符号联用搜索文件内容。


  1. SLURM 资源管理系统(自可乐,简书) ↩︎

  2. 北京大学超算中心使用手册 (排版比较好) ↩︎

  • 14
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Slurm作业调度系统是一个用于分配和管理计算任务的开源软件。它允许用户在一个大规模的计算集群上提交、管理和监视作业。 首先,用户需要了解Slurm基本概念。在Slurm中,一个作业是用户指定的一项计算任务,可以包括一个或多个任务。任务是作业的一个单元,可能会在不同的计算节点上执行。作业可以使用不同的资源进行调度,如CPU、内存和 GPU。用户需要清楚地定义作业的资源需求,以便Slurm可以正确地分配资源。 使用Slurm提交作业非常简单。用户只需要编写一个作业提交脚本,该脚本包含了作业的配置信息,如资源需求、输入文件、输出文件等。然后使用`sbatch`命令提交这个脚本即可。Slurm会按照其配置进行作业调度,将作业分配给相应的计算节点进行执行。 一旦作业提交后,用户可以使用`squeue`命令来跟踪作业的状态。该命令显示了作业的ID、状态、开始时间和节点信息等。用户可以根据需要使用`scancel`命令来取消作业。 Slurm还提供了一些高级功能,用于更精细地控制作业的调度和资源分配。用户可以使用`srun`命令在计算节点上启动特定的任务,并通过在作业提交脚本中设置一些参数来控制任务的执行方式。 总之,Slurm作业调度系统是一个强大且灵活的工具,可以帮助用户有效地管理和调度计算任务。通过了解基本概念和使用指南,用户可以更好地使用Slurm来利用集群资源进行高性能计算。 ### 回答2: Slurm作业调度系统是一个开源的、高效的集群管理和作业调度工具。它被广泛用于大规模计算集群和超级计算机系统。以下是使用Slurm的一些指南: 1. 提交作业:通过使用sbatch命令,可以向Slurm系统提交作业。作业通常是一个可执行的程序或脚本。可以使用sbatch命令指定作业的名称、资源需求、作业优先级等。 2. 查看作业状态:可以使用squeue命令查看当前正在运行的作业以及等待运行的作业和队列中的作业。squeue命令可以提供作业的ID、状态、用户等信息。 3. 取消作业:如果需要取消一个已经提交的作业,可以使用scancel命令。需要提供作业的ID来取消作业。 4. 调整作业优先级:使用sprio命令可以调整作业的优先级。较高优先级的作业将更早地得到处理。可以根据需求调整作业的优先级。 5. 资源管理:Slurm可以有效地分配集群的资源给不同的作业。可以使用scontrol命令设置和管理资源分配策略。可以向Slurm系统添加、删除或修改节点。 6. 队列管理:使用squeue和scontrol命令可以管理队列。可以创建、暂停、恢复、删除队列。可以根据不同的作业需求和优先级配置不同的队列。 7. 使用预定义脚本:Slurm提供了一些预定义的脚本,可以用于常见的作业操作,比如提交作业、取消作业等。可以根据需要进行修改和使用这些脚本。 8. 集群监控:Slurm提供一些工具来监控集群的状态和性能。可以使用sinfo命令查看集群中的节点状态和资源使用情况。可以使用sacct命令查看作业的执行情况和资源使用情况。 总之,Slurm作业调度系统是一个功能强大的集群管理工具,可以帮助用户高效地管理和调度作业。通过使用上述指南,用户可以更好地了解和使用Slurm系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值