EdwardWong
2022/09/08阅读:590主题:姹紫
PBS作业调度管理系统
PBS是一种十分常用的集群作业调度系统,主要包括openPBS,PBS Pro和Torque三种。常在高性能计算集群中用于计算作业的提交和管理。 用户可以使用PBS将计算作业提交到不同的计算队列。
学校hpc注意事项
学校提供了四个hostname
可以用来连接,username
需要使用nusstu\****
,那一个都可以。下面列出了基本的信息。


学校为项目提供了专门的工作目录,提交作业及保存作业结果要在/hpctmp
或者hpctmp2
中。

检查LS Dyna
的license
在~
文件夹下执行cd/LS-DYNA
和./ls-dyna.exe -lic
, 如果license
没有问题的话,会出现下面的信息:

常见的pbs命令汇总
-
qsub
--用于提交作业脚本
脚本文件的一些选项:
-a data_time
表示经过date_time时间后作业才可以运行
-C directive_prefix
在脚本文件中以directive_prefix
开头的行解释为qsub
的命令选项,若无此选项,则默认为#PBS
.
-e path
将标准错误信息重定向到path
-I
以交互方式运行
-j join
将标准输出信息与标准错误信息合并到一个文件join中,若join
为oe
,则一起输出到STDOUT
,若join
为eo
,则一起输出到STDERR
.
-k keep
定义在执行结点上保留标准输出和标准错误信息中的哪个文件。 keep为o表示保留前者,e表示后者,oe或eo表示两者都保留。
-l resource_list
定义资源列表,几个常用的资源种类: cput=N 请求N秒的cpu时间,也可以是hh:mm:ss的形式 walltime: 设定作业所需的最大wallclocl时间
因为cpu是并行运算的,一个程序的运行可以因为io交互是停停歇歇的,所以walltime要大于等于cpu时间。
mem=N[K|M|G][B|W] 请求N{K|M|G}{byte|words}大小的内存
nodes=N:ppn=M 请求N个结点,每个结点M个处理器。
s_rt=10:00:00: 指定任务执行大约需要10个小时,只是大概估计,超过10小时任务不会结束
pe smp 4: 指定任务执行需要4个线程
-m mail_option
mail_option
为a
: 作业abort时给用户发信息,为b
时作业开始进行发信, 为e
时作业结束运行时发信。
-M user_list
定义有关此作业的mail发给哪些用户
-N name
作业名,限15个字符,首字符为字母,无空格
-o path
重定向标准输出到path
-S shell
指明执行运行脚本所有的shell,须包含全路径(-S /bin/bash)
-V
表明导出用户在提交节点的环境变量到计算节点,这个变量比较重要,最好加上,否则计算节点可能找不到用户自己安装的程序,
-v variable_list
variable_list是进行作业提交时的参数传递,从而可以利用一个模板脚本,直接提交多个任务。
-q
指定投递队列
利用qsub
提交作业的一个例子:
qsub -d ./ -q fat -N kirito -l nodes=1:ppn=4 -V -j oe 作业名
note:
qsub
的默认输出环境为主目录。如果想要提交的作业在其他目录,可以使用-cwd(current work directory)
或-d ./
指明当前目录,从而可以避免书写绝对路径,这样日志会输出到当前目录下。
-
qstat
--用于查询作业状态信息
命令格式: qstat [-f] [-a] [-i] [-n] [-s] [-R] [-Q] [-q] [-B] [-u]
参数说明:
`-f` jobid列出指定作业的信息
`-a` 列出系统所有作业
`-i` 列出不在运行的作业
`-n` 列出分配给此作业的节点
`-q` 列出队列状态,并以alternative的形式显示
`-r` 列出所有正在运行的作业
`-u username` 显示某个用户的文件 --> `qstat -u user_id`
例如 qstat -f 1386
用于查看指定作业信息
作业状态:
B: 只用于作业向量,表示作业向量已经开始执行
E: 作业在运行后退出
H:作业被服务器或用户或者管理员阻塞
Q:作业正在排队中,等待被调度运行
R:作业正在运行
S:作业被服务器挂起,由于一个更优先级的作业需要当前作业的资源
C:作业完成
-
查看空闲节点信息(提交作业前需要查看一下各队列节点空闲状况)
pbsnodes -l free
pestat
列出所有节点的状态
节点的状态主要有以下几点参数:
Excl:
所有CPU
资源已被占用
Busy:
CPU
已接近满负荷运行
Free:
全部或部分CPU
空闲
Offl:
管理员手动指定离线状态
-
qdel
-- 用于删除已提交的作业
qdel -W 间隔时间 作业号
qdel -W 15 211
--> 15秒后删除作业号为211的作业。
qdel -p 作业号
用于强制删除某个作业号。
-
qhold
&qrls
--作业挂起及作业释放
使用qhold
命令可以挂起作业,使其不被调度执行 使用qrls
命令可以将挂起的作业释放,使之可以被调度执行。这两个命令可以一次操作多个作业。
命令格式:qhold jobid1 jobid2 ...
和qrls jobid1 jobid2 jobid3...
-
qrerun
: 重新运行作业
7.qsig -s KILL 1010
停止1010作业
-
qmove
: 将作业移动到另一个队列 -
hpc space
查看空间大小
在我们学校的系统中,/hpctmp
和/hpctmp2
保存的文件会在60天自动删除
PBS脚本文件
一般地,我们可以通过在shell
脚本头部增加PBS
参数后,直接通过qsub
命令提交作业。
例如:job.sh
#! /bin/bash (-e) // 可以添加-e选项,这样在执行过程中遇到错误即停止
#PBS -l nodes=1:ppn=16
#PBS -l walltime=1000:00:00
#PBS -q high
#PBS -N Job_Name
#PBS -j oe
自己的脚本文件
这样可以在job,sh
的头部指定了作业申请的资源,队列以及作业名字,对于这种已经写好参数的脚本,可以直接使用qsub
命令提交作业qsub job.sh
,这样可以避免在终端人为的输入一长串qsub
, 如qsub -l nodes=1:ppn=16 -l walltime=1000:00:00 -q high -N Job_Name -oe job,sh
批量提交作业
很多时候我们需要提交大量相似的任务,每个任务的分析流程是一样的,提交的脚本中一般只有样本名字不同,那么如果对应每个样本都用一个shell
脚本是非常麻烦的,在这种情况下,可以通过任务模板与qsub -v
选项,进行作业提交时的参数传递,利用一个模板脚本,直接提交多个任务。
下面举一个生信的例子,这个例子是参考其他人的。
-
模板文件 template.sh
#PBS -j oe
#PBS -q high
#PBS -l nodes=1:ppn=16
#PBS walltime=1000:00:00
hisat2 -p 4 -x hg19 -1 ./reads/${SAMPLE}_1.fq.gz -2 ./reads/${SAMPLE}_2.fq.fz -t | samtools view -bs > ./align/${SAMPLE}.bam
-
任务参数文件: job_params.csv
sample1
sample2
sample3
-
任务投递脚本: qsub.py
#!/usr/bin/env python
import csv
import subprocess
import time
param_file='./job_params.csv'
cwd='/home/bioinfo/RNA-seq'
with open(param_file,'r') as f:
reader=csv.reader(f)
for sample in reader:
qsub_cmd='qsub -N {0} -d {1} -v SAMPLE={0} template.sh'.format(sample,cmd)
//系统调用
exit_status=subprocess.call(qsub_cmd,shell=True)
if exit_status is 1:
print 'job "{}" failed to submit'.format{qsub_cmd}
time.sleep(1)
这样可以通过运行python
脚本同时向PBS
提交sample1, sample2,sample3
作业。 在本例中,只需要向shell脚本传递一个参数,如果需要传递更多参数,可以通过-v PARAM1=param1,PARAM2=param2, ... PARAMn=paramn
.
批量删除作业
如果要删除一个用户所有的作业,可以使用qselect
结合xargs
命令,进行作业编号的提取和指定编号作业的删除。
qselect -u user_id | xargs qdel
利用qselect
命令,我们可以增加参数进一步缩减选择的作业范围,可以参考man qselect
中的说明。
-N 指定作业名字
-s 指定状态[E/H/Q/R/T/W]
-u 指定用户列表
-p 设定作业优先级,越大优先级越高
删除某用户所有正在排队的任务:
qselect -u user_name -s Q | xargs qdel
PBS环境变量
环境变量 | 说明 |
---|---|
PBS_ENVIRONMENT | 批处理作业为PBS_BATCH,交互式作业为PBS_INTERACTIVE |
PBS_JOBID | PBS系统给作业分配的标识号 |
PBS_JOBNAME | 用户指定的作业名称 |
PBS_NODEFILE | 包含作业所用计算节点的主机名 |
PBS_QUEUE | 作业所执行的队列名称 |
PBS_O_HOME | 执行qsub命令的HOME环境变量值 |
PBS_O_PATH | 执行qsub命令的PATH环境变量值 |
PBS_O_SHELL | 执行qsub命令的SHELL环境变量值 |
PBS_O_HOST | 执行qsub命令节点名称 |
PBS_O_QUEUE | 提交的作业的最初队列名称 |
PBS_O_WORKDIR | 执行qsub命令所在的绝对路径 |
作者介绍