调度器PBS

Posted 一曲长歌一剑天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调度器PBS相关的知识,希望对你有一定的参考价值。

参考资料
[1] PBS命令和使用

1、PBS命令

PBS提供4条命令用于作业管理。

(1) qsub 命令—用于提交作业脚本 命令格式

qsub  [-a date_time] [-c interval] [-C directive_prefix] [-e path] [-I] [-j join] [-k keep] [-l resource_list]  [-m mail_options] [-M user_list][-N name] [-o path] [-p priority] [-q destination] [-r c] [-S path_list] [-u user_list][-v variable_list] [-V] [-W additional_attributes] [-z]
[script]

-a  date_time : date_time格式为:[[[[CC]YY]MM]DD]hhmm[.SS] 表示经过date_time时间后作业才可以运行。
-c  interval   : 定义作业的检查点间隔,如果机器不支持检查点,则忽略此选项。
-C  directive_prefix :在脚本文件中以directive_prefix开头的行解释为qsub的命令选项。(若无此选项,则默认为’#PBS’ )
-e  path     :将标准错误信息重定向到path
-I           :以交互方式运行
-j  join     :将标准输出信息与标准错误信息合并到一个文件join中去。
-k  keep     :定义在执行结点上保留标准输出和标准错误信息中的哪个文件。  keep为o 表示保留前者,e表示后者,oe或eo表示二者都保留,n表示皆不保留。若忽略此选项,二者都不保留。
-l  resource_list  : 定义资源列表。

以下为几个常用的资源种类。

cput=N         : 请求N秒的CPU时间; N也可以是hh:mm:ss的形式。    
mem=N[K|M|G][B|W]:请求N {kilo|mega|giga}{bytes|words} 大小的内存。    
nodes=N:ppn=M     :请求N个结点,每个结点M个处理器。
-m  mail_options :mail_option为a:作业abort时给用户发信;为b:作业开始运行发信;为e:作业结束运行时发信。若无此选项,默认为a。
-M  user_list    : 定义有关此作业的mail发给哪些用户。
-N  name         : 作业名,限15个字符,首字符为字母,无空格。
-o  path         : 重定向标准输出到path。
-p  priority     : 任务优先级,整数,[-1024,1023],若无定义则为0.
-q  destination  : destination有三种形式: queue , @server,queue@server。
-r  y|n          : 指明作业是否可运行,y为可运行,n为不可运行。
-S  shell        : 指明执行运行脚本所用的shell,须包含全路径。
-u  user_list    : 定义作业将在运行结点上以哪个用户名来运行。
-v  variable_list : 定义export到本作业的环境变量的扩展列表。
-V                : 表明qsub命令的所有环境变量都export到此作业。
-W  additional_attributes  : 作业的其它属性。
-z               : 指明qsub命令提交作业后,不在终端显示作业号。

pbsnodes -av -F json >> pbsnodes.txt #查看所有节点状态,包括节点上运行的作业
# state = free  空闲
# resources_available.ncpus = 2  总CPU核数
# resources_assigned.ncpus = 0   已使用核数
# resources_available.mem = 4gb  总内存
# resources_assigned.mem = 0kb   可用内存
# resources_available.ngpus = 2  总GPU核数
# resources_assigned.ngpus = 0   已使用GPU核数
# jobs = 267.anton-test1/0, 268.anton-test1/1    运行的作业列表
# queue = workq                      所属队列

qstat -f -F json >> qstat.txt
#查看所有作业数和排队的作业数
#job_state = R 正在运行的作业   =Q 排队的作业
#作业排队的顺序就是列表输出的顺序
参数说明:因为所采用的选项一般放在pbs脚本中提交,所以具体见PBS脚本选项。

例:# qsub  aaa.pbs       提交某作业,系统将产生一个作业号

3、PBS环境下运行示例
(1) 脚本文件编辑示例
实例1:运行mpi程序 命令行:#vi aaa.pbs
编辑的内容:

#PBS -N myjob  #PBS -o /home/jz/my.out 标准输出文件  
#PBS -e /home/jz/my.err错误输出文件  
#PBS –l nodes=2:ppn=2 规定使用的节点数以及每个节点能跑多少核    
cd 目录(你们原来直接在节点上运行时所在的目录)   
mpirun –np 4 –hostfile $PBS_NODEFILE  /home/jz/helloworld   
解释:原先大家都是在中断输入 mpirun_rsh…..这些命令执行程序的,现在只要把这些提交命令放在.pbs配置文件的最后,由PBS来调度执行 (自动分配节点和其它资源)。Myjob是为你此次要运行的程序起的任务名,可以改成你自己想要的名字原先输出信息都是直接在屏幕上显示的,现在屏幕上的 显示全部输出到文件中,上例中输出文件是/home/jz/my.out文件,大家可以根据自己的需要修改(目录,文件名)。程序运行时遇到的一些错误会 记录在.err文件中。好处:因为对每个任务都设定了不同的输出文件,所以看结果只要打开相应文件看就可以了,不需要开多个终端,里面有任务的详细信息, 比如实际分配的是哪些节点计算,运行时间等。

#PBS –l nodes=2:ppn=2,你们程序需要几个节点只要修改nodes后的数字就可以了,ppn=2保持不变,因为我们的机器每个节点都是双cpu的。

mpirun –np 4 –hostfile $PBS_NODEFILE  /home/jz/helloworld 此例中-np后的4是并行数(2×2=4个cpu),–hostfile $PBS_NODEFILE不需要改变。/home/jz/helloworld是你编译好的可执行文件名,需修改。    

对于每个你要运行的mpi程序都需要这样一个.pbs配置文件     也就是说大家原来的操作是:mpirun…………     现在改成2步走:1)写个pbs配置文件(比如xxx.pbs);2)向pbs提交(qsub xxx.pbs)

