提纲一.PBS脚本编写使用二.曙光Gridview作业调度中间件1.准备:编写描述改作业的脚本,包括作业名,需要的资源等。2.提交:使用qsub命令将该作业提交给PBS服务器3.排队:服务器将该任务排入适当的队列4.调度:服务器检查各工作节点的状态是否符合该作业的要求,并进行调度。5.执行:当条件满足时,作业被发给相应的执行服务器执行。程序运行时执行服务器会收集程序的标准输出和标准错误流,等程序结束时,将这些信息返回给用户。6.查询和调整:当作业在运行时,用户可以使用qstat进行状态查询。用户发现作业提交错误时,可以使用qdel删除正在运行的作业。7.查看结果:使用文本编辑软件vi或者系统命令cat,less等查看输出及错误信息显示。PBS作业提交步骤在PBS系统中,用户使用qsub命令提交用户程序。用户运行程序的命令及PBS环境变量设置组成PBS作业脚本,作业脚本使用如下格式提交到PBS系统运行:qsubPBS作业脚本qsub-Ntest.vasp-lnodes=4:ppn=2-qdefaultsPBS作业脚本PBS作业提交基本命令本质是一个SHELL脚本注释以“#”开头PBS运行参数,以“#PBS”开头可以直接调用SHELL命令和系统命令#PBS-Nvasp#PBS-lnodes=1:ppn=1#PBS-lwalltime=12:00:00#PBS-qhighcd/home/test/work./test.exePBS作业脚本运行参数说明-a作业开始运行的时间向PBS系统指定作业运行的开始时间。作业运行时间格式为:[[[[CC]YY]MM]DD]hhmm[.SS]-A用户名使用不同的用户来提交作业,缺省使用当前用户名-o标准输出文件的路径-e标准错误输出的路径该参数指定标准错误输出的位置,缺省的情况下,PBS系统把标准输出和标准错误输出放在用户qsub命令提交作业的目录下。标准错误输出:作业名.o作业号标准错误输出:作业名.e作业号路径使用如下格式标准:[节点名:]路径名-N作业名指定提交的作业名-q目标队列指定作业提交的目标队列,其中目标队列可以是目标队列、目标节点名或者是目标节点上的队列。如果目标队列是一个路由队列,那么服务器可能把作业路由到新的队列中。如果该参数没有指定,命令qsub会把作业脚本提交到缺省的队列中。-l申请资源列表该参数指定作业脚本申请的PBS系统资源列表。申请资源列表使用如下格式:资源名[=[数量]][,资源名[=[数量]],…..]例如作业希望申请在双路节点上申请5个CPU资源的情况,则可以在脚本中如下:#PBS–lnodes=2:ppn=2+1:ppn=1PBS运行参数在PBS脚本和qsub命令行中均有效,qsub命令行参数的优先级更高变量名说明登陆SHELL继承来的变量包括$HOME,$LANG,$LOGNAME,$PATH,$MAIL,$SHELL和$TZ。$PBS_O_HOSTqsub提交的节点名称$PBS_O_QUEUEqsub提交的作业的最初队列名称$PBS_O_WORKDIRqsub提交的作业的绝对路径$PBS_JOBID作业被PBS系统指定的作业号$PBS_JOBNAME用户指定的作业名,可以在作业提交的时候用qsub–N作业名指定,或者在PBS脚本中加入#PBS–N作业名。$PBS_NODEFILEPBS系统指定的作业运行的节点名。该变量在并行机和机群中使用。当在PBS脚本中用#PBS–lnodes=2:ppn=2指定程序运行的节点数时,可以使用$PBS_NODEFILE在脚本中引用PBS系统指定的作业运行的节点名。比如:#PBS–lnodes=2:ppn=2mpirun–np4–machinefile$PBS_NODEFILE程序名$PBS_QUEUEPBS脚本在执行时的队列名PBS的环境变量#这是一个串行作业脚本的例子#PBS-Ntest#PBS-lnodes=1:ppn=1cd$HOME/test/./a.out$HOME/result/a.result#这是一个并行作业脚本的例子#PBS-Nvasp_job#PBS-lnodes=2:ppn=8#PBS-qlowechoThisjobsis$PBS_JOBID@$PBS_QUEUEcd$PBS_O_WORKDIRmpirun-np16-machinefile$PBS_NODEFILE./vaspPBS脚本举例PBS脚本举例(续1)有时在PBS脚本中,需要对PBS环境变量的内容进行改造比如,$PBS_NODEFILE,该文件内容格式为:node1node1node2node2对于一般MPI程序,可直接将$PBS_NODEFILE作为MPI的”-machinefile”参数,如上例所示而一些软件有特殊的节点指定格式,比如ANSYS的命令行参数格式为:ansys121-dis-machinesnode1:2:node2:2-itest.inp-otest.log这时我们可以对$PBS_NODEFILE进行字符处理,得到需要的格式#这是一个ANSYS并行作业的例子#PBS-Nansys_job#PBS-lnodes=2:ppn=8#PBS-qlowINPUTFILE=test.inpOUTPUTFILE=test.loghosts=`cat$PBS_NODEFILE|uniq-c|awk'{print$2:$1}'|tr'\n'':'|sed's/:$//'`cd$PBS_O_WORKDIRansys121-dis-machines$hosts-i$INPUTFILE-o$OUTPUTFILEPBS脚本举例(续2)#!/bin/bash#PBS-Njobname#PBS-lnodes=2:ppn=8cat`echo$PBS_NODEFILE`$HOME/$PBS_JOBID.nodesfornodein`cat$HOME/$PBS_JOBID.nodes`dossh$nodemkdir/tmp/$PBS_JOBIDssh$nodecp-rf$PBS_O_WORKDIR/*/tmp/$PBS_JOBID/donecd/tmp/$PBS_JOBIDmpirun-np16-machinefile$PBS_NODEFILE$HOME/bin/vaspcp-rf/tmp/$PBS_JOBID/*$PBS_O_WORKDIR/fornodein`cat$HOME/$PBS_JOBID.nodes`dossh$noderm-rf/tmp/$PBS_JOBIDdonerm$HOME/$PBS_JOBID.nodes一个复杂的PBS脚本#这是一个并行作业脚本的例子#PBS-Nvasp.Hg#PBS-joe#PBS-lnodes=2:ppn=12:amd#PBS-qlowechoThisjobsis$PBS_JOBID@$PBS_QUEUENP=`cat$PBS_NODEFILE|wc-l`cd$PBS_O_WORKDIRmpirun-np$NP-machinefile$PBS_NODEFILE./vasp#PBS-lnodes=2:ppn=4:amd:chem#PBS-lnodes=1:ppn=8:chem+1:ppn=8:bio#PBS-lnodes=node1:ppn=8+node2:ppn=8指定节点特性作业提交后,会生成一个作业号,如:[dawning@node1~]$qsubtest.pbs93.node1查看集群作业运行状态:[dawning@node1~]$qstatJobidNameUserTimeUseSQueue--------------------------------------------------------------93.node1test.pbstest0Rdefault95.node1vasp.Hgvasp0Edefault111.node1structureamber0Qdefault作业状态说明:E:退出Q:排队H:挂起R:运行C:结束查询作业状态[dawning@node1~]$qstatJobidNameUserTimeUseSQueue--------------------------------------------------------------93.node1test.pbszhaocs0Rdefault95.node1vasp.Hgvasp0Edefault111.node1structureamber0Qdefault查询某个作业运行状态:qstat93.node1(或者qstat93)显示作业运行在哪些节点上:qstat-n93.node1显示作业运行详细信息:qstat-f93.node1查询作业状态(续)[dawning@node1~]$qstatJobidNameUserTimeUseSQueue--------------------------------------------------------------93.node1test.pbszhaocs0Rdefault95.node1vasp.Hgvasp0Edefault111.node1structureamber0Qdefaultqdel93.node1取消删除作业注:用户只能删除自己的作业,管理员可以删除所有用户作业[dawning@node1~]$qstatJobidNameUserTimeUseSQueue--------------------------------------------------------------93.node1test.pbszhaocs0Rdefault95.node1vasp.Hgvasp0Edefault111.node1structureamber0Qdefault挂起作业:qhold111.node1取消作业挂起qrls111.node1作业挂起及取消[dawning@node1~]$qstatJobidNameUserTimeUseSQueue--------------------------------------------------------------93.node1test.pbszhaocs0Rdefault95.node1vasp.Hgvasp0Edefault111.node1structureamber0Qdefault更改作业运行队列:qmovehigh111.node1更改作业资源属性:qalter-lwalltime=10:00:00111.node1更改作业[dawning@node1~]$qstatJobidNameUserTimeUseSQueue--------------------------------------------------------------93.node1test.pbszhaocs0Rdefault95.node1vasp.Hgvasp0Edefault111.node1structureamber0Qdefault112.node1gaussiangauss0Qdefault交换两个作业的排队顺序:qorder111.node1112.node1[dawning@node1~]$qstatJobidNameUserTimeUseSQueue--------------------------------------------------------------93.node1test.pbszhaocs0Rdefault95.node1vasp.Hgvasp0Edefault112.node1gaussiangauss0Qdefault111.node1structureamber0Qdefault交换作业顺序PBS脚本中可以指定多个作业之间的依赖关系,比