PBS作业管理工具介绍
PBS作业管理
集群服务器能够发挥并行运算的能力,必须依靠资源管理软件,PBS就是这样的资源管理者。 每一个计算任务被定义为作业(Job),比如模拟计算或者数据分析。PBS提供了作业管理的 队列和批处理方式执行的环境。
在每一个HPC系统内,PBS和Moab的作业调度程序一起合作。 PBS为Moab提供作业的信息, 而Moab告诉PBS哪个任务在哪个计算节点上。
Job Limits
集群设置有四个可用队列: qgroup,qschool,qother,qsmp,其中qgroup,qschool和qother队列 可用节点为node1-node32,分别对应组内、校内和校外用户,qsmp队列可用节点为胖节点node36。 系统管理员需告知用户在提交任务时必须指定所用队列。详细参数设置如下:
|
qgroup |
qschool |
qother |
Max_user_Run |
15 |
10 |
5 |
Max_Running |
|
|
|
最长运行时间 |
72小时 |
48小时 |
24小时 |
作业调度相关的操作,比如新建、修改队列、控制队列优先级,将某个用户加入或移除某队列, 设置用户资源限制等,可通过曙光Gridview管理软件进行,在WEB浏览器地址栏中输入以下URL:
http://202.204.124.129:8080/gridview_portal
出现登录界面后,使用root账户登入,在Gridview的“作业调度”界面就可以进行相关管理和配置。 曙光Gridview集群管理软件的使用可以参考Gridview用户手册。
可以使用命令 qstat -q来得到 PBS队列的限定方式.
提交作业
有两种方式可以把计算作业提交给PBS队列,让PBS队列安排这些计算作业在集群服务器内的所有计算节点上运行。
- 非交互式方式:这个是最常用的提交方式。首先做一个PBS的脚本,其内容包括所要求的资源,所需要的命令,然后使用qsub命令将这个脚本提交给PBS作业管理系统.
- 交互式批处理方式: 可以在一个或者多个计算机节点上 得到一个交互式的运行终端.命令可以在这个交互式的终端内直接运行。交互式的非那个是 有助于程序调试或者运行一些较短的作业。
非交互式方式
运行一个非交互式的作业,需要2步:
- 建立一个PBS脚本
这个PBS脚本是标准的 Unix/Linux shell 脚本,在最开始的地方包含了一些看似额外的注解行。 这些注解行都是以#PBS开头,定义了PBS的一些指示符。最重要的一些PBS指示 参见下表:
#PBS -l walltime=HH:MM:SS |
This directive specifies the maximum walltime (real time, not CPU time) that a job should take. If this limit is exceeded, PBS will stop the job. Keeping this limit close to the actual expected time of a job can allow a job to start more quickly than if the maximum walltime is always requested. |
#PBS -l pmem=SIZEgb |
This directive specifies the maximum amount of physical memory used by any process in the job. For example, if the job would run four processes and each would use up to 2 GB (gigabytes) of memory, then the directive would read #PBS -l pmem=2gb. The default for this directive on Lion-XF and Lion-LSP is 1 GB (gigabyte) of memory. Other Lion clusters do not currently set a default. |
#PBS -l nodes=N:ppn=M |
This specifies the number of nodes (nodes=N) and the number of processors per node (ppn=M) that the job should use. PBS treats a processor core as a processor, so a system with eight cores per compute node can have ppn=8 as its maximum ppn request. Note that unless a job has some inherent parallelism of its own through something like MPI or OpenMP, requesting more than a single processor on a single node is usually wasteful and can impact the job start time. |
#PBS -q queuename |
This specifies what PBS queue a job should be submitted to. This is only necessary if a user has access to a special queue. This option can and should be omitted for jobs being submitted to a system's default queue. |
#PBS -j oe |
Normally when a command runs it prints its output to the screen. This output is often normal output and error output. This directive tells PBS to put both normal output and error output into the same output file. |
下面提供了一个PBS的脚本示例.
# This is a sample PBS script. It will request 1 processor on 1 node for 4 hours.
# Request 1 processors on 1 node
PBS -l nodes=1:ppn=1
# Request 4 hours of walltime
PBS -l walltime=4:00:00
# Request 1 gigabyte of memory per process
PBS -l pmem=1gb
# Request that regular output and terminal output go to the same file
PBS -j oe
# The following is the body of the script. By default, PBS scripts execute in your home directory, not the directory from which they were submitted. The following line places you in the directory from which the job was submitted.
cd $PBS_O_WORKDIR
# Now we want to run the program "hello". "hello" is in the directory that this script is being submitted from, $PBS_O_WORKDIR.
echo " "
echo " "
echo "Job started on `hostname` at `date`"
./hello
echo " "
echo "Job Ended at `date`"
echo " "
注意上述的例程,是一个非并行接口的程序。如何在PBS脚本内定义一个并行接口程序(MPI),需要参照 MPI 软件的编程规范。
1、qsub提交任务脚本:
qsub 任务文件;
qsub -N test.vasp -l nodes=4:ppn=2 -q defaults 任务文件
脚本被提交到PBS系统后,会分配一个作业ID(Job_ID); 利用这个ID可以操作这个作业(job)。
2、任务脚本文件:本质是shell命令脚本,注释以#开头,运行系统参数以#PBS开头
串行任务脚本:
并行任务脚本:
其中变量说明如下:
3、任务作业状态查询:qstat,其参数选项是:
qstat |
Shows the status of all PBS jobs. The time displayed is the CPU time used by the job. |
qstat -s |
Shows the status of all PBS jobs. The time displayed is the walltime used by the job. |
qstat -u userid |
Shows the status all PBS jobs submitted by the user userid. The time displayed is the walltime used by the job. |
qstat -n |
Shows the status all PBS jobs along with a list of compute nodes that the job is running on. |
qstat -f jobid |
Shows detailed information about the job jobid. |
qstat结果状态说明:E,退出;Q,排队;H,挂起(user或者system级别的原因);R,运行;C,结束
具体来说结果格式说明如下:
- Job id: 作业ID
- Name: 作业脚本名称
- User: 用户名
- Time Use: 作业耗用的CPU time
- S: 作业状态
- Queue: 作业所属队列
- Job id: the job's unique indentifier
- Username: user that owns the job
- Queue: the queue the job is in
- Jobname: the name of the job
- NDS: the number of compute nodes the job is using
- Req'd Memory: the memory requested for the job
- Req'd Time: the walltime requested for the job
- S: the state of the job
- Elap Time: the elapsed walltime for the job
4、任务作业一般操作:
删 除, |
qdel Job_ID |
删除作业ID为Job_ID的任务. |
qdel $(qselect -u username) |
删除所有属于用户username的作业. |
挂起,qhold 作业号;
取消,qrls 作业号;
更改作业队列, qmove high 作业号;
更改作业资源属性,qalter -l walltime= 作业号;
交换两作业排序,qorder 作业号1 作业号2;
5、脚本中运行参数补充:
当另一作业完成后运行,#PBS -W depend=after:作业号;
6、交互式批处理作业
交互式批处理作业与非交互式的类似,都是用qsub来提交作业.提交一个交互式批处理作业不需要提供一个PBS脚本,所有的PBS指示都是用命令行参数的方式来指定. 提交一个交互式的PBS作业的命令如下所示:
qsub -I ... pbs directives ...
参数-I
告诉 qsub 该任务是一个交互式的作业。 下面的例子示意如何使用 qsub 来提交一个交互性的作业,这个作业需要使用1个CPU的1个节点的4个小时。
node33:~$ qsub -I -l nodes=1:ppn=1 -l walltime=4:00:00
qsub: waiting for job 1064159.node33 to start
qsub: job 1064159.node33 ready
node21:~$
在这里有两点需要指出,
1)首先当使用 -I参数来运行交互式作业的时候 qsub 命令不退出,它将一直等待作业开始,然后给出分配了该任务的计算节点提示符,如上例的node21.
2)其次node21:~$表示命令可以执行了,他被分配到了node21计算节点上。
- 点赞
- 收藏
- 关注作者
评论(0)