

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

# Slurm 叢集快速容量不足容錯移轉
<a name="slurm-short-capacity-fail-mode-v3"></a>

從 3.2.0 AWS ParallelCluster 版開始，叢集執行時預設會啟用快速容量不足容錯移轉模式。這可將偵測到 Amazon EC2 容量不足錯誤時，重試將任務排入佇列所花費的時間降至最低。當您使用使用不同執行個體類型的多個運算資源來設定佇列時，這特別有效。

**Amazon EC2 偵測到容量不足故障：**
+ `InsufficientInstanceCapacity`
+ `InsufficientHostCapacity`
+ `InsufficientReservedInstanceCapacity`
+ `MaxSpotInstanceCountExceeded`
+ `SpotMaxPriceTooLow`：如果 Spot 請求價格低於所需的 Spot 請求履行價格下限，則會啟用。
+ `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. 它會將任務排入另一個運算資源的佇列。

停用之運算資源的靜態和已啟動節點不會受到影響。任務可以在這些節點上完成。

此週期會重複，直到任務成功指派給運算資源節點。如需節點狀態的資訊，請參閱 [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`會啟用 。

預設值`insufficient_capacity_timeout`為 600 秒 (10 分鐘）。

如果`insufficient_capacity_timeout`值小於或等於零，則會停用快速容量不足容錯移轉模式。

您可以在位於 的`clustermgtd`組態檔案中新增 參數`/etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf`來變更`insufficient_capacity_timeout`值`HeadNode`。

您可以隨時更新 參數，而無需停止運算機群。

例如：
+ `insufficient_capacity_timeout=600`:

  如果偵測到容量不足錯誤，則運算資源會設為已停用 (`DOWN`)。10 分鐘後，其失敗的節點會設定為 `idle~`(`POWER_SAVING`) 狀態。
+ `insufficient_capacity_timeout=60`:

  如果偵測到容量不足錯誤，表示運算資源已停用 (`DOWN`)。1 分鐘後，其失敗的節點會設定為 `idle~` 狀態。
+ `insufficient_capacity_timeout=0`:

  容量不足快速容錯移轉模式已停用。運算資源不會停用。

**注意**  
當節點故障時，容量不足錯誤，以及叢集管理協助程式偵測到節點故障的時間之間，可能會有最多一分鐘的延遲。這是因為叢集管理協助程式會檢查節點容量不足失敗，並以一分鐘的間隔將運算資源設定為 `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]
```

我們會向需要一個節點的 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']}
```