

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

# 클러스터 용량 크기 및 업데이트
<a name="slurm-cluster-capacity-size-and-update"></a>

클러스터의 용량은 클러스터가 규모 조정할 수 있는 컴퓨팅 노드 수에 따라 정의됩니다. 컴퓨팅 노드는 AWS ParallelCluster 구성의 컴퓨팅 리소스 내에 정의된 Amazon EC2 인스턴스에 의해 지원되며 `(Scheduling/SlurmQueues/ ComputeResources)`1:1을 Slurm 파티션에 매핑`(Scheduling/SlurmQueues)`하는 대기열로 구성됩니다.

컴퓨팅 리소스 내에서 클러스터(`MinCount`)에서 항상 실행되어야 하는 최소 컴퓨팅 노드(인스턴스) 수와 컴퓨팅 리소스가 ([`MaxCount`3](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount))으로 규모 조정할 수 있는 최대 인스턴스 수를 구성할 수 있습니다.

클러스터 생성 시 또는 클러스터 업데이트 시는 클러스터에 정의된 각 컴퓨팅 리소스(`Scheduling/SlurmQueues/ ComputeResources`)에 `MinCount` 대해에 구성된 수만큼 Amazon EC2 인스턴스를 AWS ParallelCluster 시작합니다. 클러스터의 컴퓨팅 리소스에 대한 최소 노드 수를 포함하도록 시작된 인스턴스를 ***정적 노드***라고 합니다. 일단 시작되면 정적 노드는 클러스터에서 영구적이어야 하며 특정 이벤트 또는 조건이 발생하지 않는 한 시스템에 의해 종료되지 않습니다. 이러한 이벤트에는 Slurm 또는 Amazon EC2 상태 확인 실패 및 Slurm 노드 상태를 DRAIN 또는 DOWN으로 변경 등이 포함됩니다.

클러스터의 증가된 부하를 처리하기 위해 온디맨드 방식으로 시작된 `1` - `‘MaxCount - MinCount’`(`MaxCount ` *-* ` MinCount)` 범위의 Amazon EC2 인스턴스를 ***동적 노드***라고 합니다. 속성은 일시적이며 보류 중인 작업을 제공하기 위해 시작되고 클러스터 구성에서 `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]
```

## 클러스터 용량 업데이트
<a name="cluster-capacity-update-c2"></a>

클러스터 용량 업데이트에는 대기열 추가 또는 제거, 리소스 계산 또는 컴퓨팅 리소스의 `MinCount/MaxCount` 변경 등이 포함됩니다. AWS ParallelCluster 버전 3.9.0부터 대기열 크기를 줄이려면 클러스터 업데이트가 발생하기 전에 컴퓨팅 플릿을 중지하거나 [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)를 TERMINATE로 설정해야 합니다. 다음과 같은 경우 컴퓨팅 플릿을 중지하거나 [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)를 TERMINATE로 설정할 필요가 없습니다.
+ 예약/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)에 새 대기열 추가

   
+ 대기열에 새 컴퓨팅 리소스 `Scheduling/SlurmQueues/ComputeResources` 추가
+ 컴퓨팅 리소스의 `MaxCount` 증가
+ 컴퓨팅 리소스의 MinCount 증가 및 적어도 동일한 양의 동일한 컴퓨팅 리소스의 MaxCount 증가

## 고려 사항 및 제한 사항
<a name="cluster-considerations-limitations"></a>

이 섹션에서는 클러스터 용량 크기를 조정할 때 고려해야 하는 중요한 요인, 제약 또는 제한 사항을 간략하게 설명합니다.
+ 이름이 `<Queue/Name>-*`인 모든 컴퓨팅 노드 `Scheduling/SlurmQueues`에서 대기열을 제거하면 정적 및 동적 모두 Slurm 구성에서 제거되고 해당 Amazon EC2 인스턴스가 종료됩니다.
+ 대기열에서 `Scheduling/SlurmQueues/ComputeResources` 컴퓨팅 리소스를 제거하면 정적 및 동적 모두 이름이 `<Queue/Name>-*-<ComputeResource/Name>-*`인 모든 컴퓨팅 노드가 Slurm 구성에서 제거되고 해당 Amazon EC2 인스턴스가 종료됩니다.

컴퓨팅 리소스의 `MinCount` 파라미터를 변경할 때 `MaxCount`가 `MinCount`(정적 용량만 해당)와 같고 `MaxCount`가 `MinCount`(정적 및 동적 용량 혼합)보다 큰 경우 두 가지 시나리오를 구분할 수 있습니다.

### 정적 노드만 있는 용량 변경
<a name="capacity-changes-static-nodes"></a>
+ `MinCount == MaxCount`인 경우 `MinCount`(및 `MaxCount`)를 늘릴 때 정적 노드 수를 `MinCount` `<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>`의 새 값으로 확장하여 클러스터를 구성하고 시스템은 필요한 새 정적 용량을 충족하기 위해 Amazon EC2 인스턴스를 계속 시작하려고 시도합니다.
+ `MinCount == MaxCount`인 경우 N 양 `MinCount`(및 `MaxCount`)을 줄일 때 마지막 N 정적 노드 `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>]`를 제거하여 클러스터를 구성하고 시스템은 해당 Amazon EC2 인스턴스를 종료합니다.
  + 원래 상태 `MinCount = MaxCount = 100`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
    ```
  + `MinCount` 및 `MaxCount: MinCount = MaxCount = 70`에서 `-30` 업데이트
  + 

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

### 혼합 노드의 용량 변경
<a name="mixed-node-capacity-changes"></a>

`MinCount < MaxCount`인 경우 N 양(`MaxCount`가 변경되지 않은 상태로 유지된다고 가정)만큼 `MinCount`를 늘리면 정적 노드 수를 `MinCount`(`old_MinCount + N`)의 새 값으로 확장하여 클러스터가 구성되고 `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>` 및 시스템은 필요한 새 정적 용량을 충족하기 위해 Amazon EC2 인스턴스를 계속 시작하려고 시도합니다. 또한 컴퓨팅 리소스의 `MaxCount` 용량을 적용하기 위해 *마지막 N 동적 노드 를 제거*하여 클러스터 구성이 업데이트되고 `<Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>]` 및 시스템은 해당 Amazon 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]
  ```
