PBS作业管理系统是集群和超算上常用的作业管理系统之一,此外还有LSF和SLURM。在集群和超算使用作业管理系统对于任务的运行管理是非常方便的,可以有效的分配系统计算资源。

PBS常用命令

作业管理

  • qsub 提交作业命令

qsub 可以通过脚本提交任务,也可以交互式提交任务

  • 通过脚本提交任务

    pbs 在脚本中通常要设置以下参数,节点信息和cpu信息,运行的墙钟时间(实际运行时间),队列名称(如果有),任务名称,任务标准和错误输出等信息。

    1
    2
    3
    4
    5
    6
    
    #!/bin/bash
    #PBS -l nodes=2:ppn=16
    #PBS -l walltime=24:00:00
    #PBS -q high
    #PBS -N Job_Name
    #PBS -oe

    参数解释:

    • nodes 和 ppn : 分别设置节点和每个节点使用的核信息,可以直接设置节点数和核数,比如上面直接指定为2,则使用两个节点,也可以指定节点,16表示每个节点使用16个核。

    指定节点的节点名称可以通过 pbsnodes 查看可用节点信息,下图中的 cu01 和 cu02 即为节点名称, np 表示每个节点有多少个核。

    如果系统没有 pbsnodes 命令可用,也可以执行 以下命令查看,因为本质上节点名称是对 ip 地址的映射,所有的映射关系都存储在 /ets/hosts 文件中

    1
    
      vi /etc/hosts

    知道节点之后,可以指定节点运行作业:

    1
    
      #PBS -l nodes=cu01:ppn=20+cu02:ppn=20

    这里节点之间使用 + 连接,ppn 对应的是每个节点使用多少个核,如果 ppn 超出了单个节点核的总数则会报错。

    注意: 这里的 ppn 可以低于20。

    • walltime: 表示墙钟时间,即作业最长运行多长时间,这里设置为24小时,具体根据作业实际运行需要设置。

    注意:有些集群管理系统对不同类型的作业进行了墙钟时长的限制,这个需要了解管理员配置的参数信息。

    • -q : 任务队列信息,通常用于区分不同的任务类型

    • -N:任务名称,可以任意设置,最好根据任务的内容来设置,便于区分

    • -oe:作业运行情况标准输出和标准错误输出,一般位作业名+e/o+作业号,-o 和 -e 可以单独设置,并且指定输出文件名称

    1
    2
    
      #PBS -o example.stdout
      #PBS -e example.stderr

除了上述列出的参数外,还有一些参数可以设置,但一般不需要设置。比如任务所需要的内存和cpu等信息。

完整的脚本示例 qsub_wrf.sh:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  #!/bin/csh -f
  
  #PBS -N WRF
  #PBS -l nodes=cu01:ppn=12+cu03:ppn=12
  #PBS -j oe
  #PBS -l walltime=24:00:00
  
  cd $PBS_O_WORKDIR
  setenv NPROCS `cat $PBS_NODEFILE | wc -l`
  
  ./run.wrf

可以通过以下命令提交任务:

1
  qsub qsub_wrf.sh
  • 交互式提交任务

    交互式提交即是直接使用qsub指定参数提交

    1
    
    qsub -N WRF -l nodes=cu02+cu04:ppn=20 -l walltime=24:00:00 ./run.wrf
  • 查看作业信息

    • qstat -a : 列出所有作业信息
    • qstat -n :列出所有作业信息以及每个作业所使用的节点信息
    • qstat -q :列出所有队列信息
    • qstat -u user_name:列出指定用户的作业信息
    • qstat -r:列出所有正在运行的作业
    • qstat -f job_id:列出指定任务id的信息
    • pestat:列出所有节点的状态
  • 删除作业

    • qdel job_id:删除指定任务id的作业
    • qsig :通过信号控制作业

update: 2018-11-26 更改指定多节点运行设置

参考链接:

  1. https://www.jianshu.com/p/2f6c799ca147
  2. https://kevinzjy.github.io/2018/08/13/180813-Server-PBS/