linux---任务分配(PBS)

转自:http://blog.csdn.net/xiazhaoqiang/article/details/7761425

PBS环境qsub, qstat, qdel 

PBS 是公开源代码的作业管理系统,在此环境下运行,用户不需要指定程序在哪些节点上运行,程序
所需的硬件资源由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]
参数说明:因为所采用的选项一般放在pbs 脚本中提交,所以具体见PBS 脚本选项。
例:# qsub aaa.pbs 提交某作业,系统将产生一个作业号

(2) qstat 命令—用于查询作业状态信息 
命令格式:qatat [-f][-a][-i] [-n][-s] [-R] [-Q][-q][-B][-u]
参数说明:
-f jobid 列出指定作业的信息
-a 列出系统所有作业
-i 列出不在运行的作业
-n 列出分配给此作业的结点
-s 列出队列管理员与scheduler 所提供的建议
-R 列出磁盘预留信息
-Q 操作符是destination id,指明请求的是队列状态
-q 列出队列状态,并以alternative 形式显示
-au userid 列出指定用户的所有作业
-B 列出PBS Server 信息
-r 列出所有正在运行的作业
-Qf queue 列出指定队列的信息
-u 若操作符为作业号,则列出其状态。
若操作符为destination id,则列出运行在其上的属于user_list 中用户的作业状态。
例:# qstat -f 211 查询作业号为211 的作业的具体信息。

(3) qdel 命令—用于删除已提交的作业 
命令格式:qdel [-W 间隔时间] 作业号
命令行参数:
例:# qdel -W 15 211 15 秒后删除作业号为211 的作业

(4) qmgr 命令—用于队列管理
 
qmgr -c "create queue batch queue_type=execution"
qmgr -c "set queue batch started=true"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch resources_default.nodes=1"
qmgr -c "set queue batch resources_default.walltime=3600"
qmgr -c "set server default_queue=batch"

2、PBS 脚本文件
 
PBS 脚本文件由脚本选项和运行脚本两部分组成。

