

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

# Slurm クラスタ高速容量不足フェイルオーバー
<a name="slurm-short-capacity-fail-mode-v3"></a>

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

**Amazon EC2 が検出する容量不足エラー：**
+ `InsufficientInstanceCapacity`
+ `InsufficientHostCapacity`
+ `InsufficientReservedInstanceCapacity`
+ `MaxSpotInstanceCountExceeded`
+ `SpotMaxPriceTooLow`: 設定したスポットリクエスト料金が、スポットリクエストに最低限必要な料金を下回る場合、有効化します。
+ `Unsupported`: 特定の でサポートされていないインスタンスタイプを使用してアクティブ化されます AWS リージョン。

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

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

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

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

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

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

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

## 容量不足のタイムアウトパラメータ
<a name="slurm-short-capacity-fail-mode-parameter-v3"></a>

**`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`状態に設定するためです。

## 高速容量不足フェイルオーバーモードのステータス
<a name="slurm-short-capacity-fail-mode-status-v3"></a>

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

### ノードの状態
<a name="slurm-short-capacity-fail-mode-nodes-v3"></a>

コンピューティングリソースのダイナミックノードにジョブが投入され、容量不足エラーが検出されると、ノードは `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-1` は `down` に設定されます。コンピューティングリソース (`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 コンピューティングフリートが停止し、すべてのノードの電源オフと電源アップが開始されます。

### 関連ログ
<a name="slurm-protected-mode-logs-v3"></a>

容量不足エラーと高速容量不足フェイルオーバーモードに関連するログは、ヘッドノードの 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']}
```