1、用户通过ssh客户端软件直接登录到集群系统的登录节点上,用命令行的方式提交作业。
请注意,用户可以在登录节点查看文件,编辑文件,查看作业,查看资源使用情况等。但用户不允许在登陆节点上运行计算程序。
2、在登录节点上提交作业只允许通过pbs作业调度系统提交作业。
Pbs提交作业是通过qsub命令来执行,qsub命令通过脚本文件提交作业到作业管理系统,具体格式如下:
qsub <PBS作业脚本>
PBS作业脚本本质上是一个shell脚本,注释行以“#”开头,pbs运行参数以“#PBS”开头。PBS作业脚本里可以直接调用shell命令和系统命令。脚本里运行参数说明如下表所示:
运 |
行 参 数 |
说 明 |
-a |
<作业开始运行的时间 |
向 PBS 系统指定作业运行的开始时间。 作业运行时间格式为: [[[[CC]YY]MM]DD]hhmm[.SS] |
-A |
<用户名> |
使用不同的用户来提交作业,缺省使用当前用户名 |
-o -e |
<标准输出文件的路径 <标准错误输出的路径 |
该参数指定标准错误输出的位置,缺省的情况下,PBS 系统 把标准输出和标准错误输出放在用户 qsub 命令提交作业的目录下。 标准错误输出:<作业名>.o<作业号> 标准错误输出:<作业名>.e<作业号> 路径使用如下格式标准: [<节点名>:]<路径名> |
-N |
<作业名> |
指定提交的作业名 |
-q |
<目标队列> |
指定作业提交的目标队列,其中目标队列可以是目标队列、 目标节点名或者是目标节点上的队列。如果目标队列是一个路由队列,那么服务器可能把作业路由到新的队列中。如果该参数没有指定,命令 qsub 会把作业脚本提交到缺省的队列中。 |
-l |
<申请资源列表> |
该参数指定作业脚本申请的 PBS 系统资源列表。 申请资源列表使用如下格式: <资源名>[=[<数量>]][,资源名[=[<数 量 >]],…..] 例如作业希望申请在双路节点上申请 5 个 CPU 资源的情况, 则可以在脚本中如下: #PBS –l nodes=2:ppn=2+1:ppn=1 |
登陆 SHELL 继承来的变量 |
包括$HOME,$LANG,$LOGNAME,$PATH,$MAIL,$SHELL 和 $TZ。 |
|
$PBS_O_HOST |
qsub 提交的节点名称 |
|
$PBS_O_QUEUE |
qsub 提交的作业的最初队列名称 |
|
$PBS_O_WORKDIR |
qsub 提交的作业的绝对路径 |
|
$PBS_JOBID |
作业被 PBS 系统指定的作业号 |
|
$PBS_JOBNAME |
用户指定的作业名,可以在作业提交的时候用 qsub –N <作 业名>指定,或者在 PBS 脚本中加入#PBS –N <作业名>。 |
|
$PBS_NODEFILE |
PBS 系统指定的作业运行的节点名。该变量在并行机和机群 |
3、不同类型的作业在集群计算系统上提交方法
1)普通的串行程序作业,仅使用一个计算核心即可
脚本 |
脚本说明 |
#PBS -N test |
指定作业名:test |
#PBS -l nodes=1:ppn=1 |
指定作业资源:1 个节点,1 个核心 |
#PBS -l walltime=12:00:00 |
指定作业运行时间 12 小时 |
#PBS -q blades |
指定作业运行队列 blades |
cd $HOME/test/ |
进入工作目录 $HOME/test |
./a.out > $HOME/result/a.result |
执行命令, 并将结果重定向到 ./a.out > $HOME/result/a.result 文件中。 |
上面为一个普通的串行作业脚本示例,用户可以通过qsub命令,加上该脚本的文件名,就可提交作业。脚本中给指定了作业名称,作业所需资源,作业的运行时间(12小时,下同),作业运行所用队列,以及作业执行的目录。用户把作业的可执行文件和目录更换到用户的自己的内容就可成功提交用户自己的作业。
2) 共享内存并行作业,同一节点内运行的OpenMP或基于threads的共享内存程序,仅使用一个节点内的多个核心。
脚本 |
脚本说明 |
#PBS -N test_OpenMP |
指定作业名:test_OpenMP |
#PBS -l nodes=1:ppn=10 |
指定作业资源:1 个节点,10 个核心 |
#PBS -l walltime=12:00:00 |
指定作业运行时间 12 小时 |
#PBS -q blades |
指定作业运行队列 blades |
export OMP_NUM_THREADS=10 |
设置 OpenMP 线程数环境变量 |
cd $HOME/test_OpenMP/ |
进入工作目录 $HOME/test_OpenMP |
该类作业包括OpenMP并行方式的作业,也包括不使用OpenMP而是通过POSIX等系统底层所编写的多线程程序。
用户请注意,这里的用户申请的节点数,核心数,需要同OMP_NUM_THREADS一致,且该数值不应该超出队列中单节点的物理核心数。同时,还要注意用户可执行程序的输入文件如需要设定OpenMP的核心数,也要同上面的参数设置一致。
3) MPI并行作业,利用消息传递方式的跨节点的MPI并行程序。
脚本 |
脚本说明 |
#PBS -N test_MPI |
指定作业名:test_MPI |
#PBS -l nodes=2:ppn=20 |
指定作业资源:2 个节点,40 个核心 |
#PBS -l walltime=12:00:00 |
指定作业运行时间 12小时 |
#PBS -q blades |
指定作业运行队列 blades |
echo This jobs is $PBS_JOBID@$PBS_QUEUE |
打印作业名字和作业所属队列信息 |
cd $PBS_O_WORKDIR |
进入工作目录 $PBS_O_WORKDIR |
mpirun -np 40 -machinefile $PBS_NODEFILE ./vasp |
运行 Vasp 可执行文件,指定 40 个线程,以及所 用的节点名 |
该类作业为MPI并行方式的作业,请用户注意用户设定的核心数数值不应该超出队列中单节点的物理核心数。
4) OpenMP+MPI混合并行作业
脚本 |
脚本说明 |
#PBS -N test_OMP_MPI |
指定作业名:test_OMP_MPI |
#PBS -l nodes=2:ppn=20 |
指定作业资源:2 个节点,40 个核心 |
#PBS -l walltime=12:00:00 |
指定作业运行时间 12 小时 |
#PBS -q blades |
指定作业运行队列 blades |
echo This jobs is $PBS_JOBID@$PBS_QUEUE |
打印作业名字和作业所属队列信息 |
cd $PBS_O_WORKDIR |
进入工作目录 $PBS_O_WORKDIR |
mp i run -np 40 -machinefile $PBS_NODEFILE - -mca btl self,openib,sm ./test_OMP_MPI |
运行 test_OMP_MPI 可执行文件,指定 40 个线程,以及所用的节点名, 并指定共享内存,和用InfiniBand 网络计算 |
该类作业为OpenMP+MPI混合并行方式的作业,请用户注意用户设定的核心数数值不应该超出队列中单节点的物理核心数。
4、其它类型的作业提交
集群系统除了刀片服务器外,还包括胖节点,mic节点和gpu节点。对于胖节点,mic节点和gpu节点上的作业提交,需要用户选择合适的队列提交作业(作业队列必须包含用户打算使用的节点)。其用户自身的计算程序需要支持自身的资源需求,也就是gpu队列上提交的作业,计算程序需要支持gpu,胖节点队列上提交的作业,计算程序需要支持胖节点;mic队列上提交的作业,计算程序需要支持mic节点。
5、更多pbs脚本示例参考:/public/software/pbs_examples目录
6、公共队列
队列名 |
节点类型 |
核数限制 |
节点数限制 |
Walltime |
blades |
刀片节点 |
≥16 |
无 |
<72小时 |
long |
刀片节点 |
≥8 |
无 |
>120小时 |
free |
刀片节点 |
≤4 |
<=2 |
<20分钟 |
short |
刀片节点 |
≥8 |
无 |
<24小时 |
fat1t |
胖节点 |
≥8 |
1 |
不限 |
fat4t |
胖节点 |
≥8 |
1 |
不限 |
注:中心接到紧急任务时,short队列资源优先回收,执行流程是:停止提交新作业,排队中的作业予以撤销,计算中的作业继续运行至正常结束。
7、胖节点、GPU、MIC等特殊资源的使用须另行申请。