乐趣区

关于程序员:调度器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
退出移动版