美文网首页
pbs 查看队列计算核限制

pbs 查看队列计算核限制

作者: 不想当社畜 | 来源:发表于2018-12-19 15:25 被阅读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具体的使用还是得看帮助文档,无奈帮助文档太长,而且是英文的,看不下去,所有只能自己摸索下去,文中对有些概念的理解可能有误,官方为主.

    相关文章

      网友评论

          本文标题:pbs 查看队列计算核限制

          本文链接:https://www.haomeiwen.com/subject/cvcjkqtx.html