SLURM 使用基礎教程


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

簡介:交互式作業提交,提交命令后,等待作業執行完成之后返回命令行窗口。

示例

交互模式.png

批處理模式[編輯 | 編輯源代碼]

命令 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.退出作業釋放資源,作業停止運行,停止計費。

示例

分配模式.png

查看隊列和作業,節點信息[編輯 | 編輯源代碼]

顯示隊列[編輯 | 編輯源代碼]

命令 sinfo

顯示隊列.png

隊列中多節點狀態不同時分行顯示

顯示隊列-2.png

顯示字段包括

PARTITION 隊列名稱

AVAIL    隊列狀態

TIMELIMIT 時間限制

NODES   隊列分配的節點數

STATE    節點狀態

NODELIST 隊列節點列表

隊列狀態值[編輯 | 編輯源代碼]
隊列狀態值.png

可能的值包括:"UP", "DOWN", "DRAIN" and "INACTIVE". 默認值為 "UP"

UP

新提交的作業可能在隊列上排隊,並且作業可以在隊列中運行。

DOWN

新提交的作業可能在隊列上排隊,但排隊的作業可能不會被分配節點並在隊列中運行。已經在隊列上運行的作業繼續運行。

DRAIN

沒有任何新作業可能在隊列上排隊(作業提交請求將被拒絕與錯誤消息),但已分配的隊列上的作業可能被分配節點並運行。

INACTIVE

沒有新作業可能在隊列上排隊,並且已排隊的作業可能不會被分配節點並運行。

顯示隊列詳細信息[編輯 | 編輯源代碼]

命令 scontrol show partition <partition name>

顯示隊列詳細信息.png
隊列參數列表 參數解釋
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

只顯示排隊和運行中的作業

作業狀態.png

顯示字段有

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

實時作業詳細信息.png
作業參數列表 參數解釋
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 加載的任務產生作業步

作業步狀態.png
作業步狀態-2.png
作業步狀態-3.png
作業命令擴展[編輯 | 編輯源代碼]

命令

squeue -u <user_name> 查詢指定用戶名的作業狀態

作業命令擴展-1.png

squeue –t <status_name> 查詢指定狀態的作業

作業命令擴展-2.png

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

節點信息.png
節點參數列表 參數解釋
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 打印節點不正常的狀態產生原因

節點狀態值.png

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

狀態,回收資源

取消作業.png
 
取消作業-2.png
 

掛起作業[編輯 | 編輯源代碼]

命令 scontrol suspend 

暫時釋放處理器資源

節點被釋放,可以分配給其他資源

          掛起正在運行的工作。job_list 參數是逗號分隔的作業 ID 列表。使用 resume 命令恢復執行。用戶進程必須在收到 SIGSTOP 信號后停止,並在收到 SIGCONT 后恢復,以使此操作生效。並非所有架構和配置都支持停職。如果重新排出暫停的工作,它將被置於保持狀態。

掛起作業.png
 

恢復作業[編輯 | 編輯源代碼]

命令 scontrol resume

節點再次分配給作業

恢復作業.png
 

作業重新排隊[編輯 | 編輯源代碼]

命令 scontrol requeue 67

作業重新排隊.png
 

可將運行或掛起批處理的作業重新排隊

釋放資源,置為 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

只能修改排隊作業

改變作業的隊列.png
 
改變作業的名字[編輯 | 編輯源代碼]

命令 scontrol update jobid=73 name=nvidia

排隊,運行都可以修改

改變作業的名字.png
 

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

              隊列名稱

隊列名稱.png
 

啟用記賬[編輯 | 編輯源代碼]

配置

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 查看歷史作業

啟用記賬.png
 
查詢指定時間段的作業[編輯 | 編輯源代碼]

命令 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 分號分割的列表的顯示字段

示例

查詢指定時間段的作業.png
 

-T 參數示例

查詢指定時間段的作業-2.png
 
查詢指定賬號的作業[編輯 | 編輯源代碼]
查詢指定賬號的作業.png
 

形成關聯的四個參數來記錄 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 集群已存在則無需再創建集群

添加集群.png
 

2. 添加賬號

賬號一定要創建在對應的集群中,也就是 slurm.conf 文件中的 ClusterName。

命令

sacctmgr add account name=science1 cluster=cluster_gv11

sacctmgr create account name=science1 cluster=cluster_gv11  添加賬號

sacctmgr list account                                   查詢賬號

添加賬號.png
 
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 文件

PriorityTier優先級.png
 

提交給具有較高優先級層值的分區的作業將在具有較低優先級層值的分區中的掛起作業之前分派,並且如果可能,它們將從具有較低優先級層值的分區中搶占運行作業。請注意,分區的優先級優先於作業的優先級。值不超過 65533,數值越低優先級越高。

以上為常用的參數,詳細參數請參考官方文檔。

使用 Qos 啟用隊列的用戶訪問控制[編輯 | 編輯源代碼]

添加集群[編輯 | 編輯源代碼]

查詢集群是否正常,命令 sacctmgr list cluster

添加集群.png
 

如果顯示不正確,需要添加

添加賬號[編輯 | 編輯源代碼]

命令:sacctmgr add account name=anna cluster=cluster_gv128

添加賬號.png
 
添加用戶到帳號並且給用戶添加 qos[編輯 | 編輯源代碼]

sacctmgr add user name=annaone account=anna qos=qosuser cluster=cluster_gv128

使用Qos啟用隊列的用戶訪問控制-添加賬號.png
 

sacctmgr list assoc

添加用戶到帳號並且給用戶添加-2.png
 

使用 sugon 用戶登陸提交作業測試

添加用戶到帳號並且給用戶添加-3.png
 

啟用用戶的賬號管理[編輯 | 編輯源代碼]

在集群和賬號都創建好后,我們可以開始創建用戶

創建 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
 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM