在上一篇中我們簡要介紹了 LSF 作業(yè)管理系統(tǒng),下面將介紹 SLURM 資源管理系統(tǒng)。
簡介
SLURM (Simple Linux Utility for Resource Management)是一種可用于大型計算節(jié)點集群的高度可伸縮和容錯的集群管理器和作業(yè)調(diào)度系統(tǒng),被世界范圍內(nèi)的超級計算機(jī)和計算集群廣泛采用。SLURM 維護(hù)著一個待處理工作的隊列并管理此工作的整體資源利用。它以一種共享或非共享的方式管理可用的計算節(jié)點(取決于資源的需求),以供用戶執(zhí)行工作。SLURM 會為任務(wù)隊列合理地分配資源,并監(jiān)視作業(yè)至其完成。如今,SLURM 已經(jīng)成為了很多最強大的超級計算機(jī)上使用的領(lǐng)先資源管理器,如天河二號上便使用了 SLURM 資源管理系統(tǒng)。
常用命令
下面是一些最常用的 SLURM 命令:
- sacct:查看歷史作業(yè)信息
- salloc:分配資源
- sbatch:提交批處理作業(yè)
- scancel:取消作業(yè)
- scontrol:系統(tǒng)控制
- sinfo:查看節(jié)點與分區(qū)狀態(tài)
- squeue:查看隊列狀態(tài)
- srun:執(zhí)行作業(yè)
常用環(huán)境變量
下表是 SLURM 環(huán)境變量:
| 變量 | 說明 |
|---|---|
| SLURM_NPROCS | 要加載的進(jìn)程數(shù) |
| SLURM_TASKS_PER_NODE | 每節(jié)點要加載的任務(wù)數(shù) |
| SLURM_JOB_ID | 作業(yè)的 JobID |
| SLURM_SUBMIT_DIR | 提交作業(yè)時的工作目錄 |
| SLURM_JOB_NODELIST | 作業(yè)分配的節(jié)點列表 |
| SLURM_JOB_CPUS_PER_NODE | 每個節(jié)點上分配給作業(yè)的 CPU 數(shù) |
| SLURM_JOB_NUM_NODES | 作業(yè)分配的節(jié)點數(shù) |
| HOSTNAME | 對于批處理作業(yè),此變量被設(shè)置為批處理腳本所執(zhí)行節(jié)點的節(jié)點名 |
資源管理系統(tǒng)實體
SLURM 資源管理系統(tǒng)的管理對象包括:節(jié)點,分區(qū),作業(yè)和作業(yè)步。
-
節(jié)點:Node
- 即指計算節(jié)點
- 包含處理器、內(nèi)存、磁盤空間等資源
- 具有空閑、分配、故障等狀態(tài)
- 使用節(jié)點名字標(biāo)識
-
分區(qū):Partition
- 節(jié)點的邏輯分組
- 提供一種管理機(jī)制,可設(shè)置資源限制、訪問權(quán)限、優(yōu)先級等
- 分區(qū)可重疊,提供類似于隊列的功能
- 使用分區(qū)名字標(biāo)識
-
作業(yè):Job
- 一次資源分配
- 位于一個分區(qū)中,作業(yè)不能跨分區(qū)
- 排隊調(diào)度后分配資源運行
- 通過作業(yè) ID 標(biāo)識
-
作業(yè)步:Jobstep
- 通過 srun 進(jìn)行的任務(wù)加載
- 作業(yè)步可只使用作業(yè)中的部分節(jié)點
- 一個作業(yè)可包含多個作業(yè)步,可并發(fā)運行
- 在作業(yè)內(nèi)通過作業(yè)步 ID 標(biāo)識
作業(yè)運行模式
SLURM 系統(tǒng)有三種作業(yè)運行模式:
- 交互模式,以 srun 命令運行;
- 批處理模式,以 sbatch 命令運行;
- 分配模式,以 salloc 命令運行。
交互模式
交互模式作業(yè)的使用過程為:
- 在終端提交資源分配請求,指定資源數(shù)量與限制;
- 等待資源分配;
- 獲得資源后,加載計算任務(wù);
- 運行中,任務(wù) I/O 傳遞到終端;
- 可與任務(wù)進(jìn)行交互,包括 I/O,信號等;
- 任務(wù)執(zhí)行結(jié)束后,資源被釋放。
例如使用 srun 申請 4 個進(jìn)程生成一個作業(yè)步:
$ srun -n 4 ./example
批處理模式
批處理模式作業(yè)的使用過程為:
- 用戶編寫作業(yè)腳本;
- 提交作業(yè);
- 作業(yè)排隊等待資源分配;
- 分配資源后執(zhí)行作業(yè);
- 腳本執(zhí)行結(jié)束,釋放資源;
- 運行結(jié)果定向到指定的文件中記錄。
下面給出作業(yè)腳本示例:
#!/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
用以下命令提交批處理作業(yè):
$ sbatch example.sh
分配模式
分配模式作業(yè)的使用過程為:
- 提交資源分配請求;
- 作業(yè)排隊等待資源分配;
- 執(zhí)行用戶指定的命令;
- 命令執(zhí)行結(jié)束,釋放資源。
分配模式通過 salloc 命令運行,舉例如下(使用 2 個節(jié)點,4 個進(jìn)程,預(yù)計運行時間 100 秒):
$ salloc -N 2 -n 4 -p example-partition -t 100 /bin/bash
資源分配請求成功后會進(jìn)入 bash shell 終端,在其中可以使用 srun 交互式地執(zhí)行作業(yè)任務(wù)。在終端輸入 exit 命令或 Ctrl+D 退出分配模式。
天河二號上的 SLURM 管理系統(tǒng)
天河二號上使用的是 SLURM 資源管理系統(tǒng),不過天河二號上使用的 SLURM 命令都是將標(biāo)準(zhǔn)的 SLURM 命令開頭的 s 改成了 yh,如下:
- yhacct:查看歷史作業(yè)信息
- yhalloc:分配資源
- yhbatch:提交批處理作業(yè)
- yhcancel:取消作業(yè)
- yhcontrol:系統(tǒng)控制
- yhinfo/yhi:查看節(jié)點與分區(qū)狀態(tài)
- yhqueue/yhq:查看隊列狀態(tài)
- yhrun:執(zhí)行作業(yè)
以上介紹了 SLURM 資源管理系統(tǒng),在下一篇中我們將介紹 MPI-3 的新特性。