SLURM 使用基礎教程
目錄
[隱藏]文檔概述[編輯 | 編輯源代碼]
文檔目的[編輯 | 編輯源代碼]
介紹 SLURM 基礎使用,幫助對 slurm 不了解的人快速入門。
術語與縮略語[編輯 | 編輯源代碼]
詞語 | 解釋 |
slurm | 一種作業調度系統的簡稱 |
作業 | 完成特定任務的命令序列 |
隊列 | 帶名稱的作業容器 |
Qos | Quality of Service |
管理節點 | 運行 slurm 管理進程(通常還包含調度進程)和數據庫的節點 |
計算節點 | 運行執行進程的節點 |
參考資料[編輯 | 編輯源代碼]
資料名稱 | 出版單位 | 作者 |
Quick Start Administrator Guide Man Pages Accounting Quality of Service (QOS) Resource Limits Generic Resource (GRES) Scheduling https://slurm.schedmd.com/ |
Slurm 官網 | Slurm |
Gridview 調度系統管理和使用 | 張濤 |
提交作業[編輯 | 編輯源代碼]
Slurm 提交作業有 3 種模式,分別為交互模式,批處理模式,分配模式,這三種方式只是用戶使用方式的區別,在管理,調度,記賬時同等對待。
交互模式[編輯 | 編輯源代碼]
命令 srun
簡介:交互式作業提交,提交命令后,等待作業執行完成之后返回命令行窗口。
示例
批處理模式[編輯 | 編輯源代碼]
命令 sbatch
簡介
批處理作業是指用戶編寫作業腳本,指定資源需求約束,提交后台執行作業。提交批處理作業的命令為 sbatch,用戶提交命令即返回命令行窗口,但此時作業在進入調度狀態,在資源滿足要求時,分配完計算結點之后,系統將在所分配的第一個計算結點(而不是登錄結點)上加載執行用戶的作業腳本。批處理作業的腳本為一個文本文件,腳本第一行以 “#!” 字符開頭,並制定腳本文件的解釋程序,如 sh,bash。由於計算節點為精簡環境,只提供 sh 和 bash 的默認支持。
計算開始后,工作目錄中會生成以 slurm 開頭的.out 文件為輸出文件。
示例 1 以腳本方式提交
[sugon@gpunode1 ~]$ sbatch sleep.job Submitted batch job 19 [sugon@gpunode1 ~]$ cat sleep.job #!/bin/bash #SBATCH -J sleep #SBATCH -p debug #SBATCH --time=1 #SBATCH -N 2 #SBATCH -n 2 #SBATCH -o logs/%j.sleep #SBATCH -e logs/%j.sleep echo ${SLURM_JOB_NODELIST} echo run.sh start on $(date) sleep 100 echo run.sh end on $(date) [sugon@gpunode1 logs]$ cat 19.sleep gpunode[1-2] run.sh start on 2017 年 08 月 10 日 星期四 11:00:59 CST run.sh end on 2017 年 08 月 10 日 星期四 11:02:39 CST |
示例 2 通過標准輸入將批處理腳本傳遞給 sbatch
[sugon@gpunode1 logs]$ sbatch <<EOF > #!/bin/bash > sleep 10 > EOF Submitted batch job 20 |
EOF 的解釋
“<<EOF EOF” 的作用是在命令執行過程中用戶自定義輸入,它類似於起到一個臨時文件的作用,只是比使用文件更方便靈活。
分配模式[編輯 | 編輯源代碼]
命令 salloc
簡介
結點資源搶占命令。該命令支持用戶在提交作業前,搶占所需計算資源(此時開始計算所用機時)。
執行分為四步
1.提交資源分配請求,作業排隊等待資源分配,作業開始運行,開始計費;
2.執行用戶指定的命令;
3.命令執行結束;
4.退出作業釋放資源,作業停止運行,停止計費。
示例
查看隊列和作業,節點信息[編輯 | 編輯源代碼]
顯示隊列[編輯 | 編輯源代碼]
命令 sinfo
隊列中多節點狀態不同時分行顯示
顯示字段包括
PARTITION 隊列名稱
AVAIL 隊列狀態
TIMELIMIT 時間限制
NODES 隊列分配的節點數
STATE 節點狀態
NODELIST 隊列節點列表
隊列狀態值[編輯 | 編輯源代碼]
可能的值包括:"UP", "DOWN", "DRAIN" and "INACTIVE". 默認值為 "UP"
UP
新提交的作業可能在隊列上排隊,並且作業可以在隊列中運行。
DOWN
新提交的作業可能在隊列上排隊,但排隊的作業可能不會被分配節點並在隊列中運行。已經在隊列上運行的作業繼續運行。
DRAIN
沒有任何新作業可能在隊列上排隊(作業提交請求將被拒絕與錯誤消息),但已分配的隊列上的作業可能被分配節點並運行。
INACTIVE
沒有新作業可能在隊列上排隊,並且已排隊的作業可能不會被分配節點並運行。
顯示隊列詳細信息[編輯 | 編輯源代碼]
命令 scontrol show partition <partition name>
隊列參數列表 | 參數解釋 |
AllowGroups=ALL | 此隊列允許的用戶組 |
AllowAccounts=ALL | 此隊列允許的賬號 |
AllowQos=ALL | 此隊列允許的的 qos |
AllocNodes=ALL | |
Default=NO | 是否是默認隊列,設置多個默認隊列以最后一行的隊列為默認隊列 |
QoS=N/A | |
DefaultTime=NONE | 用於未指定值的作業的運行時間限制。如果未設置,則使用 MaxTime。 格式與 MaxTime 相同。 |
DisableRootJobs=NO | 如果設置為 “YES”,則用戶 root 將被阻止在該分區上運行任何作業。 |
ExclusiveUser=NO | 如果設置為 “YES”,則節點將被專門分配給用戶。 同一用戶可以運行多個作業,但一次只能有一個用戶處於活動狀態。 使用 --exclusive = user 選項也可以在每個作業的基礎上提供此功能。 |
GraceTime=0 | |
Hidden=NO | 指定默認情況下是否隱藏分區及其作業。 默認情況下,隱藏的分區不會被 Slurm API 或命令報告。 可能的值為 “是” 和 “否”。默認值為 “否”。 |
MaxNodes=UNLIMITED | 可以分配給任何單個作業的最大節點數。默認值為 “UNLIMITED” |
MaxTime=UNLIMITED | 分配給此隊列的作業的最長運行時間 |
MinNodes=1 | |
LLN=NO | 調度作業資源到最小負載的節點上的(基於空閑 CPU 的數量)。這通常只適用於具有串行作業的環境。請注意,節點權重優先於每個節點上有多少空閑資源。 |
MaxCPUsPerNode=UNLIMITED | 任何節點上可用於此分區的所有作業的最大 CPU 數。這對調度 GPU 特別有用。 |
Nodes=gpunode[1,2] | 此隊列可訪問的節點列表 |
PriorityJobFactor=1 | |
PriorityTier=1 | 隊列優先級 |
RootOnly=NO | 指定只有用戶 ID 為零(即用戶 root)可以在此分區中分配資源。用戶 root 可以為任何其他用戶分配資源,但請求必須由用戶 root 啟動。默認值為 “NO“。 |
ReqResv=NO | 指定此分區的用戶在提交作業時需要指定一個預約。此選項可用於限制可能具有較高優先級的分區或僅在預留中允許的附加資源的使用。 可能的值為 “YES” 和 “NO”。 默認值為 “NO”。 |
OverSubscribe=NO | 控制分區在每個資源上一次執行多個作業的能力,OverSubscribe 的可能值為 “EXCLUSIVE”,“FORCE”,“YES” 和 “NO”。 請注意,值為 “YES” 或 “FORCE” 可能會對具有數千個正在運行的作業的系統產生負面影響。 默認值為 “否”。 |
OverTimeLimit=NONE | |
PreemptMode=OFF | |
State=UP | 隊列狀態 |
TotalCPUs=80 | 此隊列總 cpu 數量,配置文件中節點的 cpu 總數 |
TotalNodes=2 | 此隊列的節點數量 |
SelectTypeParameters=NONE | 分區特定的資源分配類型。此選項將替換全局 SelectTypeParameters 值。支持的值是 CR_Core,CR_Core_Memory,CR_Socket 和 CR_Socket_Memory。使用需要設置系統范圍的 SelectTypeParameters 值。 |
DefMemPerNode=UNLIMITED | |
MaxMemPerNode=UNLIMITED |
命令擴展[編輯 | 編輯源代碼]
sinfo -d 可以僅顯示狀態為 down 的節點
sinfo -V 輸出 slurm 版本信息
[root@gv11 ~]# sinfo -d PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 0 n/a nvidia up infinite 0 n/a [root@gv11 ~]# sinfo -V slurm 17.02.6 |
作業狀態[編輯 | 編輯源代碼]
命令 squeue
只顯示排隊和運行中的作業
顯示字段有
JOBID 作業 ID
PARTITION 隊列名稱
NAME 作業名
USER 作業所屬用戶
ST 作業狀態
TIME 作業已運行時間
NODES 作業占用節點數
NODELIST(REASON)作業運行的結點列表(不運行作業的原因)
參數列表
-A, --account=account(s) | comma separated list of accounts to view, default is all accounts |
-j, --job=job(s) | comma separated list of jobs IDs to view, default is all |
-l, --long | long report |
-n, --name=job_name(s) | comma separated list of job names to view |
-o, --format=format | format specification |
-p, --partition=partition(s) | comma separated list of partitions to view, default is all partitions |
-u, --user=user_name(s) | comma separated list of users to view |
實時作業詳細信息[編輯 | 編輯源代碼]
命令 scontrol show job 2 或者 scontrol show job 2 --detail
作業參數列表 | 參數解釋 |
JobId | 作業 id |
JobName | 作業名 |
UserId | 用戶 id |
GroupId | 用戶組 |
MCS_label | |
Priority | 作業優先級 |
Nice | 調整作業調度優先值 (僅適用於作業),越小越優先 |
Account | 賬號 |
QOS | 服務質量,用戶可以使用的資源限制 |
JobState | 作業狀態 |
Reason | 作業在當前的原因 |
Dependency | 作業依賴關系。作業只有依賴的作業完成才運行,如顯示 NULL, 則無依賴 (僅適用於作業) |
Requeue | 節點失效時是否重排隊,0 為否,1 為是 |
Restarts | 失敗時,是否重運行,0 為否,1 為是 |
BatchFlag | 是否批處理設定了標記 (僅限於作業),0 為否,1 為是 |
Reboot | 節點空閑時是否重啟節點,0 為否,1 為是 |
ExitCode | 作業退出碼 |
RunTime | 已運行時間 |
TimeLimit | 請求的 Walltime 時間 |
TimeMin | 最小時間 |
SubmitTime | 作業提交時間 |
EligibleTime | 預計作業開始時間 |
StartTime | 開始運行時間 |
EndTime | 預計結束時間 |
Deadline | 作業的截止時間 |
PreemptTime | 作業搶占時間 |
SuspendTime | 掛起時間 |
SecsPreSuspend | |
LastSchedEval | |
Partition | 隊列 |
ReqNodeList | 請求的節點列表 |
ExcNodeList | 執行的節點 |
NodeList | 實際運行的節點列表 |
BatchHost | 執行節點 (僅適用於作業),對於分配的回話:顯示回話執行節點 (如,srun 或 salloc 命令執行節點)。對於批處理作業:顯示的執行批處理節點。 |
NumNodes | 節點數 |
NumCPUs | CPU 數 |
NumTasks | 任務數 |
CPUs/Task | CPU 核數 / 任務數 |
TRES | 使用 CPU 的個數 (對應 TRES 的子屬性 cpu:TRES=cpu=1,mem=2847M,node=1,billing=1) |
socks/Node | |
CoreSpec | 各節點預留 CPU 核數,如未包含,則表示 * |
MinCPUsNode | 每節點最小的 cpu 核數 |
MinMemoryNode | 每節點最小的內存大小,0 表示無限制 |
MinTmpDiskNode | 每節點最小臨時存儲硬盤大小,0 表示無限制 |
Features | 特性 |
DelayBoot | |
Gres | 通用資源 |
Reservation | 預留資源 |
OverSubscribe | 分配給此作業的計算資源能否被其它作業預約 (僅適用於作業),可被預約的資源包含節點,CPU 核,線程。值可以為:YES,NO,USER,MCS,OK |
Contiguous | 是否需要分配連續節點,OK 是,NO 否 |
Licenses | 作業預留的授權 |
Network | 作業運行的網絡 |
Command | 作業執行的命令(僅適用於作業) |
WorkDir | 工作目錄 |
StdError | 錯誤輸出路徑 |
StdIn | 標准輸入路徑 |
StdOut | 標准輸出路徑 |
作業狀態值[編輯 | 編輯源代碼]
常見的狀態值為:PENDING, RUNNING, SUSPENDED, COMPLETING, and COMPLETED.
PENDING 排隊 PD
RUNNING 運行 R
SUSPENDED 掛起 S
COMPLETED 完成 CD
COMPLETING CG
FAILED 作業運行失敗 F
CANCELLED 作業被取消 CA
TIMEOUT 超時 TO
其中 CD,F,CA,TO 都是運行結束的狀態
作業步狀態,僅由 srun 加載的任務產生作業步
作業命令擴展[編輯 | 編輯源代碼]
命令
squeue -u <user_name> 查詢指定用戶名的作業狀態
squeue –t <status_name> 查詢指定狀態的作業
scontrol 常用參數列表
OPTION | COMMAND | ||
-a or --all | equivalent to "all" command | cluster | |
-d or --details | equivalent to "details" command | create | |
-h or --help | reconfigure | ||
-M or --cluster | equivalent to "cluster" command NOTE:SlurmDBD must be up. | show <ENTITY> [<ID>] | display state of identified entity, default is all records. may be "aliases", "assoc_mgr" "burstBuffer", "config","daemons","federation", "frontend","hostlist","hostlistsorted", "hostnames","job","layouts", "node", "partition","reservation","slurmd", "step", or "topology"(also for BlueGene only: "block" or "submp"). |
顯示節點[編輯 | 編輯源代碼]
節點信息[編輯 | 編輯源代碼]
命令 scontrol show node
節點參數列表 | 參數解釋 |
NodeName | 節點名稱 |
Arch | 系統架構 |
CoresPerSocket | |
CPUAlloc | 分配給的 CPU 核數 |
CPUErr | 出錯的 CPU 核數 |
CPUTot | 總的 CPU 核數 |
CPULoad | CPU 負載 |
AvailableFeatures | 可用特性 |
ActiveFeatures | 激活的特性 |
Gres | 通用資源 |
NodeAddr | 節點 IP 地址 |
NodeHostName | 節點名 |
Version | SLURM 版本 |
OS | 操作系統 |
RealMemory | 實際的物理內存,單位 GB |
AllocMem | 已分配的內存,單位 GB |
FreeMem | 可用內存,單位 GB |
Sockets | |
Boards | 主板數 |
State | 節點狀態 |
ThreadsPerCore | CPU 線程數 |
TmpDisk | 臨時硬盤存儲大小 |
Weight | 權重 |
Owner | |
MCS_label | |
Partitions | |
BootTime | 開機實際 |
SlurmdStartTime | SLURM 守護進程啟動時間 |
CfgTRES | |
AllocTRES | |
CapWatts | |
CurrentWatts | |
LowestJoules | |
ConsumedJoules | |
ExtSensorsJoules | |
ExtSensorsWatts | |
ExtSensorsTemp | |
Reason | |
節點狀態值[編輯 | 編輯源代碼]
可能的狀態包括:
allocated(alloc), completing(comp), down(down), drained(drain), draining(drng), fail(fail), failing(failg), future(futr), idle(idle), maint(maint), mixed(mix), perfctrs(npc), power_down(pow_dn), power_up(pow_up), reserved, and unknown(unk)。
請注意,后綴 “*” 標識當前未響應的節點。
idle 表示節點處於空閑狀態
alloc 表示節點所有 CPU 都被占用,新提交的作業將排隊。
drain 出現這個狀態時,不影響正在運行的作業,但是不接受新的作業調度,可以使用命令 sinfo –R 打印節點不正常的狀態產生原因
mix 節點具有分配 CPU 的作業,而其他的 CPU 狀態是 IDLE,新提交的作業繼續運行
unk Slurm 控制器剛剛啟動,節點的狀態尚未確定。
down 故障節點不可用。
其他狀態請參考手冊 man page。
作業運行參數[編輯 | 編輯源代碼]
下面的參數適用於所有作業提交命令,srun, sbatch, salloc。
參數 | 參數作用 | 備注 |
-J 或者 --job-name | 指定作業名稱 | 默認為加載的程序 / 批處理腳本文件名 / 執行的命令 |
-p 或者 --partition | 指定隊列資源 | 作業不能跨分區 |
-N 或者 –nodes=<number> | 指定節點數量 | |
-n 或者 --ntasks = <number> 總 task 數 (總核數) | 指定處理器數量 srun -p debug -N 2 --cpus-per-task=10 -n 2 sleep 10& NumNodes=2 NumCPUs=20 NumTasks=2 CPUs/Task=10 TRES=cpu=20,node=2 Nodes=gpunode[1-2] CPU_IDs=0-9 MinCPUsNode=10 |
默認值為每個節點一個任務,但請注意,--cpus-per-task 選項將更改此默認值。 |
-o 或者 --output=<filename pattern> | 指定 stdout 的輸出文件。提供 --output 選項以允許將 stdout 重定向到不同的位置。 如果指定的文件已經存在,它將被覆蓋。 | |
-e 或者 --error=<filename pattern> | 指定 stderr 的輸出文件。提供 --error 選項以允許將 stdout 和 stderr 重定向到不同的位置。 如果指定的文件已經存在,它將被覆蓋。 | |
-t 或者 --time |
時間分辨率是一分鍾,第二個值被四舍五入到下一分鍾。 =0 為要求不限時。 可接受的時間格式包括 “分鍾”,“分鍾:秒”,“小時:分鍾:秒”,“天 - 小時”,“天 - 小時:分鍾” 和 “天 - 小時:分:秒”。 超出時間限制的作業將被終止,作業狀態變為 TIMEOUT。 |
應盡可能准確估計,調度時用此估計時間進行 backfill 判斷 |
-A 或者 --account=<account> | [null 指定賬號] | |
-d 或者 --dependency 指定作業的依賴關系 | after:job_id [:jobid...] 在指定作業開始之后 afterok:job_id [:jobid...] 在指定作業成功開始之后 afternotok:job_id [:jobid...] 在指定作業不成功結束之后 afterany:job_id [:jobid...] 在指定作業結束之后 … |
滿足依賴關系的作業才能運行; 不可能滿足依賴關系的作業將永遠不會運行,一直排隊。 |
--priority=<值> | [null 作業優先級] | 請求具體工作優先級。 可能會受到配置的限制。 值應該是數值或 “TOP”(用於最高可能值)。 |
作業控制[編輯 | 編輯源代碼]
取消作業[編輯 | 編輯源代碼]
命令 scancel jobid
作業狀態標記為 CANCELLED
狀態,回收資源
掛起作業[編輯 | 編輯源代碼]
命令 scontrol suspend
暫時釋放處理器資源
節點被釋放,可以分配給其他資源
掛起正在運行的工作。job_list 參數是逗號分隔的作業 ID 列表。使用 resume 命令恢復執行。用戶進程必須在收到 SIGSTOP 信號后停止,並在收到 SIGCONT 后恢復,以使此操作生效。並非所有架構和配置都支持停職。如果重新排出暫停的工作,它將被置於保持狀態。
恢復作業[編輯 | 編輯源代碼]
命令 scontrol resume
節點再次分配給作業
作業重新排隊[編輯 | 編輯源代碼]
命令 scontrol requeue 67
可將運行或掛起批處理的作業重新排隊
釋放資源,置為 PENDING 狀態
不會重新分配作業 ID
提交時間置為重排隊時間
保留作業[編輯 | 編輯源代碼]
命令 scontrol hold [job list]
命令解釋
防止掛起的作業被啟動(將其優先級設置為 0)。使用 release 命令允許作業被調度。job_list 參數是作業 ID 的逗號分隔列表或作業名稱的 “jobname =”,它將嘗試保存具有該名稱的所有作業。請注意,當系統管理員使用 hold 命令保留作業時,只有系統管理員可能會釋放作業才能執行(另請參閱 uhold 命令)。當作業被其所有者保留時,也可能由工作所有者 release。此外,當你嘗試保留一個 running 的作業時,將不會暫停或取消它。但是,它會將作業優先級設置為 0,並更新作業 reason 字段,這將在以后重新排列時保留該作業。
命令 scontrol uhold job_list
命令解釋
防止掛起的作業被啟動(將其優先級設置為 0)。job_list 參數是作業 ID 或作業名稱的空格分隔列表。使用 release 命令允許作業被調度。此命令是為系統管理員設計的,用於保存作業,以便作業所有者可以釋放它,而不需要系統管理員的干預(另請參閱 hold 命令)。
修改作業[編輯 | 編輯源代碼]
作業提交后可對其參數等進行修改,不同狀態下可修改的參數不同,修改參數時進行類似提交時的權限與資源限制檢查
命令 scontrol
改變作業的隊列[編輯 | 編輯源代碼]
命令 scontrol update jobid=73 partition=nvidia
只能修改排隊作業
改變作業的名字[編輯 | 編輯源代碼]
命令 scontrol update jobid=73 name=nvidia
排隊,運行都可以修改
slurm.conf 文件配置與對應的功能[編輯 | 編輯源代碼]
slurm.conf 文件配置[編輯 | 編輯源代碼]
大部分選項選擇默認即可,一般只需要在 “Control Machines”,“Compute Machines” 以及 “Resource Selection” 部分根據實際情況填寫即可。
ControlAddr
管理節點 ip 地址
ControlMachine
管理節點 hostname
NodeName
計算節點 hostname
NodeAddr
計算節點 ip
CPUs
計算節點的 cpu
RealMemory
計算節點的物理內存
AuthType
auth/munge
AccountingStorageEnforce
不填寫
This option contains a comma separated list of options you may want to enforce. The valid options are: associations,limits, nojobs, nosteps, qos, safe, and wckeys, or all for all things (expect nojobs and nosteps, they must be requested as well).
- associations - 如果關聯不在數據庫中,這將阻止用戶運行作業。此選項將阻止用戶訪問無效帳戶。
- limits - 這將強制設置關聯的限制。通過設置此選項,還會設置 'associations' 選項。
- qos - 這將要求所有作業指定(默認或默認情況下)有效的 qos(服務質量)。為數據庫中的每個關聯定義了 QOS 值。通過設置此選項,還會設置 “'associations' 選項。
ProctrackType
Pgid
SelectType
Cons_res
SelectTypeParameters
CR_Core
TaskPlugin
Affinity
AccountingStorageType
MySQL
SlurmctldDebug
7
SlurmdDebug
7
AccountingStorageHost
賬號存儲數據庫的計算機的名稱。僅用於數據庫類型存儲插件
AccountingStorageLoc
數據庫名稱。僅用於數據庫類型存儲插件
AccountingStoragePass
數據庫的密碼。僅用於數據庫類型存儲插件
AccountingStoragePort
數據庫的端口號。僅用於數據庫類型存儲插件
CryptoType=crypto/munge
ReturnToService=2
ReturnToService 控制狀態為 down 狀態的節點是否自動恢復為 idle 狀態,建議設置為 2
StateSaveLocation=/opt/slurm17/spool
安裝目錄下的 spool 文件夾
SlurmctldLogFile=/opt/slurm17/log
安裝目錄下的 log 文件夾
SlurmdLogFile
安裝目錄下的 log 文件夾
PartitionName
隊列名稱
啟用記賬[編輯 | 編輯源代碼]
配置
Slurm.conf 文件中需要修改如下參數
AccountingStorageEnforce= associations #AccountingStorageEnforce=associations,limits,qos,safe,wckeys AccountingStorageHost=gv11 AccountingStorageLoc=slurm_acc #AccountingStorageLoc=/opt/slurm_acc AccountingStoragePass=111111 AccountingStoragePort=3309 AccountingStorageType=accounting_storage/mysql #AccountingStorageType=accounting_storage/filetxt #AccountingStorageType=accounting_storage/slurmdbd AccountingStorageUser=root AccountingStoreJobComment=YES ClusterName=cluster_gv11 |
使用
啟用記賬之后,再次提交作業,待作業運行完成之后,可使用命令 sacct 查看歷史作業
查詢指定時間段的作業[編輯 | 編輯源代碼]
命令 sacct 參數列表
-E, --endtime=end_time | 查詢在指定時間之前,任何狀態的作業。如果通過 - s 參數指定狀態則返回在此時間之前的指定狀態的作業,有效格式為: HH:MM[:SS] [AM|PM] MMDD[YY] or MM/DD[/YY] or MM.DD[.YY] MM/DD[/YY]-HH:MM[:SS] YYYY-MM-DD[THH:MM[:SS]] |
-S, --starttime= starttime | 在指定時間后,任何狀態的作業 |
-T, --truncate | Truncate time. 如果一個 job 在 --starttime 之前開始運行,開始時間將被截斷為 --starttime 。同樣的 作業結束時間 = --endtime. |
-o, --format | 分號分割的列表的顯示字段 |
示例
-T 參數示例
查詢指定賬號的作業[編輯 | 編輯源代碼]
形成關聯的四個參數來記錄 Slurm 賬戶信息,user, cluster, partition, 和 account:
user 是登錄名。
cluster 是 slurm 托管集群的名稱,由 slurm.conf 配置文件中的 ClusterName 參數指定。
partition 是該集群上的 Slurm 分區的名稱。
account 是一個工作的銀行帳戶。
預期的操作模式是啟動 sacctmgr 命令,添加,刪除,修改和 / 或列出關聯記錄,然后提交更改並退出。
隊列相關參數[編輯 | 編輯源代碼]
隊列配置允許您為各種組(或隊列)的節點建立不同的作業限制或訪問控制。節點可能在多個隊列中,使隊列作為默認隊列。例如,可以將同一組節點放在兩個不同的隊列中,每個隊列具有不同的約束(時間限制,作業大小,允許使用隊列的組等)。作業在單個隊列中分配資源。可以使用其中 PartitionName 為 “DEFAULT” 的記錄指定默認值。默認條目值僅適用於配置文件中跟隨的行,默認值可以在具有多個 “PartitionName = DEFAULT” 的配置文件中重復多次。必須在描述隊列配置的每一行上放置 “PartitionName =” 規范。PartitionName 為 “DEFAULT” 的每一行將替換或添加到以前的默認值,而不是重新初始化默認值。單個隊列名稱不能在多行中顯示為 PartitionName 值(重復的隊列名稱記錄將被忽略)。如果正在使用的隊列從配置中刪除,並且重新啟動或重新配置 slurm(scontrol reconfigure),則使用隊列的作業將被取消。注意:將每個隊列的所有參數放在一行上。每一行隊列配置信息都應該表示不同的隊列。隊列配置文件包含以下信息:
AllowGroups 啟用隊列的用戶訪問控制[編輯 | 編輯源代碼]
配置
AccountingStorageEnforce=limits … PartitionName=debug Nodes=gv11 Default=YES MaxTime=INFINITE State=UP PartitionName=nvidia Nodes=gv11 Default=NO MaxTime=INFINITE State=UP AllowGroups=docker |
AllowGroups:后邊的 docker 組就是 /etc/group 文件中的組名。
使用
由於 docker 組中只有用戶 sugon, 所以 ctest1 用戶不能提交作業,但是如果運行時不指定隊列而使用默認隊列 debug 運行時,該用戶是可以提交作業的,因為默認隊列 debug 沒有啟用用戶訪問控制
[ctest1@gv11 ~]$ srun -p nvidia sleep 10& [1] 17026 [ctest1@gv11 ~]$ srun: error: Unable to allocate resources: User's group not permitted to use this partition |
MaxTime 啟用隊列中作業的最長運行時間[編輯 | 編輯源代碼]
PartitionName=nvidia Nodes=gv11 Default=NO MaxTime=INFINITE State=UP MaxTime=1 |
MaxTime:作業的最長運行時間限制。格式是 “minutes”,“minutes:seconds”,“hours:minutes:seconds”,“days-hours”,“days-hours:minutes”,“days-hours:minutes:seconds” 或者 "UNLIMITED"。
AllowAccounts 啟用隊列賬號管理[編輯 | 編輯源代碼]
配置
修改 slurm.conf 文件,需要修改的參數如下圖:
AccountingStorageEnforce=limits … PartitionName=debug Nodes=gv11 Default=YES MaxTime=INFINITE State=UP PartitionName=nvidia Nodes=gv11 Default=NO MaxTime=INFINITE State=UP AllowAccounts= testpartition |
AllowAccounts:后的賬號名需要自己創建,下面是賬號創建步驟。
1.添加集群
命令
sacctmgr add cluster <cluster name> sacctmgr create cluster <cluster name> 添加集群,create 命令和 add 命令的執行方式和結果是一致的 sacctmgr list cluster 查詢集群 /etc/init.d slurm restart 重啟 slurm |
此集群名稱需要和 slurm.conf 文件中的 ClusterName 一致,如果 slurm.conf 文件中的 ClusterName 集群已存在則無需再創建集群
2. 添加賬號
賬號一定要創建在對應的集群中,也就是 slurm.conf 文件中的 ClusterName。
命令
sacctmgr add account name=science1 cluster=cluster_gv11 sacctmgr create account name=science1 cluster=cluster_gv11 添加賬號 sacctmgr list account 查詢賬號 |
Nodes 啟用隊列的節點控制[編輯 | 編輯源代碼]
配置
PartitionName=debug Nodes=gpunode[1,2]Default=YES MaxTime=INFINITE State=UP PartitionName=nvidia2 Nodes=gpunode2Default=YES MaxTime=INFINITE State=UP PartitionName=nvidia Nodes=gpunode1Default=YES MaxTime=INFINITE State=UP |
Nodes: 與此分區關聯的逗號分隔的節點列表(或 BlueGene 系統的基本分區)。可以使用上述節點范圍表達式語法來指定節點名稱。如果分區存在但沒有資源,則可以使用空白的節點列表(即 “Nodes =”)。“ALL” 值映射到集群中配置的所有節點。
PriorityTier 優先級[編輯 | 編輯源代碼]
配置為修改 slurm.conf 文件
提交給具有較高優先級層值的分區的作業將在具有較低優先級層值的分區中的掛起作業之前分派,並且如果可能,它們將從具有較低優先級層值的分區中搶占運行作業。請注意,分區的優先級優先於作業的優先級。值不超過 65533,數值越低優先級越高。
以上為常用的參數,詳細參數請參考官方文檔。
使用 Qos 啟用隊列的用戶訪問控制[編輯 | 編輯源代碼]
添加集群[編輯 | 編輯源代碼]
查詢集群是否正常,命令 sacctmgr list cluster
如果顯示不正確,需要添加
添加賬號[編輯 | 編輯源代碼]
命令:sacctmgr add account name=anna cluster=cluster_gv128
添加用戶到帳號並且給用戶添加 qos[編輯 | 編輯源代碼]
sacctmgr add user name=annaone account=anna qos=qosuser cluster=cluster_gv128
sacctmgr list assoc
使用 sugon 用戶登陸提交作業測試
啟用用戶的賬號管理[編輯 | 編輯源代碼]
在集群和賬號都創建好后,我們可以開始創建用戶
創建 linux 用戶[編輯 | 編輯源代碼]
[root@gv11 log]# useradd ctest1 [root@gv11 log]# passwd ctest1 |
給用戶綁定賬號[編輯 | 編輯源代碼]
[root@gv11 log]# sacctmgr create user name=ctest1 cluster=cluster_gv11 account=physics fairshare=10 |
啟用用戶 Qos[編輯 | 編輯源代碼]
Qos 全稱為 Quality of Service,可以為提交給 Slurm 的每個作業指定服務質量(QOS)。與作業相關的服務質量將以四種方式影響作業:
作業調度優先級
工作搶占
工作限制
分區 QOS
系統默認的 qos 為 normal
QOS 配置[編輯 | 編輯源代碼]
添加一個新的 qos [編輯 | 編輯源代碼]
sacctmgr add qos zebra sacctmgr show qos format=name,priority |
設置 qos[編輯 | 編輯源代碼]
sacctmgr modify qos zebra set priority=10 sacctmgr modify qos zebra set GrpJobs=2 sacctmgr show qos format=name,priority,GrpCPUs |
添加 qos 到用戶[編輯 | 編輯源代碼]
要先給用戶綁定賬號
sacctmgr modify user ctest1 set qos=zebra sacctmgr show assoc format=cluster,user,qos |
使用
使用用戶 utest1 用戶提交作業超過 2 個后,提交的作業處於等待狀態,等待上一個作業運行完成才開始執行
QOS 支持的策略 (參數):
Fairshare | 值為整數,用於確定優先級。 | 可設為 “parent”,關閉該層的 fairshare,使用 parent association 的 fairshare 優先級。 |
GrpCPUMins | association 及下屬可用的 CPU 總時間限制 | 僅在 Priority Multifactor plugin 下生效 |
GrpCPURunMins | association 及下屬可用的 CPU 運行總時間限制 | 超出限制被 kill |
GrpCPUs | association 及下屬同一時刻可用的 CPU 數量限制 | 超出限制則排隊 |
GrpJobs | association 及下屬同一時刻可運行作業數 | 超出限制則排隊 |
GrpMemory | association 及下屬同一時刻可用內存總量 | 超出限制則排隊 |
GrpNodes | association 及下屬同一時刻可用節點數。 | 每個作業使用的節點數單獨計算 |
GrpSubmitJobs | association 及下屬同一時刻已提交作業數。 | 超出限制則提交失敗 |
GrpWall | association 及下屬總 wall time 限制 | |
MaxCPUMinsPerJob | association 中每個作業可使用 cpu 時長。 | job 達到限制被 kill |
MaxCPUsPerJob | association 中每個作業可使用 cpu 數量 | |
MaxJobs | association 同一時刻可運行作業數。 | 超出限制則排隊 |
MaxNodesPerJob | association 每個作業可用節點數。 | 超出限制則提交失敗 |
MaxSubmitJobs | association 及下屬同一時刻已提交作業數。 | 超出限制則提交失敗 |
MaxWallDurationPerJob | association 總 wall time 限制 | |
QOS | 逗號分隔 association 可用的 QOS |
開啟評論自動刷新