Slurm クラスタ高速容量不足フェイルオーバー - AWS ParallelCluster

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

Slurm クラスタ高速容量不足フェイルオーバー

AWS ParallelCluster バージョン 3.2.0 以降、クラスターは、デフォルトで高速容量不足フェイルオーバーモードが有効になっている状態で実行されます。これにより、Amazon EC2 の容量不足エラーが検出されたときのジョブのキューへの再試行にかかる時間が最小限に抑えられます。これは、クラスターに複数の種類のインスタンスタイプを設定する場合に特に効果的です。

Amazon EC2 が容量不足の障害を検出しました。
  • InsufficientInstanceCapacity

  • InsufficientHostCapacity

  • InsufficientReservedInstanceCapacity

  • MaxSpotInstanceCountExceeded

  • SpotMaxPriceTooLow: 設定したスポットリクエスト料金が、スポットリクエストに最低限必要な料金を下回る場合、有効化します。

  • Unsupported: 特定の でサポートされていないインスタンスタイプを使用してアクティブ化されます AWS リージョン。

高速容量不足フェイルオーバーモードでは、ジョブが / SlurmQueues に割り当てられたときに容量不足エラーが検出されるとcompute resource、 は次の AWS ParallelCluster 操作を行います。

  1. コンピューティングリソースを、あらかじめ定義された期間、無効 (DOWN) 状態に設定します。

  2. POWER_DOWN_FORCE を使用し、コンピューティングリソースで障害が発生したノードジョブをキャンセルし、障害が発生したノードを一時停止します。障害が発生したノードを IDLE および POWER_DOWN (!) の状態に設定し、次いで POWERING_DOWN (%) に設定します。

  3. ジョブを別のコンピューティングリソースに再キューします。

無効化されたコンピューティングリソースの静的なノードや電源が入っているノードには影響しません。ジョブはこれらのノードで完了できます。

このサイクルは、ジョブが 1 つまたは複数のコンピューティングリソースノードに正常に割り当てられるまで繰り返されます。ノードの状態についての詳細は、「マルチキューモードの Slurm ガイド」を参照してください。

ジョブを実行するコンピューティングリソースが見つからない場合、ジョブはあらかじめ定義された期間が経過するまで PENDING の状態に設定されます。この場合、次のセクションで説明するように、定義済みの期間を変更できます。

容量不足のタイムアウトパラメータ

insufficient_capacity_timeout

insufficient_capacity_timeout では、容量不足エラーが検出されたときに、コンピューティングリソースが無効 (down) 状態に保たれる時間 (秒) が指定されます。

デフォルトでは、insufficient_capacity_timeout は有効です。

デフォルトは 600 秒 (10 分) です。

insufficient_capacity_timeout の値が 0 以下の場合、高速容量不足フェイルオーバーモードは無効になります。

insufficient_capacity_timeout の値は、HeadNode/etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.confにある clustermgtd 設定ファイルにパラメータを追加することで変更できます。

このパラメータは、コンピューティングフリートを停止せずにいつでも更新できます。

例:

  • insufficient_capacity_timeout=600:

    容量不足エラーが検出されると、コンピューティングリソースは無効 (DOWN) に設定されます。10 分後、障害が発生したノードは idle~ (POWER_SAVING) 状態に設定されます。

  • insufficient_capacity_timeout=60:

    容量不足エラーが検出されると、コンピューティングリソースは無効になります (DOWN)。1 分後、障害が発生したノードは idle~ の状態に設定されます。

  • insufficient_capacity_timeout=0:

    高速容量不足フェイルオーバーモードは無効になります。コンピューティングリソースは無効になりません。

注記

容量不足エラーでノードに障害が発生してから、クラスター管理デーモンがノード障害を検出するまでの間には、最大 1 分の遅延が発生する可能性があります。これは、クラスター管理デーモンがノードに容量不足の障害がないかチェックし、コンピューティングリソースを 1 分間隔で down の状態に設定するためです。

高速容量不足フェイルオーバーモードのステータス

クラスターが高速容量不足フェイルオーバーモードの場合、その状態とノードの状態を確認できます。

ノードの状態

コンピューティングリソースのダイナミックノードにジョブが投入され、容量不足エラーが検出されると、ノードは down# の状態になり、理由が提供されます。

(Code:InsufficientInstanceCapacity)Failure when resuming nodes.

