E

EdwardWong

V1

2022/09/08阅读:590主题:姹紫

PBS作业调度管理系统

PBS是一种十分常用的集群作业调度系统,主要包括openPBS,PBS Pro和Torque三种。常在高性能计算集群中用于计算作业的提交和管理。 用户可以使用PBS将计算作业提交到不同的计算队列。

学校hpc注意事项

学校提供了四个hostname可以用来连接,username需要使用nusstu\****,那一个都可以。下面列出了基本的信息。

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

检查LS Dynalicense

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

常见的pbs命令汇总

  1. qsub --用于提交作业脚本

脚本文件的一些选项:

-a data_time 表示经过date_time时间后作业才可以运行

-C directive_prefix 在脚本文件中以directive_prefix开头的行解释为qsub的命令选项,若无此选项,则默认为#PBS.

-e path 将标准错误信息重定向到path

-I 以交互方式运行

-j join 将标准输出信息与标准错误信息合并到一个文件join中,若joinoe,则一起输出到STDOUT,若joineo,则一起输出到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_optiona: 作业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 ./ 指明当前目录,从而可以避免书写绝对路径,这样日志会输出到当前目录下

  1. 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:作业完成

  1. 查看空闲节点信息(提交作业前需要查看一下各队列节点空闲状况)

pbsnodes -l free

pestat 列出所有节点的状态

节点的状态主要有以下几点参数:

Excl: 所有CPU资源已被占用

Busy: CPU已接近满负荷运行

Free: 全部或部分CPU空闲

Offl: 管理员手动指定离线状态

  1. qdel -- 用于删除已提交的作业

qdel -W 间隔时间 作业号

qdel -W 15 211 --> 15秒后删除作业号为211的作业。

qdel -p 作业号 用于强制删除某个作业号。

  1. qhold & qrls --作业挂起及作业释放

使用qhold命令可以挂起作业,使其不被调度执行 使用qrls命令可以将挂起的作业释放,使之可以被调度执行。这两个命令可以一次操作多个作业。

命令格式:qhold jobid1 jobid2 ...qrls jobid1 jobid2 jobid3...

  1. qrerun: 重新运行作业

7.qsig -s KILL 1010 停止1010作业

  1. qmove: 将作业移动到另一个队列

  2. 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命令所在的绝对路径

分类:

后端

标签:

运维部署

作者介绍

E
EdwardWong
V1