使用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}'
参考
最后修改于 2019-11-14