标签:
PBS的组成
PBS的基本原理
PBS的优缺点:
符合POSIX 1003.2d 标准;支持系统级检查点功能(需底层操作系统支持);很好的大规模扩展性,独立的调度模块;支持使用其它调度器;支持作业依赖和用户映射;灵活性:支持交互,批处理,串行及并行作业;只支持Unix类操作系统;多集群协作功能有限。
术语
节点(node) :一个单一的操作系统映像,一个统一的虚拟内存映像,一个或多个cpu,一个或多个IP地址的计算机系统被称之为一个节点。通常执行主机(execution host)也被称之为节点。
属性:队列、服务器和节点都有与自己相关的属性,这些属性提供控制信息。与节点相关的属性有:状态、类型、虚拟处理器的个数、作业列表(本节点被分配给的作业)以及节点的特性。
节点特性:为了提供一组节点的分配的方法,零个或者多个特性被赋给每个节点。这个特性不过是一串对于PBS没有含义的字母和数字的组合(第一个字符必须是字母)。
PBS的使用步骤
PBS的基本命令
在PBS系统中,用户使用qsub 命令提交用户程序。用户运行程序的命令及PBS环境变量设置组成PBS作业脚本,作业脚本使用如下格式提交到PBS系统运行:
qsub <PBS作业脚本>
qsub -N test.vasp -l nodes=4:ppn=2 -q defaults <PBS作业脚本>
PBS 作业脚本
注释,以“#”开头
PBS运行参数,以“#PBS”开头
SHELL命令
#PBS -N vasp.Hg
#PBS -l nodes=4:ppn=4
#PBS -l walltime=05:00:00
#PBS -q high
echo "This jobs is "$PBS_JOBID@$PBS_QUEUE
cd $PBS_O_WORKDIR
mpirun -np 16 -machinefile $PBS_NODEFILE ./vasp
脚本中#PBS为脚本选项,用于设置一些参数:
#PBS –N 表示任务名称。name限15个字符,首字符为字母,无空格。
#PBS –l 表示资源列表,用于设定特定任务所需的一些参数。这里的nodes表示并行环境下可以使用的节点数,而walltime表示任务最大时限,而cput 表示cpu时间的最大时限,运行时间和cpu使用时间超过对应的时限,任务就会以超时退出。这三个参数不是PBS脚本参数,而是并行环境所需的参数。
#PBS -q 表示当前任务选用的队列。在并行环境下,一个系统中往往有多个队列,任务提交后,将在所选的队列中排除等候。系统中有哪些队列可以用qstat -q查看。
qsub运行参数
运行参数 |
说 明 |
-a <作业开始运行的时间> |
向PBS系统指定作业运行的开始时间。 作业运行时间格式为: [[[[CC]YY]MM]DD]hhmm[.SS] |
-A <用户名> |
使用不同的用户来提交作业,缺省使用当前用户名 |
-o <标准输出文件的路径> -e <标准错误输出的路径> |
该参数指定标准错误输出的位置,缺省的情况下,PBS系统把标准输出和标准 错误输出放在用户qsub命令提交作业的目录下。 标准错误输出:<作业名>.o<作业号> 标准错误输出:<作业名>.e<作业号> 路径使用如下格式标准: [<节点名>:]<路径名> |
-N <作业名> |
指定提交的作业名 |
-q <目标队列> |
指定作业提交的目标队列,其中目标队列可以是目标队列、目标节点名或者 是目标节点上的队列。如果目标队列是一个路由队列,那么服务器可能把 作业路由到新的队列中。如果该参数没有指定,命令qsub会把作业脚本 提交到缺省的队列中。 |
-l <申请资源列表> |
该参数指定作业脚本申请的PBS系统资源列表。 申请资源列表使用如下格式: <资源名>[=[<数量>]][,资源名[=[<数量>]], …..] 例如作业希望申请在双路节点上申请5个CPU资源的情况, 则可以在脚本中如下: #PBS –l nodes=2:ppn=2+1:ppn=1 |
PBS的环境变量
变量名 |
说 明 |
登陆SHELL继承来的变量 |
包括$HOME,$LANG,$LOGNAME,$PATH,$MAIL,$SHELL和$TZ。 |
$PBS_O_HOST |
qsub提交的节点名称 |
$PBS_O_QUEUE |
qsub提交的作业的最初队列名称 |
$PBS_O_WORKDIR |
qsub提交的作业的绝对路径 |
$PBS_JOBID |
作业被PBS系统指定的作业号 |
$PBS_JOBNAME |
用户指定的作业名,可以在作业提交的时候用qsub –N <作业名>指定,或者 在PBS脚本中加入 #PBS –N <作业名>。 |
$PBS_NODEFILE |
PBS系统指定的作业运行的节点名。该变量在并行机和 机群中使用。当在PBS脚本中用#PBS –l nodes=2:ppn=2指定程序运行的节点数 时,可以使用$PBS_NODEFILE在脚本中引用PBS系统指定的作业运行的节点名。比如: #PBS –l nodes=2:ppn=2 mpirun –np 4 –machinefile $PBS_NODEFILE <程序名> |
$PBS_QUEUE |
PBS脚本在执行时的队列名 |
PBS作业脚本举例
# 这是一个串行作业脚本的例子
#PBS -N Loop.out
#PBS -l nodes=1:ppn=1
cd $HOME/test/
./a.out > $HOME/result/a.result
# 这是一个并行作业脚本的例子
#PBS -N vasp.Hg
#PBS -l nodes=8:ppn=2
#PBS -q low
echo "This jobs is "$PBS_JOBID@$PBS_QUEUE
cd $PBS_O_WORKDIR
mpirun -np 16 -machinefile $PBS_NODEFILE ./vasp
一个复杂的PBS作业脚本
#!/bin/bash
#PBS -N jobname
#PBS -l nodes=4:ppn=2
cat `echo $PBS_NODEFILE` > $HOME/$PBS_JOBID.nodes
for node in `cat $HOME/$PBS_JOBID.nodes`
do
rsh $node mkdir /tmp/$PBS_JOBID
rsh $node cp -rf $PBS_O_WORKDIR/* /tmp/$PBS_JOBID/
done
cd /tmp/$PBS_JOBID
mpirun -np 8 -machinefile $PBS_NODEFILE $HOME/bin/vasp
cp -rf /tmp/$PBS_JOBID/* $PBS_O_WORKDIR/
for node in `cat $HOME/$PBS_JOBID.nodes`
do
rsh $node rm -rf /tmp/$PBS_JOBID
done
rm $HOME/$PBS_JOBID.nodes
指定节点特性
# 这是一个并行作业脚本的例子
#PBS -N vasp.Hg
#PBS -j oe
#PBS -l nodes=2:ppn=12:amd
#PBS -q low
echo "This jobs is "$PBS_JOBID@$PBS_QUEUE
NP=`cat $PBS_NODEFILE | wc -l`
cd $PBS_O_WORKDIR
mpirun -np $NP -machinefile $PBS_NODEFILE ./vasp
#PBS -l nodes=2:ppn=4:amd:chem
#PBS -l nodes=1:ppn=8:chem+1:ppn=8:bio
#PBS -l nodes=node1:ppn=8+node2:ppn=8
提交作业
vim job.sh
添加“可执行命令”
qsub job.sh
查询作业运行
作业提交后,会生成一个作业号,如:
[dawning@node1 ~]$ qsub test.pbs
93.node1
查看集群作业运行状态:
[dawning@node1 ~]$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
93.node1 test.pbs zhaocs 0 R default
95.node1 vasp.Hg vasp 0 E default
111.node1 structure amber 0 Q default
Name:作业名称
User: 用户名
Time: 使用时间
S: 作业状态(E:退出,H:挂起,Q:排队,R:运行,S:暂停)
Queue:队列
查询作业运行
[dawning@node1 ~]$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
93.node1 test.pbs zhaocs 0 R default
95.node1 vasp.Hg vasp 0 E default
111.node1 structure amber 0 Q default
查询某个作业运行状态:
qstat 93.node1 (或者 qstat 93)
显示作业运行在哪些节点上:
qstat -n 93.node1
显示作业运行详细信息:
qstat -f 93.node1
取消作业
[dawning@node1 ~]$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
93.node1 test.pbs zhaocs 0 R default
95.node1 vasp.Hg vasp 0 E default
111.node1 structure amber 0 Q default
[dawning@node1 ~]$ qdel 93.node1
作业挂起和取消挂起
[dawning@node1 ~]$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
93.node1 test.pbs zhaocs 0 R default
95.node1 vasp.Hg vasp 0 E default
111.node1 structure amber 0 Q default
挂起作业:
qhold 111.node1
取消作业挂起
qrls 111.node1
更改作业属性
[dawning@node1 ~]$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
93.node1 test.pbs zhaocs 0 R default
95.node1 vasp.Hg vasp 0 E default
111.node1 structure amber 0 Q default
更改作业运行队列:
qmove high 111.node1
更改作业资源属性:
qalter -l walltime=10:00:00 111.node1
交换作业排队顺序
[dawning@node1 ~]$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
93.node1 test.pbs zhaocs 0 R default
95.node1 vasp.Hg vasp 0 E default
111.node1 structure amber 0 Q default
112.node1 gaussian gauss 0 Q default
交换两个作业的排队顺序:
qorder 111.node1 112.node1
[dawning@node1 ~]$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
93.node1 test.pbs zhaocs 0 R default
95.node1 vasp.Hg vasp 0 E default
112.node1 gaussian gauss 0 Q default
111.node1 structure amber 0 Q default
作业依赖关系
PBS脚本中可以指定多个作业之间的依赖关系,比如作业提交前另一个作业必须完成,否则处于排队状态
#PBS -N step2
#PBS -l nodes=4:ppn=4
#PBS -q high
#PBS -W depend=after:<JOB_ID>
…
当指定作业非正常结束,作业才能提交
#PBS -N job_rerun
#PBS -l nodes=4:ppn=4
#PBS -q high
#PBS -W depend=afternotok:<JOB_ID>
…
Showq:可以查看任务的资源情况
tracejob命令:追踪作业的状态,语法是:tracejob –n(天数) <jobID>,例子,tracejob -n4 6(查看4天内作业号为6的运行状态)
删除作业:qdel 6(id)
标签:
原文地址:http://www.cnblogs.com/shelly-family/p/4616589.html