(1) PBS 作业脚本选项 (若无-C 选项,则每项前面加‘#PBS’)
-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 命令提交作业后,不在终端显示作业号。

(2) 运行脚本同LINUX 下一般的运行脚本文件。
[注]:脚本文件中的mpirun_rsh 命令行中的节点列表文件要用环境变量表示
$PBS_NODEFILE,这个环境变量表示由pbs 自动分配给作业的节点列表;
节点数为命令行中指定的进程数。
格式如下:
mpirun_rsh –np 进程数 –hostfile $PBS_NODEFILE 可执行程序名 

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_rsh –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_rsh –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
显示结果:

(3) 作业状态查询示例
Qstat 后加不同参数可以查看不同的信息(各参数的意思,上面有详细的说明,你们可以一个个试验一
下,以后就知道查看哪些信息,需要哪些参数)
实例:
命令行:#qstat –a (查看作业的状态)
显示结果:
解释:Job id 211 是给你提交的任务分配的任务号,S(任务状态,R 表示正在运行,Q 表示正在排
队等候调度)
8
命令行:#qstat –n (查看作业使用的节点)
显示结果:
解释:blade32 就是分给你这个任务的节点
命令行:#qstat –f 211 (查看有关作业运行具体信息)
显示结果:
解释:exec_host 显示的是实际执行该任务的节点

 

转自:http://blog.sina.com.cn/s/blog_62db9b1901013g49.html

qsub

qsub命令用来向SGE提交批处理作业,SGE支持单或多节点作业。

qsub [ options ] [ command | -- [ command_args ]]

1. -@ optionfile (contains all valid options)  就是把qsub命令的可选项组合成一定功能的语句,保存在一个文件中。  qsub -a optionfilename jobfilename  

2. -a date_time   设置作业什么时候可以执行。   格式:CC YY MMDDHHMM.SS 如 201109272213.21   qsub -a 201109272213.21 ../simplejob

3. -A account_string  Identifies the account to which the resource consumption of the job should be charged   设置一个作业的账户名,便于统计该账户使用的资源等信息    qsub -A testaccountname jobname  

4. -ac 添加名/值对到作业上下文   -dc 删除。。   -sc 设置(修改)。。   Contexts provide a way to dynamically attach and remove meta-     information to and from a job. The context variables are not     passed to the job's execution context in its environment     The outcome of the evaluation of all -ac, -dc, and -sc options     or corresponding values in qmon is passed to defined JSV     instances as parameter with the name -ac.  

5. -ar ar_id 分配已提交作业,作为它的一部分,给已存在预约。ar=advance reservation   qsub -ar 60 jobname   #ai_di = unsigned integer   

6.  -b y[es]|n[o]      Gives the user the possibility to indicate explicitly whether       command should be treated as binary or script.     

7. -binding 等待理解

8.  -c occasion_specifier(际符)  定义或者重定义作业是否要被检查,if是,在什么环境下。        n           no checkpoint is performed.               s           checkpoint when batch server is shut down.               m           checkpoint at minimum CPU interval.               x           checkpoint when job gets suspended.                 checkpoint in the specified time interval.   qsub -c n jobname

9. -C prefix_string 前缀字符串定义一个在作业命令中的指令     qsub -C "#$" ../simplejob   

10.  -ckpt ckpt_name 选择检查点环境来检查一个作业,同时声明这个作业是检查点作业。      qsub -ckpt allanckpt ../simplejob    

11.  -clear 重置作业的所有元素为初始默认状态    qsub -clear ../simplejob   

12.  -cwd =current working directory  从当前的目录开始执行作业。如果有相应的配置文件的话,    这个命令将启动网格引擎的路径别名设备。    

13.  -dl date_time 设置作业在deadline之前执行完,格式为CC YYU MMDDHHMM.SS    qsub -dl 201101131159.01 ../simplejob

14.  -e [[hostname]:]path,...定义或重新定义作业的标准错误流使用的路径 e=stderror

15.  -h | -h {u|s|o|n|U|O|S}... h=hold 暂停作业执行       'u' .........user hold.             `s'  denotes a system hold.               `o'  denotes a operator hold.               `n'  denotes no hold (requires manager privileges).               `U'  removes a user hold.               `S'  removes a system hold.               `O'  removes a operator hold.        qsub -h ../simplejob(qsub只能使用-h)

16.  -l resource=value,... l=launch 启动满足资源需求的作业    Launch the job in a Grid Engine queue meeting the given resource               request list.  In case of qalter the previous definition is               replaced by the specified one.    qsub -l s_core=5 ../simplejob

17.  -q wc_queue_list 定义或重定义可能用来执行作业的队列,包括群聚队列、队列域、队列实例。    qsub -q all.q ../simplejob

18.  -hard  表示该作业在安排执行之前,作业的资源需求必须满足。    qsub -hard  ../simplejob

19.  -soft 表示该作业在安排执行之前,作业的资料需求可以有、但不必须有。    qsub -soft ../simplejob

20.  -help 获取帮助    qsub -help

21.  -hold_jid   wc_job_listt 定义或重定义当前提交的作业对哪些作业有依赖,所依赖的作业使用通配符作业清单表示:wc_job_list    qsub -hold_jid 63926 ../simplejob

22.  -hold_jid_ad wc_job_list ad=array dependency list of the submitted job    定义或者重定义组作业依赖列表。    qsub -hold_jid_ad 1-1200

23.  -t n[-m[:s]]    指定组作业的数量,将指示器与作业关联    qsub -t 1-1200 ../simplejob

24.  -i [[hostname]:]file,... 定义或重定义一个文件为作业的标准输入流    qsub -i stdin job

25.  -j y[es]|n[o] 指定作业的标准错误流是否合并到标准输出流,如果-j y 和-e都存在的话,SGE将忽略后者。    qsub -j y ../simplejob

26.  -js job_share 设置作业的对长期资源的相对股份 job_share is an unsigned integer value    qsub -js 4 job

27.  -jsv jsv_url 定义一个本地jsv实例,在作业发送到qmaster之前,该jsv将执行验证作业规范。    qsub -jsv jsvurl job

28.  -m b|e|a|s|n,... 定义作业处在哪个阶段给作业主人发送邮件。m=mail.    `b'     Mail is sent at the beginning of the job.               `e'     Mail is sent at the end of the job.               `a'     Mail is sent when the job is aborted or                       rescheduled.               `s'     Mail is sent when the job is suspended.               `n'     No mail is sent.    qsub -m n ../simplejob

29.  -M user[@host],...定义由哪个主机账户给用户发送邮件    qsub -M root@ubuntu ../simplejob

30.  -masterq wc_queue_list 定义平行作业的主队列,这个队列可以是集群队列、队列域、队列实例。    qsub -masterq all.q job

31.  -N =name 定义作业名字    qsub -N jobname job

32.  -notify 该选项标示这——网格引擎先发送警告信号给运行中的作业,再发送信号本身。如果SIGSTOP在排队,     作业将收到一个SIGUSR1,之后几秒才收到SIGSTOP;如果SIGKILL在排队,作业将收到一个SIGUSR2,之后     几秒才收到SIGKILL。    qsub -notify job   

33.  -o [[hostname]:]path,... 定义或重定义作业标准输出流o=output stream    qsub -o jobname.jobid job   

34.  -P Project_name 设置作业的项目    qsub -P projectname job   

35.  -p priority 设置作业的相对优先权    qsub -p 10 job     

36.  -pe parallel_environment n[-[m]]|[-]m,... 初始化并行程序化环境    qsub -pe 200-500 job   

37.   -pty y[es]|n[o] 设置是否使用伪终端 pt=pseudo terminal    qsub -pty y  job  

38.  -r y[es]|n[o]  设置作业是否可以重新运行 r=run    qsub -r y job     39.  -R y[es]|n[o] 指示作业的预约要不要实施 R=Reservation    qsub -R y job     40.   -S [[hostname]:]pathname,... 规定作业的Shell解释器    qsub -S ./ job   

41.    -shell y[es]|n[o]  设置执行shell还是command line      qsub -shell y job      

42.  -sync y[es]|n[o] y导致qsub等待作业执行完成之后才退出,n导致qsub提交作业成功就退出          

43.  -tc max_running_tasks 设置作业组中最大并行作业数量 同-t搭配使用     qsub -tc 800 -t 1-1600 job     

44.    -terse Available for qsub only. 只输出刚刚提交作业的ID。

45.  -v variable[=value],...导出环境变量到作业执行上下文    qsub -v h_core=12 job    

46.  -V 导出所以活动的环境变量到作业上下文       qsub -V job    

47.  -verify 提交作业的同时,进行验证    qsub -verify job   

48.  -w e|w|n|p|v 设置验证(级别)模式    e..error  w..warning  n..none  p..poke  v..verify   

49.    -wd working_dir 工作目录    qsu -wd ./  job 

 

你可能感兴趣的:(LINUX)