

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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. 작업을 다른 컴퓨팅 리소스에 대기열에 추가합니다.

비활성화된 컴퓨팅 리소스의 정적 노드와 전원이 켜진 노드는 영향을 받지 않습니다. 이러한 노드에서 작업을 완료할 수 있습니다.

이 주기는 작업이 컴퓨팅 리소스 노드 또는 여러 노드에 성공적으로 할당될 때까지 반복됩니다. 노드 상태에 대한 내용은 [다중 대기열 모드를 위한 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` 값이 0보다 작거나 같으면 빠른 용량 부족 장애 조치 모드가 비활성화됩니다.

`HeadNode`의 `/etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf`에 있는 `clustermgtd` 구성 파일에 파라미터를 추가하여 `insufficient_capacity_timeout` 값을 변경할 수 있습니다.

컴퓨팅 플릿을 중지하지 않고도 언제든지 파라미터를 업데이트할 수 있습니다.

예제:
+ `insufficient_capacity_timeout=600`:

  용량 부족 오류가 감지되면 컴퓨팅 리소스가 비활성화(`DOWN`)로 설정됩니다. 10분 후 장애가 발생한 노드는 `idle~`(`POWER_SAVING`) 상태로 설정됩니다.
+ `insufficient_capacity_timeout=60`:

  용량 부족 오류가 감지되면 컴퓨팅 리소스는 비활성화(`DOWN`) 상태가 됩니다. 1분 후 장애가 발생한 노드는 `idle~` 상태로 설정됩니다.
+ `insufficient_capacity_timeout=0`:

  빠른 용량 부족 장애 조치 모드가 비활성화되었습니다. 컴퓨팅 리소스는 비활성화되지 않았습니다.

**참고**  
용량 부족 오류로 인해 노드에 장애가 발생하는 시간과 클러스터 관리 대몬(daemon)이 노드 장애를 감지하는 시간 사이에는 최대 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]
```

노드 하나가 필요한 작업을 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']}
```