1 集群常用概念
Resource
:資源,作業(yè)運行過程中使用的可量化實體,包括硬件資源(節(jié)點、內(nèi)存、CPU、GPU)和軟件資源(License)Cluster
:集群,包含計算、存儲、網(wǎng)絡(luò)等各種資源實體且彼此聯(lián)系的資源集合,物理上一般由計算處理、互聯(lián)通信、I/O存儲、操作系統(tǒng)、編譯器、運行環(huán)境、開發(fā)工具等多個軟硬件子系統(tǒng)組成。Node
:節(jié)點,是集群的基本組成單位,從角色上一半可以劃分為管理節(jié)點、登錄節(jié)點、計算節(jié)點、存儲節(jié)點等。job
:作業(yè),物理構(gòu)成,一組關(guān)聯(lián)的資源分配請求,以及一組關(guān)聯(lián)的處理過程。按交互方式,可以分為交互式作業(yè)和非交互式作業(yè);按資源使用,可以分為串行作業(yè)和并行作業(yè)。queue
:隊列,帶名稱的作業(yè)容器,用戶訪問控制,資源使用限制。Job Schedule System
:作業(yè)調(diào)度系統(tǒng),負責(zé)監(jiān)控和管理集群中資源和作業(yè)的軟件系統(tǒng)。job step
:作業(yè)步,單個作業(yè)可以有多個作業(yè)步。partition
:分區(qū),根據(jù)用戶的權(quán)限,作業(yè)需要被提交到特定的分區(qū)中運行。tasks
:任務(wù)數(shù),默認(rèn)一個任務(wù)使用一個CPU核,可理解為job需要的CPU核數(shù)。
2 Slurm常用基本命令
sbatch
:提交作業(yè)腳本使其運行。squeue
:顯示隊列中的作業(yè)及作業(yè)狀態(tài)。scancel
:取消排隊或運行中的作業(yè)。sinfo
:顯示節(jié)點狀態(tài)。scontrol
:現(xiàn)實或設(shè)定slurm作業(yè)、隊列、節(jié)點等狀態(tài)。salloc
:為實時處理的作業(yè)分配資源:典型場景為分配資源并啟動一個shell,然后用此shell執(zhí)行srun命令去執(zhí)行并行任務(wù)。srun
:交互式運行并行作業(yè),一般用于短時間測試。
3 Slurm作業(yè)提交
slurm 有三種模式提交作業(yè),分別為交互模式
,批處理模式
,分配模式
,這三種方式只是作業(yè)提交方式的區(qū)別,在管理、調(diào)度、機時計算同等對待。
一般使用批處理模式提交作業(yè),其他兩種模式這里不進行詳細介紹。
3.1 交互模式:srun
交互式作業(yè)提交,提交命令后,等待作業(yè)執(zhí)行完成之后返回命令行操作界面。
3.2 批處理模式:sbatch
- 批處理模式是指用戶編寫作業(yè)腳本,指定作業(yè)需要的資源,提交后臺執(zhí)行作業(yè)
- 作業(yè)提交后進入調(diào)度狀態(tài),在資源滿足要求時,分配計算節(jié)點
- 分配到計算資源后,自動在計算節(jié)點執(zhí)行用戶所編輯的腳本內(nèi)的命令,sbatch 命令提交作業(yè),終端斷開連接作業(yè)依然在后臺運行束,直到腳本執(zhí)行結(jié)束作業(yè)自動退出 (或者在作業(yè)運行時執(zhí)行 scancel 命令取消作業(yè)后作業(yè)自動停止)
- 批處理作業(yè)的腳本為一個bash或sh文本文件
- 計算開始后,工作目錄中會生成以
slurm-作業(yè)號.out
文件,為作業(yè)的輸出
常見資源需求參數(shù),使用SBATCH -xx xxx
寫入作業(yè)腳本中:
-N, --nodes=N #指定節(jié)點數(shù)量
-o, --output=out_filename #指定輸出文件輸出
-p, --partion=debug #指定分區(qū)
-t, --time=dd-hh:mm:ss #作業(yè)最大運行時間
--mem:指定每個節(jié)點上使用的物理內(nèi)存
--begin:指定作業(yè)開始時間
-D,--chdir:指定腳本/命令的工作目錄
-c, --cpu-per-task=NCPUs #指定每個進程使用核數(shù),不指定默認(rèn)為1
-e, --error=error_filename #指定錯誤文件輸出
-J, --job-name=JOBNAME #指定作業(yè)名稱
--mail-type=END/FAIL/ALL #郵件提醒,可選:END,FAIL,ALL
--mail-user=mail_address #通知郵箱地址
-n, --ntask=NTASKs #指定總進程數(shù);不使用cpus-per-task,可理解為進程數(shù)即為核數(shù)
--ntask-per-node=N #指定每個節(jié)點進程數(shù)/核數(shù),使用-n參數(shù)后變?yōu)槊總€節(jié)點最多運行的進程數(shù)
-w, --nodelist=node[1,2] #指定優(yōu)先使用節(jié)點,不可與避免節(jié)點沖突
-x, --exclude=node[3,5-6] #指定避免使用節(jié)點,不可與優(yōu)先節(jié)點沖突
--mem-per-cpu=MB #指定計算cpu最大占用內(nèi)存大小
示例文件:
#!/bin/bash
#提交單個作業(yè)
#SBATCH --job-name=JOBNAME %指定作業(yè)名稱
#SBATCH --partition=debug %指定分區(qū)
#SBATCH --nodes=2 %指定節(jié)點數(shù)量
#SBATCH --cpus-per-task=1 %指定每個進程使用核數(shù),不指定默認(rèn)為1
#SBATCH -n 32 %指定總進程數(shù);不使用cpus-per-task,可理解為進程數(shù)即為核數(shù)
#SBATCH --ntasks-per-node=16 %指定每個節(jié)點進程數(shù)/核數(shù),使用-n參數(shù)(優(yōu)先級更高),變?yōu)槊總€節(jié)點最多運行的任務(wù)數(shù)
#SBATCH --time=240:00:00 %作業(yè)最大運行時長,參考格式填寫
#SBATCH --output=file_name %指定輸出文件輸出
#SBATCH --error=file_name %指定錯誤文件輸出
#SBATCH --mail-type=ALL %郵件提醒,可選:END,FAIL,ALL
#SBATCH --mail-user=address %通知郵箱地址
module load apps/anaconda3/2021.05 # 加載anaconda
source activate torch1.8.1 # 加載anaconda虛擬環(huán)境
python main.py --no_static=True --model=lstm --seed=100 train_basins # 執(zhí)行python腳本
命令行輸入sbatch 作業(yè)腳本名
提交作業(yè)
sbatch filename
3.3 分配模式:salloc
程序部署完成后的驗證性測試、調(diào)試。推薦在不確定程序是否能夠正常運行時使用此流程進行測試。此方法終端中斷后程序作業(yè)即退出運行,正式提交作業(yè)不推薦使用此方法。
此模式支持用戶在提交作業(yè)前搶占所需要的計算資源,此時開始計算機時。程序運行完成后作業(yè)不會自動停止,直到退出終 端或 scancel 取消作業(yè)后作業(yè)才會停止,才會停止計費。
終端斷開作業(yè)會立刻停止,如果作業(yè)未運行完成時終端斷開會導(dǎo)致任務(wù)運 行中斷。
執(zhí)行分為三步:
(1) 提交資源分配請求,等待資源分配,資源分配到后開始計費
(2) 執(zhí)行用戶指定的命令
(3) 退出作業(yè)釋放資源,停止計費
4 節(jié)點及作業(yè)列表查詢
4.1 節(jié)點信息查看
sinfo # 查看所有分區(qū)狀態(tài)
sinfo -a # 查看所有分區(qū)狀態(tài)
sinfo -N # 查看節(jié)點狀態(tài)
sinfo -n node-name # 查看指定節(jié)點狀態(tài)
sinfo --help # 查看幫助信息
# 節(jié)點狀態(tài)信息
alloc:節(jié)點滿載
idle:節(jié)點空閑
mix:節(jié)點部分被占用
down:節(jié)點下線
drain:節(jié)點故障
4.2 作業(yè)列表查詢
squeue # 查看運行中作業(yè)列表
squeue -l # 查看列表細節(jié)信息
squeue -j job-id # 查看指定運行中的作業(yè)信息
# 作業(yè)狀態(tài)
R:正在運行
PD:正在排隊
CG:已完成
CD:已完成
4.3 查看作業(yè)的CPU、GPU使用情況
一般通過squeue
查看作業(yè)所在的節(jié)點id,通過ssh 節(jié)點id
連接作業(yè)所在節(jié)點,使用top
命令查看節(jié)點的CPU使用情況,使用top nvidia-smi
查看節(jié)點的GPU使用情況,使用nvidia-smi -l 刷新間隔秒數(shù)
可設(shè)置顯示的刷新頻率。
5 作業(yè)信息查詢及更新
5.1 作業(yè)信息查看
scontrol show job JOBID #查看作業(yè)的詳細信息
scontrol show node #查看所有節(jié)點詳細信息
scontrol show node node-name #查看指定節(jié)點詳細信息
scontrol show node | grep CPU #查看各節(jié)點cpu狀態(tài)
scontrol show node node-name | grep CPU #查看指定節(jié)點cpu狀態(tài)
5.2 更新作業(yè)信息
作業(yè)提交后,但相關(guān)作業(yè)屬性錯誤,取消任務(wù)修改作業(yè)后需要重新排隊,在作業(yè)運行開始前可以使用scontrol
更新作業(yè)的運行屬性。文章來源:http://www.zghlxwxcb.cn/news/detail-450792.html
scontrol update jobid=JOBID ATTRIBUTE=INFO # ATTRIBUTE為下列屬性名,INFO修改的屬性值
partition=<name>
name=<name>
numcpus=<min_count-max_count>
numnodes=<min_count-max_count>
numtasks=<count>
reqnodelist=<nodes>
reqcores=<count>
nodelist=<nodes>
excnodelist=<nodes>
starttime=yyyy-mm-dd
timelimit=d-h:m:s
mincpusnode=<count>
minmemorycpu=<megabytes>
minmemorynode=<megabytes>
6 終止作業(yè)
scancel JOBID # 終止作業(yè)
7 參考文獻
[1] https://blog.csdn.net/nixiang_888/article/details/121405854文章來源地址http://www.zghlxwxcb.cn/news/detail-450792.html
到了這里,關(guān)于Slurm作業(yè)提交、查詢、修改等常用命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!