SGE与PBS使用

1、集群基础知识

1.1 集群任务管理系统

  计算机集群:高性能集群(High Performance Computing,简称HPC)是一组松散或紧密连接在一起工作的计算机。这些计算机协同工作,可以利用多个计算机进行并行计算从而获得很高的计算速度,而且任何一个机器坏了整个系统还是能正常运行。
  节点是集群中的控制器,是管理数据和执行维护任务的计算单元。

计算机集群将每个节点设置为执行相同的任务,是由软件控制和调度的,常见的资源管理和调度系统为SGE、PBS。

1.2 系统调度任务的步骤

软件做的事情就是 把不同用户投递的任务按顺序排队,按优先级(时间、重要性等维度)把任务匹配到计算节点执行,主要有四步:
(1)接受用户投放的任务;
(2)在任务运行以前,将任务放到一个存储区域;
(3)发送任务到一个执行设备,并监控任务的运行;
(4)运行结束写回结果并记录运行日志;
 

2、SGE系统常用命令

2.1 提交任务 qusb

示例:

# 命令行方式提交
echo "bowtie2 -p 8 -x index/ref -1 data/A_1.fq -2 data/A_2.fq | samtools sort > A.bam" | qsub -V -cwd -l vf=25G -S /bin/bash -pe openmpi 8 -N A.bt2

# sh脚步方式提交
qsub -cwd -l vf=2g,p=1 -q queuename.q -P projectname -binding linear:2 test.sh

# 任务投递到指定计算节点
qsub -cwd -l vf=1G -l p=1 -q queuename.q@compute-24-4 -P projectname api.sh

用qsub -help可以看完整的参数,但是常用的为如下几个:

-q xxx : 指定要投递到的队列,如果不指定的话,SGE会在用户可使用的队列中选择一个满足要求的队列。
-V: 将当前的环境变量传递到执行命令的节点中
-cwd:在当前目录下执行任务, sge的日志会输出到当前路径。 不增加该指令,所有投递的任务都会在家目录下执行
-l resource=value: 请求资源数, 例如 -l vf=25G -l h=node1 就是任务的预估内存要25G(内存估计的值应稍微大于真实的内存,内存预估偏小可能会导致节点跑挂), 申请在node1上运行
-S /bin/bash: 表示在bash环境下执行命令。默认tcsh.
-pe openmpi 4: 表示使用openmpi进行并行运算,且申请的线程是4,
-N 任务名: 手动执行任务的名字
-j y|n :是否将标准输入和标准输入合并成一个文件
-sync y|n: 是否等待任务结束,返回退出码
-o path: 指定标准输出的文件夹
-p: 定义工作的相对优先级,-1023 到 1024 , 默认值0
-P: 定义项目名称,前提是存在该项目

 

2.2 查看任务 qstat

qstat命令

qstat -j jobid #某个任务详细信息
qstat -u username #某用户的任务
qstat -u username -s r #某用户在跑的任务
qstat -u \* #所有用户任务
qstat -u \* -s r #看哪些用户在跑任务
qstat -q all.q -u \*  #查看某个队列下所有任务
qstat -q all.q@node1 -u \*  #查看某个队列的某一节点下所有任务
qstat -explain a|c|A|E -j jobID # 查看任务任务并给出解释
qstat -f  #查看用户自己在每个节点的任务情况,没啥用
qstat -F vf,p -q bc.q # 能看到实时资源申请剩余情况

任务的状态:
  ① qw #表示等待状态
  ② hqw #任务挂起等待中,待依赖的任务完成后执行
  ③ Eqw #投递任务出错
  ④ r #任务正在运行
  ⑤ s #暂时挂起
  ⑥ dr #节点挂了之后,删除任务就会出现这个状态,只有节点重启之后,任务才会消失

 

2.3 删除任务 qdel

qdel jobid #可同时删除多个,如qdel jobid1 jodid2
qdel -u username #删除某用户所有任务
qstat -u USERNAME | grep "USERNAME" | cut -d "." -f1 | xargs qdel #删除所有任务
qstat -u USERNAME | grep "R" | cut -d "." -f1 | xargs qdel #删除所有正运行的任务
qstat -u USERNAME | grep "Q" | cut -d "." -f1 | xargs qdel #删除所有正等待的任务

 

2.4 挂起/恢复任务

qhold

  挂起qw的任务,状态变为 hqw,待依赖的任务完成后执行。

qhold jobid
qhold -u \*

qrls jobid #恢复

qmod

  挂起running中的任务

qmod -s jobID  # 挂起某个任务
qmod -us jobID # 恢复运行某个挂起的任务

当遇到任务状态Eqw时,qmod -cj jobid ,可以清除错误状态,
qmod修改队列和任务属性

 

2.5 更改任务属性 qalter

  qalter命令修改已提交但正处于暂挂状态的作业的属性
参数和qsub一样。

 

2.6 集群资源查询

