pbs 查看队列计算核限制

2018-12-19  本文已影响0人  不想当社畜

超算上一般都是使用PBS的作业管理系统对提交的作业进行资源分配和利用的管理.

队列计算核限制问题

在使用超算的过程中,因为不知道队列的核数限制(主要还是不太懂pbs工作的原理),如何知道提交的计算资源是否超过了队列的限制?


我今天使用学校的超算free队列进行测试。

测试

官方宣称队列最多只能进行2个节点,每个节点只能进行2个核的计算.
下面使用超算mpi环境安装和使用使用到的简单的测试代码.

先使用官方宣称的资源进行测试:2个节点,每个节点2个计算核.
对应的pbs(free.pbs)文件如下:

2节点2核

#PBS -N test
#PBS -l nodes=2:ppn=2
#PBS -j oe
#PBS -q free
#PBS -l walltime=0:05:0

cd $PBS_O_WORKDIR 
JOBID=`echo $PBS_JOBID | awk -F. '{print $1}'`
echo This job id is $JOBID | tee job_info.log
echo Working directory is $PBS_O_WORKDIR | tee -a job_info.log
echo Start time is `date` | tee -a job_info.log 
echo This job runs on the following nodes: | tee -a job_info.log
echo `cat $PBS_NODEFILE | sort | uniq` | tee -a job_info.log
NPROCS=`cat $PBS_NODEFILE | wc -l`
NNODES=`uniq $PBS_NODEFILE | wc -l`
PPROCS=$(($NPROCS/$NNODES))
echo This job has allocated $NNODES nodes, $NPROCS processors.| tee -a job_info.log

uniq $PBS_NODEFILE | sort | sed s/$/i:$PPROCS/ > $PBS_O_WORKDIR/hostfile

#source your profile
MPIRUN="mpiexec -np $NPROCS -f $PBS_O_WORKDIR/hostfile -env I_MPI_DEVICE=rdma"
JOBCMD="./a.out"
{ time $MPIRUN $JOBCMD; } >$PBS_O_WORKDIR/output_$JOBID.log 2>&1

echo End time is `date`| tee -a job_info.log
rm -f  $PBS_O_WORKDIR/hostfile
pkill -P $$
exit 0

之后提交进行计算

*****@login5:[/public/home/********/code/temp]ls
a.out  free.pbs  main.c  
# 提交
*****@login5:[/public/home/********/code/temp]qsub free.pbs 
360237.admin-ha
# 提交成功 查看作业信息
*****@login5:[/public/home/********/code/temp]qstat -a
360237.admin-ha         zh****g    free             test              30894     2      4    --   00:05:00 C       -- 
# 计算完成 查看计算结果
*****@login5:[/public/home/********/code/temp]ls
a.out  free.pbs  job_info.log  main.c  output_360237.log  test.o360237
# 输出结果
*****@login5:[/public/home/********/code/temp]cat output_360237.log 
hello world from process 0 of size 4   -- name c1137 .
hello world from process 1 of size 4   -- name c1137 .
hello world from process 2 of size 4   -- name c1138 .
hello world from process 3 of size 4   -- name c1138 .

real    0m0.865s
user    0m0.043s
sys 0m0.028s

上述操作完成后,说明使用2个节点的2核计算是成功的.

3节点2核

尝试使用3个节点,每个节点2个计算核.
只需要将之前的free.pbs文件的第二行修改为:

#PBS -l nodes=3:ppn=2

进行提交计算:

# 提交计算
*****@login5:[/public/home/********/code/temp]qsub free.pbs 
360245.admin-ha
# 提交成功 查看队列情况
# 数据表示意思分别是
# 作业id号    用户名(隐私用**)   提交的队列名称   作业名称(在pbs文件中指定)    ---   3代表3个节点    6代表一共3*2个计算核   时间限制5分钟   目前作业运行情况Q(等待),R(正在执行)
*****@login5:[/public/home/********/code/temp]qstat -a
360245.admin-ha         zh****g    free             test                --      3      6    --   00:05:00 Q       --

发现提交的队列一直属于等待状态(Q),故删除该队列.

*****@login5:[/public/home/********/code/temp]qdel 360245

上述发现学校官方的数据不太准确,不是说好这个队列只支持2个节点,每个节点,最大限制是2个核吗?
暂时先不管之后再解决这个问题.

在进行如下测试:

2节点5核

同样修改对应的free.pbs文件

#PBS -l nodes=2:ppn=5

