Slurm Workload Manager (slurm) - AWS ParallelCluster

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Slurm Workload Manager (slurm)

クラスター容量のサイズと更新

クラスターの容量は、クラスターがスケーリングできるコンピューティングノードの数によって定義されます。コンピューティングノードは、 AWS ParallelCluster 設定 のコンピューティングリソース内で定義された EC2 インスタンスによってバックアップされ(Scheduling/SlurmQueues/ComputeResources)、Slurmパーティションに 1:1 をマッピング(Scheduling/SlurmQueues)するキューに編成されます。

コンピューティングリソース内では、クラスターで常に実行する必要があるコンピューティングノード (インスタンス) の最小数 () MinCount と、コンピューティングリソースがスケールできるインスタンスの最大数 (MaxCount3 ) を設定できます。

クラスターの作成時、またはクラスターの更新時に、 は、クラスターで定義された各コンピューティングリソース (Scheduling/SlurmQueues/ ComputeResources ) MinCount に対して で設定された数の EC2 インスタンス AWS ParallelCluster を起動します。クラスター内のコンピューティングリソースの最小ノード数をカバーするために起動されたインスタンスは、静的ノード と呼ばれます。起動すると、特定のイベントまたは条件が発生しない限り、静的ノードはクラスター内で永続的になり、システムによって終了されることはありません。このようなイベントには、例えば、 Slurmまたは EC2 ヘルスチェックの失敗や、Slurm ノードのステータスが DRAIN または DOWN に変更されることが含まれます。

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 以降では、キューのサイズを小さくするには、クラスターの更新が行われる前にコンピューティングフリートを停止するか、 の TERMINATE QueueUpdateStrategyに設定する必要があります。次の場合、コンピューティングフリートを停止したり、 を TERMINATE QueueUpdateStrategyに設定したりする必要はありません。

  • Scheduling/ への新しいキューの追加SlurmQueues

  • キューScheduling/SlurmQueues/ComputeResourcesへの新しいコンピューティングリソースの追加

  • コンピューティングリソースMaxCountの を増やす

  • コンピューティングリソース MinCount の増加と MaxCount 、少なくとも同じ量の同じコンピューティングリソースの増加

考慮事項と制約事項

このセクションは、クラスター容量のサイズ変更時に考慮すべき重要な要因、制約、または制限事項の概要を説明することを目的としています。

コンピューティングリソースの MinCountパラメータを変更する場合、 を に等しくMaxCount保つ場合 MinCount (静的容量のみ)、 MaxCountが より大きい場合 MinCount (静的容量と動的容量を混在させる) の 2 つの異なるシナリオを区別できます。

静的ノードのみによるキャパシティの変更

  • の場合MinCount == MaxCountMinCount ( および MaxCount ) を増やすと、クラスターは静的ノードの数を の新しい値に拡張して設定MinCount<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>され、システムは EC2 インスタンスを起動して、新しい必要な静的容量を満たしようとし続けます。

  • の場合MinCount == MaxCount、N の量を減らす MinCount (および ) MaxCount と、クラスターは最後の 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]
    • MinCount および -30での更新 MaxCount: MinCount = MaxCount = 70

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

混合ノードによる容量の変更

の場合MinCount < MaxCount、N の量MinCountだけ増やすと ( MaxCountは変更されないと仮定)、クラスターは静的ノードの数を MinCount ( ): の新しい値に拡張して設定<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>され、システムは EC2 old_MinCount + N インスタンスを起動して、新しい必要な静的容量を満たしようとし続けます。さらに、コンピューティングリソースのMaxCount容量を満たすために、クラスター設定は最後の N 個の動的ノード を削除することで更新され、システムは対応する EC2 インスタンスを終了します。 <Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>]

  • 初期状態: 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、同じ量の N MaxCountMinCountと を増やすと、クラスターは静的ノードの数を MinCount ( ): の新しい値に拡張して設定<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>され、システムは EC2 old_MinCount + N インスタンスを起動して、新しい必要な静的容量を満たしようとし続けます。さらに、新しい を優先する動的ノードの数は変更されません。

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、N MinCountの量を減らすと ( 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し、同じ量の N MaxCountの場合、クラスターは最後の 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、N MaxCountの量を減らすと (MinCount変更されないと仮定)、クラスターは最後の N 個の動的ノードを削除して設定<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>]され、running.No が静的ノードに与える影響が予想される場合に、システムは対応する 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 インスタンスが終了したすべての場合、削除されたノードで実行されているスバッチジョブは、ジョブ要件を満たす他のノードがない限り、再キューに入れられます。この場合、ジョブは 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)

  • 設定から AWS ParallelCluster 更新されたSlurmパーティション設定を生成する

  • 再起動 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 バージョン (s) サポートされる 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、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