实例2:运行非mpi程序 有些用户并不是自己编写mpi程序,同样也可以用pbs提交。

比如物理系运行程序时一般输入的命令是 RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt ,那么配置文件可以这样写:

命令行:#vi job.pbs 编辑的内容:

#PBS -N physics_job
#PBS -o /home/physics/physics_job.out
#PBS -e /home/physics/physics_job.err
#PBS -l nodes=1:ppn=2
#PBS -r y
cd 目录(你们原来直接在节点上运行时所在的目录)
RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt
解释:也就是说把原来在终端直接输入的命令RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt放到pbs配置文件中,因为你们只要一个节点,所以nodes=1,至于用哪个节点系统自动分配,你们 肯定很关心是分配了哪个节点给你们,那么可以用qstat命令查询(比如qstat -n)。

(2) 提交作业示例

命令行:#qsub aaa.pbs
作业提交后会有一个作业号

[test1@master pbstest]$ qsub pbsjob

48.master  

(3) 作业状态查询示例

qstat 后加不同参数可以查看不同的信息(各参数的意思,上面有详细的说明,你们可以一个个试验一下,以后就知道查看哪些信息,需要哪些参数) 实例:
命令行:#qstat –a   (查看作业的状态)        
解释:Job id 是给你提交的任务分配的任务号,S(任务状态,R表示正在运行,Q表示正在排队等候调度)
命令行:#qstat –n   (查看作业使用的节点)
命令行:#qstat –f  211   (查看有关作业运行具体信息)
删除作业:qdel 作业号 [test1@master pbstest]$ qdel 48

以上是关于调度器PBS的主要内容,如果未能解决你的问题,请参考以下文章

Unity5 GI与PBS渲染从用法到着色代码

如何在Rocks HPC集群里安装PBS Pro开源版

GLSL PBS 实现,奇怪的着色器行为

qsub vasp.pbs怎么提前任务

VSCode自定义代码片段——CSS选择器

VSCode自定义代码片段6——CSS选择器