PBS 作業管理系統

本文從本人簡書博客同步過來

上一篇中我們非常簡單地介紹了在 C 語言中嵌入 mpi4py 程序的方法。

前面我們所給出的各個例程一般都是在單臺計算機上直接使用 mpiexec 或 mpirun 執行的,但是在實際應用中,對規模比較大的高性能計算任務,一般會提交到集羣或超級計算機平臺上進行計算。集羣系統具有低成本、高性能的特性,提供了強大的批處理和並行計算能力,代表了高性能計算機發展的新方向。在集羣或者超級計算機平臺上,一般不能隨意地直接以 mpiexec 或 mpirun 運行我們的並行計算程序,而必須通過其上提供的作業管理系統來提交計算任務。作爲集羣系統軟件的重要組成部分,集羣作業管理系統可以根據用戶的需求,統一管理和調度集羣的軟硬件資源,保證用戶作業公平合理地共享集羣資源,提高系統利用率和吞吐率。下面我們將簡要地介紹幾個常用的集羣作業管理系統:PBS,LSF 和 SLURM。下面我們首先簡要介紹 PBS 作業管理系統。

PBS 簡介

PBS (Protable Batch System) 作業管理系統會根據一個集羣上的可用計算節點的計算資源管理和調度所有計算作業(無論是批處理作業還是交互式作業)。

PBS 常用命令

作業控制

  • qsub:提交作業
  • qdel:取消作業
  • qsig:給作業發送信號
  • qhold:掛起作業
  • qrls:釋放掛起的作業
  • qrerun:重新運行作業
  • qmove:將作業移動到另一個隊列
  • qalter: 更改作業資源屬性

作業監測

  • qstat:顯示作業狀態
  • showq: 查看所有作業

節點狀態

  • pbsnodes:列出集羣中所有節點的狀態和屬性

PBS 作業屬性

可以用兩種方式設置 PBS 作業屬性:

  • 通過命令行參數傳遞給 qsub 命令;
  • 在 PBS 腳本中以 #PBS 方式指定。

下表列出常用的 PBS 作業屬性

屬性 取值 說明
-l 以逗號分隔的資源列表 設定作業所需資源
-N 作業名稱 設定作業名稱
-o 文件路徑 設定作業的標準輸出文件路徑
-e 文件路徑 設定作業的標準錯誤文件路徑
-p -1024 到 +1023 之間的整數 設定作業優先級,越大優先級越高
-q 隊列名稱 設定作業隊列名稱

比較常用的作業資源如下:

資源 取值 說明
nodes 節點資源構型 設定作業所需計算節點資源
walltime hh:mm:ss 設定作業所需的最大 wallclock 時間
cput hh:mm:ss 設定作業所需的最大 CPU 時間
mem 正整數,後面可跟 b,kb,mb,gb 設定作業所需的最大內存
ncpus 正整數 設定作業所需的 CPU 數目

可以用以下方法設定節點資源構型:

  1. 設定所需節點數:

    nodes=<num nodes>

  2. 設定所需節點數和每個節點上使用的處理器數目:

    nodes=<num nodes>:ppn=<num procs per node>

  3. 設定所用的節點:

    nodes=<list of node names separated by ‘+’>

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_QUEUE 提交的作業的最初隊列名稱
PBS_O_WORKDIR 執行 qsub 命令所在的絕對路徑

提交批處理作業

用以下命令形式提交批處理作業:

$ qsub [options] <control script>

作業提交後一般會先排隊等待,PBS 系統會根據作業的優先級和可用的計算資源來調度和執行作業。

PBS 腳本本質上是一個 Linux shell 腳本,在 PBS 腳本中可以用一種特殊形式的註釋(#PBS)作爲 PBS 指令以設定作業屬性。下面是一個 PBS 腳本示例:

#!/bin/bash

# file: example.pbs

### set job name
#PBS -N example-job
### set output files
#PBS -o example.stdout
#PBS -e example.stderr
### set queue name
#PBS -q example-queue
### set number of nodes
#PBS -l nodes=2:ppn=4

# enter job's working directory
cd $PBS_O_WORKDIR

# get the number of processors
NP=`cat $PBS_NODEFILE | wc -l`

# run an example mpi4py job
mpirun -np $NP -machinefile $PBS_NODEFILE python example_mpi4py.py

用以下命令提交該作業:

$ qsub example.pbs

取消或停止作業

要取消或停止一個作業,需要得到該作業的作業標識號 ,可以通過 qstat 命令獲得。

取消排隊等待的作業

取消一個正在排隊等待的作業,可用以下命令:

$ qdel <job ID >

停止正在運行的作業

要停止一個正在運行的作業,可用向其發送 KILL 信號:

$ qsig -s KILL <job ID>

交互式作業

交互式的計算作業通過類似於下面的命令使用:

$ qsub -I [options]

例如要求 2 臺計算節點,運行在 example-queue 隊列上的交互式作業,執行如下命令:

$ qsub -I -l nodes=2 -q example-queue

執行完以上命令,等 PBS 系統分配好資源後會進入所分配的第一臺計算節點,可在其命令終端上執行交互式的計算任務,如要退出交互作業,可在終端輸入 exit 命令,或使用按鍵 Ctrl+D。

以上簡要介紹了 PBS 作業管理系統,在下一篇中我們將介紹 LSF 作業管理系統。

發佈了101 篇原創文章 · 獲贊 9 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章