本指南將說明如何使用 Slurm 的會計和服務品質 (QOS) 功能,有效管理由多個團隊共用的單一訓練叢集,這些團隊的優先順序和資源需求各不相同。
目標
完成本教學課程後,您將擁有管理叢集資源的架構,可執行下列操作:
- 為每個團隊強制執行資源限制。
- 根據緊急程度設定工作優先順序並搶先執行。
- 清楚說明資源用量。
- 盡可能提高叢集使用率,同時維持公平性。
必要條件
已設定會計、搶占和優先順序的執行中訓練叢集,可管理帳戶、排定工作時間和設定工作優先順序。
叢集登入節點的
sudo存取權,可執行管理員指令。
核心概念:Slurm 帳戶的建構模塊
Slurm 會使用清楚且彈性的階層來管理資源。瞭解這四個建構模塊至關重要。
| 元件 | 範例 | 目的 |
|---|---|---|
| 帳戶 | 團隊或專案 | 主要單位,用於將使用者分組及設定整體資源限制 (例如,team_ace最多可使用 10 個節點)。 |
| 使用者 | 個別研究人員 | 提交工作的人員。每位使用者都必須屬於預設帳戶。 |
| 分區 | 硬體佇列 | 節點的邏輯分組。為確保擁有最大彈性,建議您使用包含所有節點的單一分割區。 |
| QOS | 規則手冊 | 一組已命名的規則,用於定義工作限制 (例如「這個 QOS 中的工作只能使用 2 個節點」) 和排程優先順序。 |
使用這個模型時,您可以為整個帳戶設定高層級配額,並使用 QOS 套用更精細的工作限制。
角色:管理員與研究人員
這個系統有兩個不同的角色:叢集管理員和研究人員。
叢集管理員
- 主要工具:
sacctmgr(Slurm 帳戶管理員) - 您的工作:建立帳戶、使用者和 QoS 規則的「架構」。這通常是「設定一次,視需要更新」的工作。
- 主要工作:建立帳戶、將使用者指派給帳戶、定義服務品質規則手冊,以及將這些項目連結在一起。
研究員
- 主要工具:
sbatch、squeue、sinfo - 工作:提交及監控研究工作。
- 神奇之處:研究人員提交工作時,Slurm 會自動檢查與其帳戶和 QOS 相關聯的規則。如果工作違反任何限制,Slurm 會拒絕該工作,並顯示清楚的錯誤訊息。
本教學課程:逐步操作說明
下列教學課程會透過一系列漸進式情境,將這些概念付諸實踐。在本逐步操作說明中,請擔任叢集管理員的角色。您的工作是設定一個帳戶 (team_ace) 和一個使用者 (user_alice)。這些情境一開始沒有任何限制,然後逐步新增控管層級。
第 1 部分:初始設定 (無限制)
建立帳戶並關聯使用者。
- 目標:為
team_ace和user_alice建立基本階層結構。 - 方法:使用
sacctmgr新增帳戶,然後新增與該帳戶相關聯的使用者。
# --- (Run as Admin) ---
# 1. Create the 'team_ace' account
sudo sacctmgr add account team_ace Description="The Ace Team"
# 2. Create the 'user_alice' user and map them to their default account
# (Note: 'user_alice' must already exist as a Linux user on the node)
sudo sacctmgr add user user_alice Account=team_ace
# 3. Show the hierarchy we just built to confirm
sacctmgr show associations where account=team_ace
結果:現在以使用者 user_alice 身分,即可提交大型工作。由於沒有限制,系統會接受 7 個節點的工作,並立即執行 (假設有 7 個節點處於閒置狀態)。
第 2 部分:在帳戶中新增群組層級限制
接著,對 team_ace 帳戶套用資源上限,將整個團隊限制為最多 6 個節點和 4 個工作。
目標:為整個團隊設定資源總上限。
方法:我們使用
team_aceGrpJobs(群組工作) 和GrpTRES(群組可追蹤資源,在本例中為node=6) 對team_ace帳戶套用這項限制。
# --- (Run as Admin) ---
# 1. Add group-level job and node limits to the 'team_ace' account
sudo sacctmgr modify account where name=team_ace set GrpJobs=4 GrpTRES=node=6
# 2. View the limits to confirm the change
sacctmgr show association where account=team_ace
結果:如要確認新限制是否生效,請執行下列測試:user_alice
- 節點限制:現在提交 7 個節點的工作會失敗。這項工作會進入待處理 (
PD) 狀態,原因為 (AssocGrpNodeLimit)。 - 工作限制:提交 5 個單一節點工作後,會有 4 個工作正在執行 (
R),第 5 個工作則會處於待處理狀態 (PD),並顯示原因 (AssocGrpJobsLimit)。
帳戶層級限制運作正常。
第 3 部分:使用 QOS 新增每個工作的限制
帳戶層級的群組限制可有效控管團隊的資源總用量。不過,這項功能無法防止使用者提交單一工作,耗用整個團隊的配額。如要控管個別工作的大小,請在下一個步驟使用服務品質 (QOS)。
- 目標:限制團隊提交的個別工作大小上限。
- 方法:我們將建立名為
qos1的服務品質 (QOS),並使用MaxTRESPerJob=node=2規則。然後將此設為整個team_ace帳戶的預設 QOS。
# --- (Run as Admin) ---
# 1. Create a QOS with a per-job limit of 2 nodes
sudo sacctmgr add qos qos1 MaxTRESPerJob=node=2
# 2. Allow the 'team_ace' account to use this QOS
sudo sacctmgr modify account where account=team_ace set QOS=qos1
# 3. Set 'qos1' as the DEFAULT QOS for all users in this account
sudo sacctmgr modify account where account=team_ace set DefaultQOS=qos1
結果:現在,如果 user_alice 提交 3 個節點的工作,工作會進入待處理狀態,並顯示原因 (QOSMaxNodePerJobLimit)。使用者仍在總帳戶配額 (6 個節點) 內,但已違反每個工作的 QOS 規則。
第 4 部分:新增使用者專屬的覆寫
如果 user_alice 是實習生,需要限制只能處理更小的工作,但不能影響團隊其他成員,該怎麼辦?
- 目標:對單一使用者套用更嚴格的限制。
- 方法:我們會建立新的 QOS (
qos_intern),並將其設為user_alice的預設值。這會覆寫帳戶的預設 QOS。
# --- (Run as Admin) ---
# 1. Create a more restrictive QOS with a 1-node limit
sudo sacctmgr add qos qos_intern MaxTRESPerJob=node=1
# 2. Allow the account to use this new QOS
sudo sacctmgr modify account where account=team_ace set QOS+=qos_intern
# 3. Apply 'qos_intern' as the default QOS for the specific user association
sudo sacctmgr modify user where name=user_alice account=team_ace set DefaultQOS=qos_intern
結果:如果 user_alice 嘗試提交先前在 qos1 下允許的 2 節點作業,系統會傳回 (QOSMaxNodePerJobLimit) 錯誤。更具體的使用者層級規則已成功覆寫一般帳戶層級規則。
第 5 部分:設定優先順序和先佔
最後,設定工作優先順序和搶占,確保即使叢集已滿,重要工作也能立即執行。
- 目標:建立高優先順序的「緊急」QOS,可暫停或取消低優先順序的工作,以釋出資源。
方法:
- 建立新的
qos_urgent,並將Priority值設為較高。 - 告知
qos_urgent允許在qos1中執行Preempt工作。 - 設定
qos1在工作遭到搶占時的REQUEUE行為。
- 建立新的
# --- (Run as Admin) ---
# 1. Create a new 'qos_urgent' with a high priority that can preempt 'qos1'
sudo sacctmgr add qos qos_urgent Priority=1000 Preempt=qos1
# 2. Configure 'qos1' to requeue preempted jobs after a 10-second grace period
sudo sacctmgr modify qos where name=qos1 set PreemptMode=REQUEUE GraceTime=10
# 3. Allow the 'team_ace' account and 'user_alice' to use this new QOS
sudo sacctmgr modify account where account=team_ace set QOS+=qos_urgent
sudo sacctmgr modify user where name=user_alice account=team_ace set QOS+=qos_urgent
# 4. For this scenario, remove the group limits so preemption is easier to trigger
sudo sacctmgr modify account where name=team_ace set GrpJobs=-1 GrpTRES=node=-1
結果:
- 在一個終端機中,
user_alice會使用預設的qos1提交長時間執行的工作。開始執行 (R)。 - 在第二個終端機中,
user_alice會使用緊急 QOS (sbatch --qos=qos_urgent ...) 提交大型工作。 - 幾秒內,第一個工作的狀態會從執行中 (R) 變更為待處理 (
PD),原因為 (Preempted)。緊急工作隨即開始執行。
大功告成!您已設定系統,讓高優先順序工作自動取代低優先順序工作。
摘要和後續步驟
在本教學課程中,您已學會如何使用 Slurm 的階層式會計功能,精細控管共用叢集。您可以選擇:
- 設定全域限制:使用帳戶為整個團隊設定資源配額總計。
- 強制執行工作規則:使用 QOS 控制個別工作的大小和優先順序。
- 建立特定覆寫:對使用者套用不同的服務品質,以進行精細控管。
- 保證優先順序:設定搶占功能,確保重要工作負載一律可以執行。
這個分層模型提供彈性且強大的方式,可公平且有效率地管理叢集資源。如需更進階的設定,請參閱 Slurm 官方說明文件。