个人的网站学习记录
集群及PBS调度系统常用命令
记录的集群及PBS调度系统常用命令

使用Environment Modules

在同一软件的不同版本之间切换,也可在同一功能的不同软件之间切换,以此来选择最合适的编程环境和运行环境。使用系统命令 module 可以快速地达到这一效果。

常用module命令

$ module list   //查看当前所载入的所有 module
$ module load <module name> //加载模块
$ module unload Name  //卸载模块
$ module spider name  //查询模块
$ module avail  //想要查看服务器中所有可用的 module
$ module avail <module name>  //查询模块<module name>的已装有的版本
$ module add <module name>  //从系统当前的所有 module 中进行添加
$ module remove <module name>  //把某个模块从系统环境中删掉
$ module swap anaconda/2 anaconda/3  //交换两个 module,从当前环境中卸载 anaconda/2 并载入 anaconda/3
$ module show name  //显示某模块的路径编译器信息等内容(相应模块的脚本文件内容)

在PBS脚本中使用module

module 命令仅作用在当前节点上,如果使用 PBS脚本提交任务,那么实际运行任务的 节点和当前节点是不同的,因此方便的做法是将 module 命令一并写在 PBS脚本中。

定制你自己的默认载入 module

当你登录系统时,系统会默认载入一些 module。如果这些 module 不是你需要的,或者你 需要载入更多的 module,那么请直接在个人 HOME 目录下的 .bash_profile 文件的 最后添加

module add <module name>

即可。每个 module 的添加单独占一行。这样每次你登录系统之后系统就会自动加载你指定的 module。 更改.bash_profile文件的同时,在你运行 PBS任务时也会自动载入这些 module, 因此无需在 PBS脚本中再次添加 module 命令!

PBS作业控制

  • qsub:提交作业
  • qdel:取消作业
  • qsig:给作业发送信号
  • qhold:挂起作业
  • qrls:释放挂起的作业
  • qrerun:重新运行作业
  • qmove:将作业移动到另一个队列
  • qalter: 更改作业资源属性

PBS作业监测

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 中用户的作业状态。

showq 查看所有作业

  • showq -u uid : 简要显示任务的信息

PBS节点状态

  • pbsnodes:列出集群中所有节点的状态和属性

    pbsnodes -l free  //查看空闲节点(提交作业前需要查看一下各队列节点空闲状况)
    
  • ‘qnodes’ 查看多有节点

PBS作业属性

可以用两种方式设置 PBS 作业属性: 1.通过命令行参数传递给 qsub 命令;

qsub [-a date_time] [-A account_string] [-b secs] [-c checkpoint_options] [-C directive_prefix] [-d path] [-D path] [-e path] [-f] [-h] [-I] [-j join] [-k
       keep] [-l resource_list] [-m mail_options] [-M user_list] [-n node exclusive] [-N name] [-o path] [-p priority] [-P proxy_username[:group]] [-q destination]
       [-r c] [-S path_list] [-t array_request] [-T prologue/epilogue script_name] [-u user_list] [-v variable_list] [-V] [-w] path [-W additional_attributes] [-x]
       [-X] [-z] [script]

2.在 PBS 脚本中以 #PBS 方式指定。 下表列出常用的 PBS 作业属性

属性 取值 说明
-l 以逗号分隔的资源列表 设定作业所需资源
-I 以交互方式运行
-N name 作业名称 设定作业名称
-o 文件路径 设定作业的标准输出文件路径
-e 文件路径 设定作业的标准错误文件路径
-p -1024 到 +1023 之间的整数 设定作业优先级,越大优先级越高
-q 队列名称 设定作业队列名称
-m mail_option a b e a:作业 abort 时给用户发信;b:开始;e:结束
-M user_list 定义有关此作业的 mail 发给哪些用户
-j join oe eo 将标准输出信息与标准错误信息合并到一个文件 join 中
-k keep o e oe eo p 定义在执行结点上保留标准输出和标准错误信息中的哪个文件

比较常用的作业资源如下:

资源 取值 说明
nodes 节点资源构型 设定作业所需计算节点资源
walltime hh:mm:ss 设定作业所需的最大 wallclock 时间
cput hh:mm:ss 设定作业所需的最大 CPU 时间
mem 正整数,后面可跟 b,kb,mb,gb 设定作业所需的最大内存
ncpus 正整数 设定作业所需的 CPU 数目
pbsnodes -l free  //查看空闲节点(提交作业前需要查看一下各队列节点空闲状况)
qstat -a  //查看各个队列的排队情况
qstat -n  // 查看在哪个节点运行
qsub xxx.job  //提交任务,执行后会返回一个任务号,表示提交成功,否则会返回一些错误信息
showq  //显示当前集群正在运行、等待的所有任务及已占用的计算资源,注意,只能看到自己提交的任务列表,而不能看到其他用户提交的任务列表
qorder 123 124   //将ID124插入到ID123之前
qalter -p 1000 1  //将任务1优先级改为1000(优先级越高越先执行)
qdel  //终止任务,例如qdel 1234,即为终止1234号任务的意思,同样,每个用户也只能终止自己提交的任务; 
qpeek  //用以查看某个任务的输出,加上-f参数可以实时查看任务输出,否则每次运行只显示部分输出,用法为qpeek -f 1234; 
fetch-gpu, fetch-cpu, fetch-io  //用于查看某个计算结点的资源使用情况,例如fetch-gpu -n 1,查看1号结点的GPU使用情况

