Slurm Workload Manager (slurm) - AWS ParallelCluster

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

Slurm Workload Manager (slurm)

叢集容量大小和更新

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

在運算資源中,您可以設定必須始終在叢集中執行的運算節點 (執行個體) 數量下限 (MinCount),以及運算資源可擴展至 (MaxCount3) 的執行個體數量上限。

在叢集建立時間或叢集更新時, MinCount會針對叢集中定義的每個運算資源 (Scheduling/SlurmQueues/ ComputeResources ),依 中設定的數量 AWS ParallelCluster 啟動 Amazon EC2 執行個體。啟動以涵蓋叢集中運算資源最少數量節點的執行個體稱為靜態節點啟動後,除非發生特定事件或條件,否則靜態節點應持續存在於叢集中,系統不會終止這些節點。例如,這類事件包括 Slurm 或 Amazon EC2 運作狀態檢查和變更 Slurm 節點狀態為 DRAIN 或 DOWN。

Amazon 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的 。從 3.9.0 AWS ParallelCluster 版開始,減少佇列的大小需要先停止運算機群或將 QueueUpdateStrategy 設定為 TERMINATE,才能進行叢集更新。在下列情況下,不需要停止運算機群或將 QueueUpdateStrategy 設定為 TERMINATE:

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

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

  • 增加運算資源MaxCount

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

考量與限制

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

變更運算資源的MinCount參數時,我們可以區分兩種不同的案例,如果 MaxCount 保持等於 MinCount(僅限靜態容量),如果 MaxCount 大於 MinCount(混合靜態和動態容量)。

僅限靜態節點的容量變更

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

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

    • 初始狀態 MinCount = MaxCount = 100

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

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

混合節點的容量變更

如果 MinCount < MaxCountMinCount增加數量 N 時 (假設 MaxCount將保持不變),叢集的設定方式是將靜態節點數目擴展到 MinCount( ) old_MinCount + N 的新值: ,<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>而且系統會繼續嘗試啟動 Amazon EC2 執行個體,以滿足新的必要靜態容量。此外,為了滿足運算資源的MaxCount容量,叢集組態會透過移除最後一個 N 動態節點來更新: <Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>] 且系統會終止對應的 Amazon 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 = 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,在增加 MinCount和 相同數量MaxCount的 N 時,叢集的設定方式是將靜態節點數量擴展到 MinCount() old_MinCount + N 的新值: ,<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>而且系統會繼續嘗試啟動 Amazon 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 = 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>且系統會終止對應的 Amazon EC2 執行個體。此外,為了滿足運算資源的MaxCount容量,透過擴展動態節點的數量來填補間隙來更新叢集組態MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>]。在此情況下,由於這些是動態節點,除非排程器在新節點上有待定任務,否則不會啟動新的 Amazon 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>]且系統會終止對應的 Amazon 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>]如果靜態節點受到 running.No 影響,則系統會終止對應的 Amazon 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]

對任務的影響

在所有移除節點和終止 Amazon 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]

這將建立 Slurm 節點 maint_for_update 上名為 的保留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)

  • Reload (重新載入) Slurm 組態 (scontrol reconfigure)

  • 啟動 clustermgtd (supervisorctl start clustermgtd)

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

支援的叢集和 SLURM 版本

下表列出 AWS ParallelCluster 和 Slurm 支援的 AWS 版本。

AWS ParallelCluster version(s) 支援 Slurm version

3.11.0

23.11.10

3.9.2、3.9.3、3.10.0

23.11.7

3.9.0、3.9.1

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、3.6.1

23.02.2

3.5.0、3.5.1

22.05.8

3.4.0、3.4.1

22.05.7

3.3.0、3.3.1

22.05.5

3.1.4、3.1.5、3.2.0、3.2.1

21.08.8-2

3.1.2、3.1.3

21.08.6

3.1.1

21.08.5

3.0.0

20.11.8