进行如下操作:

*****@login5:[/public/home/********/code/temp]qsub free.pbs 
qsub: submit error (Job exceeds queue resource limits MSG=cannot satisfy queue max procct requirement)

提交作业不成功,说明该队列对核数进行了限制.此时提交的2*5=10计算核超过了该队列的上限.


上述测试证实了当提交的计算核超过该队列支持的最大上限时,是不能提交作业成功的,直接提示作业错误.

如何查看队列的最大核数呢?

# 查看超算上一共有多少个队列 
# 对应的参数分别代表的含义
# 队列名称(Queue)  最大同时执行作业数(Max)   当前总共提交的作业数(Tot)  (Ena)(Str) 应该代表该队列是否激活  当前队列下等待的作业数(Que) 当前队列下正在执行的作业数(Run)
*****@login5:[/public/home/********/code/temp]qstat -Q  
Queue              Max    Tot   Ena   Str   Que   Run   Hld   Wat   Trn   Ext T   Cpt
----------------   ---   ----    --    --   ---   ---   ---   ---   ---   --- -   ---
gpu_test           200      0   yes   yes     0     0     0     0     0     0 E     0
mic_phy1           200      0    no    no     0     0     0     0     0     0 E     0
long               150    163   yes   yes    65    98     0     0     0     0 E     0
low                200      0   yes   yes     0     0     0     0     0     0 E     0
blades             300    274   yes   yes   206    67     0     0     0     0 E     1
fat4t                0      0    no    no     0     0     0     0     0     0 E     0
fat1t                0     75   yes   yes    56    19     0     0     0     0 E     0
free                20      1   yes   yes     0     0     0     0     0     0 E     1
gpu536             200      5   yes   yes     2     1     0     0     0     0 E     2
single              20      0   yes   yes     0     0     0     0     0     0 E     0
short               40     42   yes   yes    31    11     0     0     0     0 E     0
yxma_256           200      0    no    no     0     0     0     0     0     0 E     0
mic_asc            200      0   yes   yes     0     0     0     0     0     0 E     0
lzz_973            200      0   yes   yes     0     0     0     0     0     0 E     0
defaultApp           0      0   yes   yes     0     0     0     0     0     0 E     0
little               0     93   yes   yes    57    35     0     0     0     0 E     1
c536                 0      7   yes   yes     4     3     0     0     0     0 E     0
f536                 0      4   yes   yes     1     3     0     0     0     0 E     0
c561                 0      4   yes   yes     0     4     0     0     0     0 E     0

此时看到了熟悉的free队列,查看free队列详细的信息.

*****@login5:[/public/home/********/code/temp]qstat -Qf free
Queue: free
    queue_type = Execution
    max_user_queuable = 5
    total_jobs = 0
    state_count = Transit:0 Queued:0 Held:0 Waiting:0 Running:0 Exiting:0 Comp
    lete:0 
    max_running = 20
    acl_host_enable = False
    acl_hosts = c1138,c1137
    acl_user_enable = False
    resources_max.procct = 8
    resources_max.walltime = 00:20:00
    resources_default.walltime = 00:20:00
    mtime = 1544882636
    resources_assigned.nodect = 0
    max_user_run = 10
    enabled = True
    started = True

其中:

    resources_max.procct = 8 # 表示该队列最大支持8个计算核

当没有这条语句命令(resources_max.procct)的话,应该默认下该队列对计算核是不给限制的.

所以当我设置1个节点8个计算核提交成功,1个节点9个计算核则提交失败.


解释为什么官方说2个节点.

查看我们之前程序的输出结果:

hello world from process 0 of size 4   -- name c1137 .
hello world from process 1 of size 4   -- name c1137 .
hello world from process 2 of size 4   -- name c1138 .
hello world from process 3 of size 4   -- name c1138 .

恰好是该队列指定的2个节点名称.

 acl_hosts = c1138,c1137

解释为什么使用3个节点提交计算也能成功.

原因猜想的,该队列没有对节点进行限制,但指定了特定的节点( acl_hosts = c1138,c1137),意思可能是当该队列提交任务时,优先使用这些节点进行计算,当节点数不够时,再去找其他空余的节点进行操作.


pbs具体的使用还是得看帮助文档,无奈帮助文档太长,而且是英文的,看不下去,所有只能自己摸索下去,文中对有些概念的理解可能有误,官方为主.

上一篇下一篇

猜你喜欢

热点阅读