Slurm Workload Manager (slurm) - AWS ParallelCluster

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Slurm Workload Manager (slurm)

叢集容量大小和更新

叢集的容量是由叢集可擴充的運算節點數量所定義。運算節點由組 AWS ParallelCluster 態中運算資源中定義的 EC2 執行個體提供支援(Scheduling/SlurmQueues/ComputeResources),並組織成佇列(Scheduling/SlurmQueues),將 1:1 對應至Slurm分區。

在計算資源中,您可以設定叢集中必須始終保持執行的最小計算節點 (執行個體MinCount) 數目,以及運算資源可擴充至 (MaxCount3) 的執行個體數目上限。

在叢集建立時或叢集更新時,MinCount針對叢集中定義的每個運算資源 (Scheduling/SlurmQueues/ ComputeResources ) AWS ParallelCluster 啟動所設定數量的 EC2 執行個體。為了涵蓋叢集中運算資源的最小節點而啟動的執行個體稱為靜態節點一旦啟動,靜態節點就應該在叢集中是永久性的,除非發生特定的事件或條件,否則它們不會被系統終止。例如,此類事件包括 EC2 運作狀態檢查失敗,以及將 Slurm 節點狀態變更為「排出」或「關閉」。Slurm

EC2 執行個體的範圍1‘MaxCount - MinCount’ (MaxCount 減號 MinCount),隨需啟動以處理叢集增加的負載) 稱為動態節點。 它們的性質是短暫的,它們被啟動以提供待處理的工作,並且一旦它們Scheduling/SlurmSettings/ScaledownIdletime在叢集配置中定義的一段時間內保持閒置狀態(預設值:10 分鐘),就會終止。

靜態節點和動態節點符合下列命名結構描述:

  • 靜態節點<Queue/Name>-st-<ComputeResource/Name>-<num>,其中 <num> = 1..ComputeResource/MinCount

  • 動態節點<Queue/Name>-dy-<ComputeResource/Name>-<num>,其中 <num> = 1..(ComputeResource/MaxCount - ComputeResource/MinCount)

例如,給出以下 AWS ParallelCluster 配置:

Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 ComputeResources: - Name: c5xlarge Instances: - InstanceType: c5.xlarge MinCount: 100 MaxCount: 150

下面的節點將被定義 Slurm

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]

當計算資源具有時MinCount == MaxCount,所有對應的計算節點都將是靜態的,並且所有執行個體都會在叢集建立/更新時啟動,並保持正常運作。例如:

Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 ComputeResources: - Name: c5xlarge Instances: - InstanceType: c5.xlarge MinCount: 100 MaxCount: 100
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]

叢集容量更新

叢集容量的更新包括新增或移除佇列、計算資源或變更計算資源。MinCount/MaxCount從 AWS ParallelCluster 版本 3.9.0 開始,減少佇列的大小需要停止運算叢集或QueueUpdateStrategy設定為「終止」,才能進行叢集更新。在下列情況下,不需要停止運算叢集或設定QueueUpdateStrategy為「終止」:

  • 將新佇列新增至排程/SlurmQueues

  • 將新的計算資源新增Scheduling/SlurmQueues/ComputeResources至佇列

  • 增加MaxCount運算資源

  • 增加 MinCount 運算資源,並增加 MaxCount 至少相同數量的相同運算資源

考量與限制

本節旨在概述調整叢集容量大小時應考慮的任何重要因素、限制或限制。

當更改計算資源的MinCount參數時,我們可以區分兩種不同的場景,如果MaxCount保持等於MinCount(僅靜態容量),以及MaxCount是否大於MinCount(混合靜態和動態容量)。

僅限靜態節點的容量變更

  • 如果在增加 MinCount (和MaxCount) 時MinCount == MaxCount,將透過將靜態節點數目擴充到的新值來設定叢集,MinCount<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>而且系統會繼續嘗試啟動 EC2 執行個體以滿足新的必要靜態容量。

  • 如果MinCount == MaxCount在減少 MinCount (和MaxCount) 數量 N 時,將透過移除最後 N 個靜態節點來設定叢集<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>],系統將終止對應的 EC2 執行個體。

    • 初始狀態 MinCount = MaxCount = 100

    • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
    • -30MinCount和更新 MaxCount: MinCount = MaxCount = 70

    • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 70 idle queue1-st-c5xlarge-[1-70]

混合節點的容量變更

如果MinCount < MaxCount在增加 MinCount N 量(假設MaxCount將保持不變)時,將通過將數量靜態節點擴展到MinCountold_MinCount + N)的新值來配置集群:<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>並且系統將繼續嘗試啟動 EC2 實例以滿足新的所需靜態容量。此外,為了承受運算資源的MaxCount容量,透過移除最後 N 個動態節點來更新叢集組態<Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>]系統將終止對應的 EC2 執行個體。

  • 初始狀態:MinCount = 100; MaxCount = 150

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
  • 更新至 MinCount : MinCount = 130 (MaxCount = 150)

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 20 idle~ queue1-dy-c5xlarge-[1-20] queue1* up infinite 130 idle queue1-st-c5xlarge-[1-130]

如果在增加MinCount且數量相同MaxCount的 N 時MinCount < MaxCount,將透過將數量靜態節點擴展到 MinCount (old_MinCount + N) 的新值來設定叢集:<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>系統將繼續嘗試啟動 EC2 執行個體以滿足新的所需靜態容量。此外,不會對動態節點的數量進行任何更改以兌現新節點

