教學課程:管理叢集上的帳戶和工作排程

如要使用 Gemini Enterprise Agent Platform 訓練叢集,請與業務代表聯絡以取得存取權。

本指南將示範如何使用 Slurm 的帳戶和服務品質 (QOS) 功能,有效管理由多個團隊共用的單一訓練叢集,這些團隊的優先順序和資源需求各不相同。

目標

完成本教學課程後,您將擁有管理叢集資源的架構,可執行下列操作:

  • 強制執行每個團隊的資源限制。
  • 根據緊急程度排定工作優先順序並搶先執行。
  • 清楚說明資源用量。
  • 盡可能提高叢集使用率,同時維持公平性。

必要條件

  • 已設定會計、搶占和優先順序的執行中訓練叢集,可管理帳戶、排定工作時間和優先順序。

  • 自動調度管理

  • 進階 Slurm 設定

  • sudo 叢集登入節點的存取權,可執行管理員指令。

核心概念:Slurm 帳戶的建構模塊

Slurm 會使用清楚且彈性的階層來管理資源。瞭解這四個構成要素至關重要。

元件 範例 目的
帳戶 團隊或專案 主要單位,用於將使用者分組及設定整體資源限制 (例如 team_ace 最多可使用 10 個節點)。
使用者 個別研究人員 提交工作的使用者。每位使用者都必須屬於預設帳戶。
分區 硬體佇列 節點的邏輯分組。為確保擁有最大彈性,建議您使用包含所有節點的單一分割區。
QOS 規則手冊 一組已命名的規則,用於定義工作限制 (例如「這個 QOS 中的工作只能使用 2 個節點」) 和排程優先順序。

使用這個模型時,您可以為整個帳戶設定高層級配額,並使用 QOS 套用更精細的工作限制

角色:管理員與研究人員

這個系統有兩個不同的角色:叢集管理員和研究人員。

叢集管理員

  • 主要工具:sacctmgr (Slurm 帳戶管理員)
  • 您的工作:建立帳戶、使用者和 QoS 規則的「架構」。這通常是「設定一次,視需要更新」的工作。
  • 主要工作:建立帳戶、將使用者指派給帳戶、定義服務品質規則手冊,以及將這些項目連結在一起。

研究員

  • 主要工具:sbatchsqueuesinfo
  • 工作:提交及監控研究工作。
  • 神奇之處:研究人員提交工作時,Slurm 會自動檢查與帳戶和 QOS 相關聯的規則。如果工作違反任何限制,Slurm 會拒絕該工作,並顯示清楚的錯誤訊息。

本教學課程:逐步操作說明

下列教學課程會透過一系列漸進式情境,實際應用這些概念。在本逐步操作說明中,請扮演叢集管理員的角色。您的工作是設定一個帳戶 (team_ace) 和一個使用者 (user_alice)。這些情境一開始沒有限制,然後逐步新增控制層。

第 1 部分:初始設定 (無限制)

建立帳戶並連結使用者。

  • 目標:為 team_aceuser_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 個工作。

  • 目標:為整個團隊設定資源總上限。

  • 方法:我們使用 GrpJobs (群組工作) 和 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

  1. 節點限制:現在提交 7 個節點的工作會失敗。這項工作會進入待處理 (PD) 狀態,原因為 (AssocGrpNodeLimit)。
  2. 工作限制:提交 5 個單一節點工作後,會有 4 個工作正在執行 (R),第 5 個工作則會處於待處理狀態 (PD),並顯示原因 (AssocGrpJobsLimit)。

帳戶層級限制運作正常。

第 3 部分:使用 QOS 新增每個工作的限制

帳戶層級的群組限制可有效限制團隊的資源總用量。不過,這項限制無法防止使用者提交單一工作,耗用團隊的全部配額。如要控管個別工作的規模,請使用服務品質 (QOS)。

  • 目標:限制團隊提交的個別工作大小上限。
  • 方法:我們會建立名為 qos1 的服務品質 (QOS),並使用 MaxTRESPerJob=node=2 規則。接著,我們會將此服務品質設為整個 team_ace 帳戶的預設服務品質。
# --- (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,可暫停或取消優先順序較低的工作,以釋出資源。
  • 方法:

    1. 建立新的 qos_urgent,並將 Priority 值設為較高。
    2. 告知 qos_urgent 允許在 qos1 中執行 Preempt 工作。
    3. 設定 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

結果:

  1. 在一個終端機中,user_alice 會使用預設的 qos1 提交長時間執行的工作。開始執行 (R)。
  2. 在第二個終端機中,user_alice 會使用緊急 QOS (sbatch --qos=qos_urgent ...) 提交大型工作。
  3. 幾秒內,第一個工作的狀態會從執行中 (R) 變更為待處理 (PD),原因為 (Preempted)。緊急工作隨即開始執行。

大功告成!您已設定系統,讓高優先順序工作自動取代低優先順序工作。

摘要和後續步驟

按照本教學課程操作後,您已學會如何使用 Slurm 的階層式會計功能,精細控管共用叢集。您可以選擇:

  • 設定全域限制:使用帳戶為整個團隊設定資源配額總計。
  • 強制執行工作規則:使用 QOS 控制個別工作的大小和優先順序。
  • 建立特定覆寫:對使用者套用不同的服務品質,以進行精細控管。
  • 保證優先順序:設定搶占,確保重要工作負載一律可以執行。

這個分層模型提供彈性且強大的方式,可公平且有效率地管理叢集資源。如需更進階的設定,請參閱官方 Slurm 文件