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

如要使用 Vertex AI 訓練叢集,請與業務代表聯絡以取得存取權。

本指南將說明如何使用 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 個工作。

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

  • 方法:我們使用 team_ace 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帳戶的預設 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,可暫停或取消低優先順序的工作,以釋出資源。
  • 方法:

    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 官方說明文件