+ \$130을 `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`인 경우 `MinCount` 및 `MaxCount`을 동일한 N 양만큼 늘리면 정적 노드 수를 `MinCount`(`old_MinCount + N`)의 새 값으로 확장하여 클러스터가 구성되고 `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>` 시스템은 필요한 새 정적 용량을 충족하기 위해 Amazon EC2 인스턴스를 계속 시작하려고 시도합니다. 또한 새 노드를 적용하기 위해 동적 노드 수를 변경하지 않습니다.

 `MaxCount` USD 상당.
+ 원래 상태: `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]
  ```
+ \$130을 `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`인 경우 `MinCount`를 N 양만큼 줄일 경우(`MaxCount`는 변경되지 않는다고 가정) 마지막 N 정적 노드를 제거하여 클러스터를 구성하고 `<Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount>` 시스템은 해당 Amazon EC2 인스턴스를 종료합니다. 또한 컴퓨팅 리소스의 `MaxCount` 용량을 수용하기 위해 클러스터 구성은 격차를 메울 동적 노드 수를 확장하여 업데이트됩니다. `MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>]` 이 경우 동적 노드이므로 스케줄러에 새 노드에서 보류 중인 작업이 없는 한 새 Amazon 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]
  ```
+ `MinCount : MinCount = 70 (MaxCount = 120)`에서 -30 업데이트
+ 

  ```
  $ 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` 및 `MaxCount`를 동일한 N 양으로 줄일 때 마지막 N 정적 노드를 제거하여 클러스터를 구성하고 `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<oldMinCount>]` 시스템은 해당 Amazon 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]
  ```
+ `MinCount : MinCount = 70 (MaxCount = 120)`에서 -30 업데이트
+ 

  ```
  $ 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`인 경우 `MaxCount`를 N(`MinCount`는 변경되지 않은 상태로 유지된다고 가정)만큼 줄이면 마지막 N 동적 노드를 제거하여 클러스터가 구성되고 `<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>]` 시스템이 실행 중인 해당하는 Amazon 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]
  ```
+ `MaxCount : MinCount = 100 (MaxCount = 120)`에서 -30 업데이트
+ 

  ```
  $ 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]
  ```

## 작업에 미치는 영향
<a name="job-impacts"></a>

노드가 제거되고 Amazon EC2 인스턴스가 종료되는 모든 경우, 작업 요구 사항을 충족하는 다른 노드가 없는 경우를 제외하고 제거된 노드에서 실행되는 sbatch 작업이 다시 대기열에 추가됩니다. 이 마지막 경우 NODE\$1FAIL 상태로 작업이 실패하고 대기열에서 사라지므로 수동으로 다시 제출해야 합니다.

클러스터 크기 조정 업데이트를 수행하려는 경우 계획된 업데이트 중에 제거될 노드에서 작업이 실행되지 않도록 할 수 있습니다. 이는 유지 관리에서 노드를 제거하도록 설정하여 가능합니다. 유지 관리에서 노드를 설정해도 결국 노드에서 이미 실행 중인 작업에는 영향을 주지 않습니다.

계획된 클러스터 크기 조정 업데이트를 통해 노드를 제거한다고 가정해 보겠습니다 `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]
```

이렇게 하면 노드 `qeueu-st-computeresource-[9-10]`에 `maint_for_update` 이름이 지정된 Slurm 예약이 생성됩니다. 예약이 생성된 시점부터 더 이상 `qeueu-st-computeresource-[9-10]` 노드로 실행될 수 있는 작업이 없습니다. 예약으로 인해 `qeueu-st-computeresource-[9-10]` 노드에 작업이 최종 할당되는 것을 막을 수는 없습니다.

클러스터 크기 조정 업데이트 후 크기 조정 업데이트 중에 제거된 노드에서만 Slurm 예약이 설정된 경우 유지 관리 예약이 자동으로 삭제됩니다. 대신 클러스터 크기 조정 업데이트 후에도 여전히 존재하는 노드에 대한 Slurm 예약을 생성한 경우 다음 명령을 사용하여 크기 조정 업데이트가 수행된 후 노드에 대한 유지 관리 예약을 제거할 수 있습니다.

```
sudo -i scontrol delete ReservationName=maint_for_update
```

Slurm 예약에 대한 자세한 내용은 [여기](https://slurm.schedmd.com/reservations.html)에서 공식 SchedMD 문서를 참조하세요.

## 용량 변경에 대한 클러스터 업데이트 프로세스
<a name="changes-per-process"></a>

스케줄러 구성이 변경되면 클러스터 업데이트 프로세스 중에 다음 단계가 실행됩니다.
+ 중지 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)` 시작