在實際應用中,對規模比較大的高性能計算任務,一般會提交到集群或超級計算機平台上進行計算。
集群系統具有低成本、高性能的特性,提供了強大的批處理和並行計算能力,代表了高性能計算機發展的新方向。
在集群或者超級計算機平台上,一般不能隨意地直接以 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 數目 |
可以用以下方法設定節點資源構型:
-
設定所需節點數:
nodes=<num nodes>
-
設定所需節點數和每個節點上使用的處理器數目:
nodes=<num nodes>:ppn=<num procs per node>
-
設定所用的節點:
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
取消或停止作業
要取消或停止一個作業,需要得到該作業的作業標識號 <job ID >,可以通過 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。
LSF 作業管理系統。
簡介
LSF (Load Sharing Facility)是一個被廣泛使用的作業管理系統,具有高吞吐、配置靈活的優點。
通過 LSF 集中監控和調度,可以充分利用計算機的CPU、內存、磁盤等資源。
常用命令
- bqueues:查看計算隊列
- bhosts:查看計算節點列表
- lsload:查看負載
- bsub:提交作業
- bjobs:查看作業狀態
- bkill:終止作業
- bpeek:查看作業的標准輸出
- bhist:作業歷史信息
作業提交bsub
bsub調用方法
可以通過以下三種方法使用 bsub 來提交作業:
- 直接在命令行中輸入完整參數:
- 進入 bsub 環境交互提交:
- 編寫作業提交腳本供 bsub 處理。
直接輸入完整參數
可以直接在 bsub 的命令行中輸入完整的參數來提交一個作業,比如:
$ bsub -n 4 -q example-queue -o example.out ./example "-input data.txt"
其中所用的參數說明如下:
- -n 指定所需的處理器數目;
- -q 指定作業運行的隊列;
- -o 指定作業運行信息的輸出文件;
- "-input data.txt" 是傳遞給執行程序 example 的命令行參數。
這種方式比較適合提交簡單的作業,更復雜的作業控制需要編寫作業腳本。
使用作業提交腳本
LSF 作業腳本本質上也是一個 shell 腳本,在其中可以用 #BSUB開頭的行來指明 bsub作業參數。下面是一個 LSF 作業腳本示例:
# example.lsf #BSUB -L /bin/bash #BSUB -J example-mpi4py #BSUB -q example-queue #BSUB -n 4 #BSUB -o example.out #BSUB -e example.err mpirun python example-mpi4py.py
其中各參數說明如下:
- -L 指明所用的執行 shell,默認會調用 /bin/sh 執行腳本;
- -J 指定作業名;
- -q 指定作業隊列;
- -n 指定作業所需的進程數;
- -o 指定作業的標准輸出文件;
- -e 指定作業的錯誤輸出文件。
提交作業腳本,使用下面的命令:
$ bsub < example.lsf
交互式提交
在終端中輸入 bsub 並回車后會進入 bsub 交互環境,在其中可輸入作業參數和執行作業程序。在 bsub 交互環境下可以一次提交多個參數相同的作業,例如:
$ bsub bsub> -n 4 bsub> -q example-queue bsub> -o example.out bsub> PROG1 bsub> PROG2 bsub> PROG3 bsub> Ctrl+D
使用 Ctrl+D 可退出 bsub 交互環境。
查看作業信息
可以用 bjobs 命令查看用戶正在運行中的作業:
$ bjobs
使用 -l參數和某個作業的 JOBID,可以查看該作業的詳細信息:
$ bjobs -l JOBID
中止作業
使用 bkill 命令中止某個作業:
$ bkill JOBID
SLURM 資源管理系統。
簡介
SLURM (Simple Linux Utility for Resource Management)是一種可用於大型計算節點集群的高度可伸縮和容錯的集群管理器和作業調度系統,被世界范圍內的超級計算機和計算集群廣泛采用。
SLURM 維護着一個待處理工作的隊列並管理此工作的整體資源利用。它以一種共享或非共享的方式管理可用的計算節點(取決於資源的需求),以供用戶執行工作。
SLURM 會為任務隊列合理地分配資源,並監視作業至其完成。如今,SLURM 已經成為了很多最強大的超級計算機上使用的領先資源管理器,如天河二號上便使用了 SLURM 資源管理系統。
常用命令
下面是一些最常用的 SLURM 命令:
- sacct:查看歷史作業信息
- salloc:分配資源
- sbatch:提交批處理作業
- scancel:取消作業
- scontrol:系統控制
- sinfo:查看節點與分區狀態
- squeue:查看隊列狀態
- srun:執行作業
常用環境變量
下表是 SLURM 環境變量:
變量 | 說明 |
---|---|
SLURM_NPROCS | 要加載的進程數 |
SLURM_TASKS_PER_NODE | 每節點要加載的任務數 |
SLURM_JOB_ID | 作業的 JobID |
SLURM_SUBMIT_DIR | 提交作業時的工作目錄 |
SLURM_JOB_NODELIST | 作業分配的節點列表 |
SLURM_JOB_CPUS_PER_NODE | 每個節點上分配給作業的 CPU 數 |
SLURM_JOB_NUM_NODES | 作業分配的節點數 |
HOSTNAME | 對於批處理作業,此變量被設置為批處理腳本所執行節點的節點名 |
資源管理系統實體
SLURM 資源管理系統的管理對象包括:節點,分區,作業和作業步。
-
節點:Node
- 即指計算節點
- 包含處理器、內存、磁盤空間等資源
- 具有空閑、分配、故障等狀態
- 使用節點名字標識
-
分區:Partition
- 節點的邏輯分組
- 提供一種管理機制,可設置資源限制、訪問權限、優先級等
- 分區可重疊,提供類似於隊列的功能
- 使用分區名字標識
-
作業:Job
- 一次資源分配
- 位於一個分區中,作業不能跨分區
- 排隊調度后分配資源運行
- 通過作業 ID 標識
-
作業步:Jobstep
- 通過 srun 進行的任務加載
- 作業步可只使用作業中的部分節點
- 一個作業可包含多個作業步,可並發運行
- 在作業內通過作業步 ID 標識
作業運行模式
SLURM 系統有三種作業運行模式:
- 交互模式,以 srun 命令運行;
- 批處理模式,以 sbatch 命令運行;
- 分配模式,以 salloc 命令運行。
交互模式
交互模式作業的使用過程為:
- 在終端提交資源分配請求,指定資源數量與限制;
- 等待資源分配;
- 獲得資源后,加載計算任務;
- 運行中,任務 I/O 傳遞到終端;
- 可與任務進行交互,包括 I/O,信號等;
- 任務執行結束后,資源被釋放。
例如使用 srun 申請 4 個進程生成一個作業步:
$ srun -n 4 ./example
批處理模式
批處理模式作業的使用過程為:
- 用戶編寫作業腳本;
- 提交作業;
- 作業排隊等待資源分配;
- 分配資源后執行作業;
- 腳本執行結束,釋放資源;
- 運行結果定向到指定的文件中記錄。
下面給出作業腳本示例:
#!/bin/env bash # file: example.sh # set the number of nodes #SBATCH --nodes=2 # set the number of tasks (processes) per node #SBATCH --ntasks-per-node=4 # set partition #SBATCH --partition=example-partition # set max wallclock time #SBATCH --time=2:00:00 # set name of job #SBATCH --job-name=example-mpi4py # set batch script's standard output #SBATCH --output=example.out # mail alert at start, end and abortion of execution #SBATCH --mail-type=ALL # send mail to this address #SBATCH --mail-user=user@mail.com # run the application srun python example-mpi4py.py
用以下命令提交批處理作業:
$ sbatch example.sh
分配模式
分配模式作業的使用過程為:
- 提交資源分配請求;
- 作業排隊等待資源分配;
- 執行用戶指定的命令;
- 命令執行結束,釋放資源。
分配模式通過 salloc 命令運行,舉例如下(使用 2 個節點,4 個進程,預計運行時間 100 秒):
$ salloc -N 2 -n 4 -p example-partition -t 100 /bin/bash
資源分配請求成功后會進入 bash shell 終端,在其中可以使用 srun 交互式地執行作業任務。在終端輸入 exit 命令或 Ctrl+D 退出分配模式。
天河二號上的 SLURM 管理系統
天河二號上使用的是 SLURM 資源管理系統,不過天河二號上使用的 SLURM 命令都是將標准的 SLURM 命令開頭的 s 改成了 yh,如下:
- yhacct:查看歷史作業信息
- yhalloc:分配資源
- yhbatch:提交批處理作業
- yhcancel:取消作業
- yhcontrol:系統控制
- yhinfo/yhi:查看節點與分區狀態
- yhqueue/yhq:查看隊列狀態
- yhrun:執行作業
來源:
https://www.jianshu.com/p/2f6c799ca147