MaxCount 值。

  • 初始狀態:MinCount = 100; MaxCount = 150

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
  • 更新至 MinCount : MinCount = 130 (MaxCount = 180)

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 20 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 130 idle queue1-st-c5xlarge-[1-130]

如果MinCount < MaxCount在減少 MinCount N 量(假設MaxCount將保持不變)時,將通過刪除最後 N 個靜態節點靜態節點來配置集群,<Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount>並且系統將終止相應的 EC2 實例。此外,為了履行運算資源的MaxCount容量,透過擴充動態節點的數量來更新叢集組態以填補空白。MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>]在這種情況下,由於這些節點是動態節點,因此除非排程器在新節點上有待處理的工作,否則不會啟動新的 EC2 執行個體。

  • 初始狀態:MinCount = 100; MaxCount = 150

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
  • 在上的 -30 更新 MinCount : MinCount = 70 (MaxCount = 120)

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 80 idle~ queue1-dy-c5xlarge-[1-80] queue1* up infinite 70 idle queue1-st-c5xlarge-[1-70]

如果MinCount < MaxCount在減少MinCount且數量相同MaxCount的 N 時,將透過移除最後 N 個靜態節點來設定叢集<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<oldMinCount>],系統將終止對應的 EC2 執行個體。

此外,不會對動態節點的數量進行任何更改以兌現新MaxCount值。

  • 初始狀態:MinCount = 100; MaxCount = 150

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
  • 在上的 -30 更新 MinCount : MinCount = 70 (MaxCount = 120)

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 80 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 70 idle queue1-st-c5xlarge-[1-70]

如果MinCount < MaxCount在減少 MaxCount N 量時 (假設MinCount將保持不變),則會透過移除最後 N 個動態節點來設定叢集,<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>]並且在執行的情況下,系統將終止對應的 EC2 執行個體。預期不會對靜態節點造成任何影響。

  • 初始狀態:MinCount = 100; MaxCount = 150

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
  • 在上的 -30 更新 MaxCount : MinCount = 100 (MaxCount = 120)

  • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 20 idle~ queue1-dy-c5xlarge-[1-20] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]

對工作的影響

在移除節點並終止 EC2 執行個體的所有情況下,除非沒有其他節點滿足任務需求,否則在已移除節點上執行的 sbatch 任務將重新排入佇列。在最後一種情況下,工作將失敗,狀態為 NODE_FAIL 並從隊列中消失; 如果是這種情況,則需要手動重新提交。

如果您打算執行叢集調整大小更新,則可以防止工作在計劃更新期間移除的節點中執行。這可以通過設置要在維護中刪除的節點來實現。請注意,在維護中設定節點不會影響最終已在節點中執行的工作。

假設使用計劃的集群調整大小更新,您將刪除節點qeueu-st-computeresource-[9-10]。您可以使用下列命令建立Slurm保留區

sudo -i scontrol create reservation ReservationName=maint_for_update user=root starttime=now duration=infinite flags=maint,ignore_jobs nodes=qeueu-st-computeresource-[9-10]

這將建立在節點maint_for_update上命名的Slurm保留區qeueu-st-computeresource-[9-10]。從建立保留區的時間開始,節點就不能再執行任何作業qeueu-st-computeresource-[9-10]。請注意,保留區不會阻止最終在節點上配置工作qeueu-st-computeresource-[9-10]

叢集調整大小更新後,如果只在調整大小更新期間移除的節點上設定保Slurm留區,則維護保留區將會自動刪除。如果您在叢集調整大小更新之後仍然存在的節點上建立保Slurm留區,我們可能想要在執行調整大小更新之後移除節點上的維護保留區,方法是使用下列命令

sudo -i scontrol delete ReservationName=maint_for_update

有關Slurm預訂的更多詳細信息,請在此處查看官方 ScheDMD 文檔。

容量變更的叢集更新程序

排程器組態變更時,會在叢集更新程序期間執行下列步驟:

  • 停止 AWS ParallelCluster clustermgtd (supervisorctl stop clustermgtd)

  • 從配置生成更新的Slurm分區配 AWS ParallelCluster 置

  • 重新啟動slurmctld(通過 Chef 服務配方完成)

  • 檢查slurmctld狀態 (systemctl is-active --quiet slurmctld.service)

  • 重新載入Slurm組 (scontrol reconfigure)

  • 啟動 clustermgtd (supervisorctl start clustermgtd)

如需有關的資訊Slurm,請參閱 https://slurm.schedmd.com。如需下載項目,請參閱 https://github.com/SchedMD/slurm/tags。如需原始程式碼,請參閱 https://github.com/SchedMD/slurm

AWS ParallelCluster 版本 支援的 Slurm 版本

3.9.0

23.11.4

3.8.0

23.02.7

3.7.2

23.02.6

3.7.1

23.02.5

3.7.0

23.02.4

3.6.0

23.02.2

3.5.0

22.05.8

3.4.0

22.05.7

3.3.0

22.05.5

3.1.4、3.1.5、3.2.0、

21.08.8-2

3.1.2

21.08.6

3.1.1

21.08.5

3.0.0

20.11.8