PBS环境变量

下表列出常用的 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_SERVER 跑任务的服务器
PBS_O_QUEUE 提交的作业的最初队列名称
PBS_O_WORKDIR 执行 qsub 命令所在的绝对路径

提交批处理脚本

用以下命令形式提交批处理脚本

$ qsub [options] <control script>

作业提交后一般会先排队等待,PBS 系统会根据作业的优先级和可用的计算资源来调度和执行作业。 PBS 脚本本质上是一个 Linux shell 脚本,在 PBS 脚本中可以用一种特殊形式的注释(#PBS)作为 PBS 指令以设定作业属性。下面是一个 PBS 脚本示例:

#!/bin/bash
#PBS -N task ##任务名
#PBS -l nodes=5:ppn=16               ##使用5个节点,每个节点使用16个核
#PBS -l walltime=9600:00:00         ##估计估计最大运算时间
#PBS -q low                                    ##使用low队列
#PBS -j oe                                       ##表示合并标准输出和标准错误输出至同一个文件
JOU_FILE=fluent.jou                      ##定义变量JOU_FILE
LOG_FILE=run.log                         ##定义变量LOG_FILE
cd $PBS_O_WORKDIR                 ##cd工作目录
nprocs=$(cat $PBS_NODEFILE | wc -l) ##计算核数
## 运行fluent的命令
## 如 fluent 2ddp -t20 -g -i fluent.jou
fluent 2ddp -t$nprocs -cnf=$PBS_NODEFILE -g -pib -i $JOU_FILE >& $LOG_FILE

取消或停止作业

要取消或停止一个作业,需要得到该作业的作业标识号 ,可以通过 qstat 命令获得。

$ qdel <job ID >  //取消一个正在排队等待的作业
$ qsig -s KILL <job ID>  //要停止一个正在运行的作业,可用向其发送 KILL 信号

交互式作业

交互式的计算作业通过类似于下面的命令使用:

$ qsub -I [options]

例如要求 2 台计算节点,运行在 example-queue 队列上的交互式作业,执行如下命令:

$ qsub -I -l nodes=2 -q example-queue
$ qsub -I -X -V -N workbench -q post1 -l nodes=1:ppn=2 -l walltime=120:00:00

执行完以上命令,等 PBS 系统分配好资源后会进入所分配的第一台计算节点,可在其命令终端上执行交互式的计算任务,如要退出交互作业,可在终端输入 exit 命令,或使用按键 Ctrl+D。

PBS脚本示例

#!/bin/bash
#PBS -q post1                  
#PBS -N mypbs            
#PBS -l nodes=1:ppn=18    
#PBS -l walltime=9600:00:00 
#PBS -V
#PBS -o job.log 
#PBS -e job.err 
###PBS -j oe
###PBS -m ae -M szj818@qq.com 

Version=3ddp    
JOU_FILE=test.jou
LOG_FILE=run.log 
ERR_FILE=run.err

echo "--- This job is:$PBS_JOBNAME(${PBS_JOBID%.*})@$PBS_QUEUE"  
echo "--- Current working directory is:${PBS_O_WORKDIR}"
nprocs=$(cat ${PBS_NODEFILE} | wc -l) 
nprocss=$(($nprocs*2))
echo "--- Running on ${nprocs} processes (cores) on the following nodes:" && cat $PBS_NODEFILE | uniq
echo "--- Starting job at:`date`"

cd $PBS_O_WORKDIR 
fluent  $Version -t$nprocss -cnf=$PBS_NODEFILE -g -pib -i $JOU_FILE 1> $LOG_FILE 2> $ERR_FILE
##fluent -pethernet -g $Version -t$ncpus -cnf=pnodes -i $INPUT >$OUTPUT 2>&1

echo "--- Job finished at:`date`"
qstat | grep $PBS_JOBNAME | awk '{print "--- Total CPU hours:"$4}'

参考

  1. 北京大学国际数学中心微型工作站
  2. PBS 作业管理系统
  3. PBS集群相关命令
  4. osc.edu-ANSYS
  5. **HOWTO submit jobs

最后修改于 2019-11-14