qhost

  显示SGE执行主机(即各个计算节点)的状态信息。其中ARCH表示CPU架构,NCPU表示CPU核数,LOAD表示负载情况。

qhost -j 按照节点显示任务
qhost -F 展示每个节点的资源

qconf

  提供集群配置和队列配置的用户界面。

qconf -sel # 显示“执行主机”列表
qconf -sh # 显示“管理主机”列表
qconf -ss # 显示“提交任务主机”列表
qconf -sql # 显示“集群队列”列表
qconf -spl # 显示“集群并行环境”列表

qconf -shgrpl    # 查看队列
qconf -shgrp @bc_hosts # 查看特定队列下的具体计算节点
qconf -srqs max_user_running_jobs  # 查看任务投递数量

qselect

qselect -U # 查看指定用户的可用队列节点
qselect -q # 查看指定队列有哪些可用节点
qselect -q bc.q # 能看到该队列的所有节点

 

3、PBS系统常用命令

3.1 提交任务

qsub

1、通过命令行参数传递给 qsub 命令

  echo “script.py” | qsub -l q batch1 -l nodes=1:ppn=2 (直接在终端设置PBS资源命令,并在此资源下提交可执行脚本)

echo "python script.py -i inputdir -o outdir " | qsub -q Batch1 -l nodes=1:ppn=1 -l mem=40gb -N jobname

  执行script.py 脚本, 通过pbs投递任务, 任务提交到Batch1队列,所需资源为,1个节点,节点使用1个cpu, 40GB物理内存,该任务命名jobname。

2、PBS通过sh脚本执行命令

  qsub 文件名.pbs/.sh (提交任务)

例如 run.sh

#参数解析
#指定节点数目 ppn指每个节点运行的cpu数量(4个小节点,每个48个CPU)
#PBS -l nodes=1:ppn=16
#指定合并到标准输出文件中
#PBS -j oe
#设置程序运行的最大时间192小时
#PBS -l walltime=192:00:00
#指定qsub的所有环境变量都传递到批处理作业中
#PBS -V
#输出文件
#PBS -o /public/home/tang/chaim/back_info/$jobname.out
#错误输出文件
#PBS -e /public/home/tang/chaim/back_info/$jobname.err
cd PBS_O_OUTDIR
# 程序执行命令
python script.py -i inputdir -o outdir 

 

# 执行脚本
qsub run.sh
# 制定命令开始运行的时间  
qusb -a 070000 run.sh   #7天后运行程序,此时是处于W状态(等待状态)
qsub -a 2400 run.sh   #24h后运行程序

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

3.2 查看任务

qstat

  主要用于查询作业状态信息。

命令格式:
qstat [-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 后加不同参数可以查看不同的信息
 
qstat -a #查看账号所有作业的状态
  Job id是给提交的任务分配的任务号,S分为多种状态,(R 代表运行,Q 代表排队,E 代表正在退出,H 代表挂起,C 代表运行完毕)。
 
qstat -f 1386 # 查看特定作业详细信息
qstat jobid1 jobid2 # 可一次查看多个作业
 
qstat -u user1 # 查看指定用户的作业

任务执行所在队列信息:
qstat -q   # 列出队列使用信息
qstat -n    # 列出队列中使用的节点
qstat -f jobid    # 查看jobid任务的详细信息

3.3 删除任务

qdel

  用于删除已提交的作业。

qdel [-W 间隔时间] 作业号
命令行参数:
qdel -p 强制清除某个作业号,一般不建议使用

eg:
qdel -W 15 211  # 15 秒后删除作业号为 211 的作

3.4 挂起/恢复任务

qhold

  可以挂起作业,使其不被调度执行;

qhold jobid1 jobid2 ...
# 其中 jobidX 代表需要操作的作业号,可以一次操作多个作业

qrls

  可以将挂起的作业释放,使其可以被调度执行;

qrls jobid1 jobid2 ...
# 其中 jobidX 代表需要操作的作业号,可以一次操作多个作业

qrerun

  重新运行作业。

3.5 任务更改

qmove

  将作业移动到另一个队列

qalter

  更改作业资源属性

3.6 集群资源查询

pbsnodes

  查看空闲节点信息

pbsnodes   # 查看所有节点
pbsnodes -l free   # 查看空闲节点
pbsnodes 某节点   # 查看某节点状态
ssh 某节点   # 节点切换
exit 某节点   # 节点退出

showq

  查看所有作业

showq  # 展示PBS系统所有作业信息
showq -u uid  # 简要显示任务的信息

 

参考资料:

1、集群SGE作业调度系统
2、集群任务管理系统SGE的简明教程
3、SGE作业调度系统的简单理解
4、SGE部署
5、中国科学院超级计算武汉分中心PBS 用户指南
6、集群及PBS调度系统常用命令
7、服务器集群与PBS任务管理系统的常用命令
8、PBS官方文档

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值