その後、電源がオフになっているノード (idle~ の状態にあるノード) down~ に設定され、理由が提供されます。

(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity.

ジョブはキュー内の他のコンピューティングリソースに再キューされます。

コンピューティングリソースの静的ノードと、UP であるノードは、高速容量不足フェイルオーバーモードの影響を受けません。

ここで、次の例で示されるノードの状態を考えてみます。

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 30 idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

1 つのノードを必要とするジョブを queue1 に送信します。

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 1 down# queue1-dy-c-1-1 queue1* up infinite 15 idle~ queue1-dy-c-2-[1-15] queue1* up infinite 14 down~ queue1-dy-c-1-[2-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

ノード queue1-dy-c-1-1 を起動してジョブを実行します。しかし、容量不足エラーが発生し、インスタンスを起動できませんでした。ノード queue1-dy-c-1-1down に設定されます。コンピューティングリソース (queue2-dy-c-1) 内の電源がオフになっている動的ノードは down に設定されます。

ノードの原因は scontrol show nodes で確認できます。

$ scontrol show nodes queue1-dy-c-1-1 NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 CPUAlloc=0 CPUTot=96 CPULoad=0.00 ... ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s Reason=(Code:InsufficientInstanceCapacity)Failure when resuming nodes [root@2022-03-10T22:17:50] $ scontrol show nodes queue1-dy-c-1-2 NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 CPUAlloc=0 CPUTot=96 CPULoad=0.00 ... ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s Reason=(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity [root@2022-03-10T22:17:50]

ジョブはキューコンピューティングリソース内の別のインスタンスタイプにキューイングされます。

insufficient_capacity_timeout の時間が経過すると、コンピューティングリソース内のノードは idle~ の状態にリセットされます。

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 30 idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

insufficient_capacity_timeout の時間が経過し、コンピューティングリソース内のノードが idle~ の状態にリセットされると、Slurm スケジューラはノードの優先度を低くします。スケジューラは、以下のいずれかが起こらない限り、重みの大きい他のキューコンピューティングリソースからノードを選択し続けます。

  • ジョブの送信要件は、回復されたコンピューティングリソースと一致します。

  • 他のコンピューティングリソースはキャパシティに達しているため、使用できません。

  • slurmctld が再起動されます。

  • AWS ParallelCluster コンピューティングフリートが停止し、すべてのノードの電源オフと電源オンが開始されます。

関連ログ

容量不足エラーと高速容量不足フェイルオーバーモードに関連するログは、ヘッドノードの Slurm の resume ログと clustermgtd ログにあります。

Slurm resume (/var/log/parallelcluster/slurm_resume.log)

容量が不足しているためにノードを起動できない場合のエラーメッセージ。

[slurm_plugin.instance_manager:_launch_ec2_instances] - ERROR - Failed RunInstances request: dcd0c252-90d4-44a7-9c79-ef740f7ecd87 [slurm_plugin.instance_manager:add_instances_for_nodes] - ERROR - Encountered exception when launching instances for nodes (x1) ['queue1-dy-c-1-1']: An error occurred (InsufficientInstanceCapacity) when calling the RunInstances operation (reached max retries: 1): We currently do not have sufficient p4d.24xlarge capacity in the Availability Zone you requested (us-west-2b). Our system will be working on provisioning additional capacity. You can currently get p4d.24xlarge capacity by not specifying an Availability Zone in your request or choosing us-west-2a, us-west-2c.
Slurm clustermgtd (/var/log/parallelcluster/clustermgtd)

Queue1 のコンピューティングリソース c-1 は、容量が不足しているため無効になっています。

[slurm_plugin.clustermgtd:_reset_timeout_expired_compute_resources] - INFO - The following compute resources are in down state due to insufficient capacity: {'queue1': {'c-1': ComputeResourceFailureEvent(timestamp=datetime.datetime(2022, 4, 14, 23, 0, 4, 769380, tzinfo=datetime.timezone.utc), error_code='InsufficientInstanceCapacity')}}, compute resources are reset after insufficient capacity timeout (600 seconds) expired

容量不足タイムアウトの期限が切れると、コンピューティングリソースはリセットされ、コンピューティングリソース内のノードは idle~ に設定されます。

[root:_reset_insufficient_capacity_timeout_expired_nodes] - INFO - Reset the following compute resources because insufficient capacity timeout expired: {'queue1': ['c-1']}