PBS作业管理系统使用技巧 | Kevinzjy's Blog
PBS是一种十分常用的集群作业调度系统,主要包括openPBS, PBS Pro和Torque三种分支。本文以Torque为例,简单介绍一下PBS作业调度系统的使用技巧
Torque介绍
什么是TORQUE:
Terascale Open-source Resource and QUEue Manager (TORQUE) 是一个分布式计算节点和批处理作业的资源调度系统,常在高性能计算集群中用于计算作业的提交和管理。用户可以使用TORQUE将计算作业提交到不同计算队列,常用的命令包括qsub(提交作业), qstat(作业状态查询)和qdel(删除作业)
官网地址: Support Portal
Torque使用基础
作业提交和管理命令
命令 | 功能 | 使用说明 | 示例 |
qsub | 提交pbs作业 | qsub [script] | $ qsub job.pbs |
qdel | 删除pbs作业 | qdel [job_id] | $ qdel 12345 |
qhold | 挂起pbs作业 | qhold [job_id] | $ qhold 12345 |
qrls | 释放挂起的pbs作业 | qrls [job_id] | $ qrls 12345 |
作业状态查询命令
命令 | 说明 |
qstat -q | 列出所有队列 |
qstat -a | 列出所有作业 |
qstat -u user_id | 列出user_id的所有作业 |
qstat -r | 列出所有正在运行的作业 |
qstat -f job_id | 列出作业job_id的信息 |
qstat -fQ queue | 列出队列queue的信息 |
qstat -B | 列出所有作业状态的汇总 |
pbsnodes | 列出所有节点的详细信息 |
pestat | 列出所有节点的状态 |
qstat -n | 列出节点信息 |
PBS作业参数
12345678 | #!/bin/bash#PBS -l nodes=1:ppn=16#PBS -l walltime=1000:00:00#PBS -q high#PBS -N Job_Name#PBS -oeyour_commands_goes_here |
提交交互式作业
我们可以通过-I选项提交一个交互式的作业,效果类似直接ssh登录到计算节点
qsub -I -N stdin -l nodes=1:ppn=16 -l walltime=1000:00:00 -q high
批量提交作业
在很多情况下,我们需要提交大量相似的任务,比如大量样本的转录组数据分析,每个样本数据的分析流程都是一致的,提交的脚本中一般只有样本名字不同,那么如果对每个样本产生产生一个shell脚本,是非常麻烦的。在这种情况下,我们可以通过任务模板与qsub -v命令,进行作业提交时的参数传递。
模板任务文件:template.sh
1234567 | #!/bin/bash#PBS -j oe#PBS -q high#PBS -l nodes=1:node:ppn=4#PBS walltime=1000:00:00hisat2 -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
123 | sample1sample2sample3 |
任务投递脚本:qsub.py
1234567891011121314151617181920 | #!/usr/bin/env pythonimport csvimport subprocessimport timeparam_file = './job_params.csv'cwd = '/home/kevinzjy/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, cwd) # print qsub_cwd exit_status = subprocess.call(qsub_cmd, shell=True) if exit_status is 1: print 'Job "{}" failed to submit'.format(qsub_cwd) time.sleep(1)print "Done submitting jobs!" |
通过qsub.py,我们可以实现对job_params.csv里面每一行对应的样本数据
批量删除作业
如果要删除一个用户所有的作业,可以使用qselect结合xargs命令,进行作业编号的提取和对指定编号作业的删除
qselect -u user_id | xargs qdel
利用qselect命令,我们可以增加参数进一步缩减选择的作业范围,详细信息可以参考man qselect中的说明
参数 | 说明 |
-N | 指定作业名字 |
-s | 指定状态 [EHQRTW] |
-u | 指定用户列表 |
删除某用户所有正在排队的任务:
1 | qselect -u user_name -s Q | xargs qdel |
xargs命令的作用是读入标准输入的内容并分行,对其中每一行的内容都执行相同的命令,在这里xargs读入了前面管道中qselect命令得到的某用户的所有作业编号,对于每个编号执行了qdel命令,起到了删除该用户名下所有作业的效果
节点状态
excl:所有CPU资源已被占用;
busy:CPU已接近满负荷运行;
free:全部或部分CPU空闲;
offl:管理员手动指定离线状态;
官方手册:Altair Product Documentation - Altair Community
OpenPBS 配置安装完全教程 | CENTOS 7 | A complete Tutorial | 老土驿站
qsub作业提交命令_海云之家的博客-优快云博客_qsub 提交作业
node state load phymem ncpus allmem resi usrs tasks jobidlist | ||||||
cu01 down* 0.00 515699 80 579699 3955 1/1 0 | ||||||
cu02 down* 0.04 257429 40 273813 18205 3/1 0 | ||||||
cu04 down* 0.08 257419 48 294283 2979 1/1 0 | ||||||
node1 free 0.00 257321 32 290089 2350 0/0 0 | ||||||
node2 free 0.00 257321 32 290089 2341 0/0 0 | ||||||
node3 free 0.00 257321 32 290089 2342 0/0 0 | ||||||
node4 free 0.00 257321 32 290089 2344 0/0 0 | ||||||
node5 free 0.00 515101 32 547869 3767 0/0 0 | ||||||
node6 free 0.00 515101 32 547869 3772 0/0 0 | ||||||
node7 free 0.00 1031165 48 1063933 6783 0/0 0 | ||||||
node8 free 0.01 1031165 48 1063933 6785 0/0 0 | ||||||
node | phymem | ncpus | allmem |
cu01 | 515699 | 80 | 579699 |
cu02 | 257429 | 40 | 273813 |
cu04 | 257419 | 48 | 294283 |
node1 | 257321 | 32 | 290089 |
node2 | 257321 | 32 | 290089 |
node3 | 257321 | 32 | 290089 |
node4 | 257321 | 32 | 290089 |
node5 | 515101 | 32 | 547869 |
node6 | 515101 | 32 | 547869 |
node7 | 1031165 | 48 | 1063933 |
node8 | 1031165 | 48 | 1063933 |