

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

# ODCR(온디맨드 용량 예약)로 인스턴스 시작
<a name="launch-instances-odcr-v3"></a>

[온디맨드 용량 예약](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)(ODCR)에서는 특정 가용 영역의 클러스터 Amazon EC2 인스턴스에 예약 용량을 제공합니다. 따라서 [절감형 플랜](https://aws.amazon.com/savingsplans/) 또는 [리전 예약 인스턴스](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/reserved-instances-scope.html)에서 제공하는 결제 할인과는 별도로 용량 예약을 생성 및 관리할 수 있습니다.

`open` 또는 `targeted` ODCR을 구성할 수 있습니다. *개방형* ODCR은 ODCR 특성과 일치하는 모든 인스턴스를 포함합니다. 이러한 속성은 인스턴스 유형, 플랫폼 및 가용 영역입니다. 클러스터 구성에서 *대상* ODCR을 명시적으로 정의해야 합니다. ODCR이 `open` 또는 `targeted`인지 확인하려면 AWS CLI Amazon EC2 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html) 명령을 실행합니다.

[클러스터 배치 그룹 온디맨드 용량 예약(CPG ODCR)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html)이라고 하는 클러스터 배치 그룹에서 ODCR을 생성할 수도 있습니다.

여러 ODCR을 리소스 그룹으로 그룹화할 수 있습니다. 이는 클러스터 구성 파일에서 정의할 수 있습니다. 리소스 그룹에 대한 자세한 내용은 리소스 그룹 및 태그 사용 설명서**의 [리소스 그룹이란 무엇입니까?](https://docs.aws.amazon.com/ARG/latest/userguide/resource-groups.html)를 참조하세요.

## 에서 ODCR 사용 AWS ParallelCluster
<a name="odcr-parallelcuster-v3"></a>

AWS ParallelCluster 는 개방형 ODCR을 지원합니다. 개방형 ODCR을 사용하는 경우 AWS ParallelCluster에서 아무 것도 지정할 필요가 없습니다. 클러스터의 인스턴스는 자동으로 선택됩니다. 기존 배치 그룹을 지정하거나 새 배치 그룹을 AWS ParallelCluster 생성할 수 있습니다.

### 클러스터 구성의 ODCR
<a name="odcr-parallelcuster-config-v3"></a>

 AWS ParallelCluster 버전 3.3.0부터 Amazon EC2 실행 인스턴스 재정의를 지정할 필요 없이 클러스터 구성 파일에서 ODCRs을 정의할 수 있습니다.

먼저 링크된 각 문서에 설명된 방법을 사용하여 [용량 예약](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservations-using.html) 및 [리소스 그룹](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-cr-group.html)을 생성합니다. AWS CLI 메서드를 사용하여 용량 예약 그룹을 생성해야 합니다. 를 사용하는 경우 태그 기반 또는 스택 기반 리소스 그룹만 생성할 AWS Management Console수 있습니다. 용량 예약으로 인스턴스를 시작할 AWS CLI 때 태그 기반 및 스택 기반 리소스 그룹은 AWS ParallelCluster 또는에서 지원되지 않습니다.

용량 예약과 리소스 그룹을 생성한 후에는 다음 예제 클러스터 구성에 나온 것과 같이 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`CapacityReservationTarget`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CapacityReservationTarget) 또는 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/[`CapacityReservationTarget`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-CapacityReservationTarget)에 지정합니다. 빨간색으로 강조 표시된 *값을* 유효한 값으로 바꿉니다.

```
Image:
  Os: os
HeadNode:
  InstanceType: head_node_instance
  Networking:
    SubnetId: public_subnet_id
  Ssh:
    KeyName: key_name
Scheduling:
  Scheduler: scheduler
  SlurmQueues:
    - Name: queue1
      Networking:
        SubnetIds:
          - private_subnet_id
      ComputeResources:
        - Name: cr1
          Instances:
            - InstanceType: instance
          MaxCount: max_queue_size
          MinCount: max_queue_size
          Efa:
            Enabled: true
          CapacityReservationTarget:
            CapacityReservationResourceGroupArn: capacity_reservation_arn
```

### 더 이상 사용되지 않음/권장되지 않음 - Amazon EC2 인스턴스 재정의를 사용하는 대상 ODCR
<a name="odcr-parallelcuster-override-v3"></a>

**주의**  
 AWS ParallelCluster 버전 3.3.0부터는이 방법을 사용하지 않는 것이 좋습니다. 이 섹션은 이전 버전을 사용한 구현을 위한 참고 자료로 남아 있습니다.
이 방법는 Slurm을 사용한 다중 인스턴스 유형 할당과 호환되지 않습니다.

`targeted` ODCRs에 대한 지원이 AWS ParallelCluster 3.1.1에 추가되었습니다. 이번 릴리스에는 EC2 `RunInstances` 파라미터를 재정의하고 AWS ParallelCluster에서 구성된 각 컴퓨팅 리소스에 사용할 예약에 대한 정보를 전달하는 메커니즘이 도입되었습니다. 이 메커니즘은 `targeted` ODCR과 호환됩니다. 하지만 `targeted` ODCR을 사용할 때는 `run-instances` 재정의 구성을 지정해야 합니다. *대상* ODCR은 AWS CLI Amazon EC2 [https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 명령에 명시적으로 정의해야 합니다. ODCR이 인지 확인하거나 AWS CLI Amazon EC2 명령를 `open` `targeted` 실행합니다[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html).

여러 ODCR을 리소스 그룹으로 그룹화할 수 있습니다. 이는 실행 인스턴스 재정의에서 동시에 여러 ODCR을 대상으로 하는 데 사용할 수 있습니다.

`targeted` ODCR을 사용하는 경우 배치 그룹을 지정할 수 있습니다. 하지만 `run-instances` 재정의 구성도 지정해야 합니다.

에서 `targeted` ODCR을 AWS 생성했거나 특정 예약 인스턴스 세트가 있다고 가정합니다. 그러면 배치 그룹을 지정할 수 없습니다. 에서 구성하는 규칙은 배치 그룹 설정과 충돌할 AWS 수 있습니다. 따라서 애플리케이션에 배치 그룹이 필요한 경우 [CPG ODCR](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html)을 사용하세요. 두 경우 모두 `run-instances` 재정의 구성도 지정해야 합니다.

CPG ODCR을 사용하는 경우, `run-instances` 재정의 구성을 지정하고 클러스터 구성에서 동일한 배치 그룹을 지정해야 합니다.

### 에서 예약 인스턴스 사용 AWS ParallelCluster
<a name="odcr-reserved-instances"></a>

예약 인스턴스는 용량 예약 (ODCR)과 [다릅니다](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html#capacity-reservations-differences). 예약 인스턴스에는 [2가지 유형](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/reserved-instances-scope.html)이 있습니다. 리전** 예약 인스턴스에서는 용량을 예약하지 않습니다. 영역** 예약 인스턴스에서는 지정된 가용 영역에서 용량을 예약합니다.

리전 예약 인스턴스를 사용하는 경우 용량 예약이 없으므로 용량 부족 오류가 발생할 수 있습니다. 영역 예약 인스턴스를 사용하는 경우 용량을 예약한 것이지만 용량을 지정하는 데 사용할 수 있는 `run-instances` API 파라미터가 없습니다.

예약 인스턴스는 모든 AWS ParallelCluster 버전에서 지원됩니다. 에서 아무것도 지정할 필요가 AWS ParallelCluster 없으며 인스턴스가 자동으로 선택됩니다.

영역 예약 인스턴스를 사용하는 경우 클러스터 구성에서 배치 그룹 사양을 생략하여 잠재적인 용량 부족 오류를 방지할 수 있습니다.

### 더 이상 사용되지 않음/권장되지 않음 - `targeted` 온디맨드 용량 예약(ODCR)에 in AWS ParallelCluster 3 사용자 `RunInstances` 지정 사용
<a name="odcr-run-instances"></a>

**주의**  
 AWS ParallelCluster 버전 3.3.0부터는이 방법을 사용하지 않는 것이 좋습니다. 이 섹션은 이전 버전을 사용한 구현을 위한 참고 자료로 남아 있습니다.
이 방법는 Slurm을 사용한 다중 인스턴스 유형 할당과 호환되지 않습니다.

클러스터 대기열에 구성된 각 컴퓨팅 리소스의 Amazon EC2 `RunInstances` 파라미터를 재정의할 수 있습니다. 이렇게 하려면 클러스터의 헤드 노드에 다음 코드 스니펫 콘텐츠로 `/opt/slurm/etc/pcluster/run_instances_overrides.json` 파일을 생성하세요.
+ `${queue_name}`은 재정의를 적용할 대기열의 이름입니다.
+ `${compute_resource_name}`은 재정의를 적용할 컴퓨팅 리소스입니다.
+ `${overrides}`는 대기열과 인스턴스 유형의 특정 조합에 사용할 `RunInstances` 재정의 목록이 포함된 임의의 JSON 객체입니다. 재정의 구문은 [run\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.run_instances) boto3 호출에 설명된 것과 동일한 사양을 따라야 합니다.

```
{
    "${queue_name}": {
        "${compute_resource_name}": {
            ${overrides}
        },
        ...
    },
    ...
}
```

예를 들어, 다음 JSON은 `my-queue` 및 `my-compute-resource`에서 구성된 `p4d.24xlarge` 인스턴스에 사용할 ODCR 그룹 `group_arn`을 구성합니다.

```
{
    "my-queue": {
        "my-compute-resource": {
            "CapacityReservationSpecification": {
                "CapacityReservationTarget": {
                    "CapacityReservationResourceGroupArn": "group_arn"
                }
            }
        }
    }
}
```

이 JSON 파일이 생성되면 클러스터 조정을 담당하는 AWS ParallelCluster 데몬은 인스턴스 시작에 재정의 구성을 자동으로 사용합니다. 지정된 파라미터가 인스턴스 프로비저닝에 사용되고 있는지 확인하려면 다음 로그 파일을 살펴보세요.
+ `/var/log/parallelcluster/clustermgtd`(고정 용량용)
+ `/var/log/parallelcluster/slurm_resume.log`(동적 용량용)

파라미터가 정확하면 다음을 포함하는 로그 항목을 찾을 수 있습니다.

```
Found RunInstances parameters override. Launching instances with: <parameters_list>
```

### 더 이상 사용되지 않음/권장되지 않음 - `targeted` 온디맨드 용량 예약(ODCR)으로 클러스터 생성
<a name="odcr-create-cluster"></a>

**주의**  
 AWS ParallelCluster 버전 3.3.0부터는이 방법을 사용하지 않는 것이 좋습니다. 이 섹션은 이전 버전을 사용한 구현을 위한 참고 자료로 남아 있습니다.
이 방법은 [Slurm을 사용하여 여러 인스턴스 유형 할당](slurm-multiple-instance-allocation-v3.md)과 호환되지 않습니다.

1. **그룹 용량까지 리소스 그룹을 생성합니다.**

   ```
   $ aws resource-groups create-group --name EC2CRGroup \ 
       --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
   ```
**참고**  
리소스 그룹은 다른 계정과 공유하는 리소스를 지원하지 않습니다.  
대상 ODCR을 다른 계정과 공유하는 경우에는 리소스 그룹을 만들 필요가 없습니다. 3단계의 리소스 그룹 대신 `CapacityReservationId`를 사용합니다.  

   ```
   #!/bin/bash
   set -e
   
   # Override run_instance attributes
   cat > /opt/slurm/etc/pcluster/run_instances_overrides.json << EOF
   {
       "my-queue": {
           "my-compute-resource": {
               "CapacityReservationSpecification": {
                   "CapacityReservationTarget": {
                       "CapacityReservationId": "cr-abcdef01234567890"
                   }
               }
           }
       }
   }
   EOF
   ```

   리소스 그룹에 용량 예약을 추가합니다. 새 ODCR을 생성할 때마다 그룹 예약에 추가합니다. `ACCOUNT_ID`를 계정 ID로, `PLACEHOLDER_CAPACITY_RESERVATION`를 용량 예약 ID로,를 AWS 리전 ID(예: us-east-1)`REGION_ID`로 바꿉니다.

   ```
   $ aws resource-groups group-resources --region REGION_ID --group EC2CRGroup \
       --resource-arns arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/PLACEHOLDER_CAPACITY_RESERVATION
   ```

   로컬 컴퓨터에서 정책 문서를 생성합니다. `ACCOUNT_ID`를 계정 ID로 바꾸고를 AWS 리전 ID`REGION_ID`로 바꿉니다(예: us-east-1).

   ```
   cat > policy.json << EOF
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "RunInstancesInCapacityReservation",
               "Effect": "Allow",
               "Action": "ec2:RunInstances",
               "Resource": [
                   "arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/*",
                   "arn:aws:resource-groups:REGION_ID:ACCOUNT_ID:group/*"
               ]
           }
       ]
   }
   EOF
   ```

1. **생성한 json 파일을 AWS 계정 사용하여에서 IAM 정책을 생성합니다.**

   ```
   $ aws iam create-policy --policy-name RunInstancesCapacityReservation --policy-document file://policy.json
   ```

1. 다음 설치 후 스크립트를 인스턴스에 로컬로 생성하고 이름을 `postinstall.sh`로 지정합니다.****

   `ACCOUNT_ID`를 AWS 계정 ID로,를 AWS 리전 ID`REGION_ID`로 바꿉니다(예: us-east-1).

   ```
   #!/bin/bash
   set -e
   
   # Override run_instance attributes
   cat > /opt/slurm/etc/pcluster/run_instances_overrides.json << EOF
   {
       "my-queue": {
           "my-compute-resource": {
               "CapacityReservationSpecification": {
                   "CapacityReservationTarget": {
                       "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:REGION_ID:ACCOUNT_ID:group/EC2CRGroup"
                   }
               }
           }
       }
   }
   EOF
   ```

   Amazon S3 버킷에 이미지 파일을 업로드합니다. *amzn-s3-demo-bucket*을 특정 S3 버킷 이름으로 바꿉니다.

   ```
   $ aws s3 mb s3://amzn-s3-demo-bucket
   aws s3 cp postinstall.sh s3://amzn-s3-demo-bucket/postinstall.sh
   ```

1. 자리 표시자를 자체 값으로 대체하여 로컬 클러스터 구성을 생성합니다.****

   ```
   Region: REGION_ID
   Image:
     Os: alinux2
   HeadNode:
     InstanceType: c5.2xlarge
     Ssh:
       KeyName: YOUR_SSH_KEY
     Iam:
       S3Access:
         - BucketName: amzn-s3-demo-bucket
       AdditionalIamPolicies:
         - Policy: arn:aws:iam::ACCOUNT_ID:policy/RunInstancesCapacityReservation
     ## This post-install script is executed after the node is configured.
     ## It is used to install scripts at boot time and specific configurations
     ## In the script below we are overriding the calls to RunInstance to force
     ## the provisioning of our my-queue partition to go through
     ## the On-Demand Capacity Reservation
     CustomActions:
       OnNodeConfigured:
         Script: s3://amzn-s3-demo-bucket/postinstall.sh
     Networking:
       SubnetId: YOUR_PUBLIC_SUBNET_IN_TARGET_AZ
   
   Scheduling:
     Scheduler: slurm
     SlurmQueues:
       - Name: my-queue
         ComputeResources:
           - MinCount: 0
             MaxCount: 100
             InstanceType: p4d.24xlarge
             Name: my-compute-resource
             Efa:
               Enabled: true
         Networking:
           ## PlacementGroup:
           ##   Enabled: true ## Keep PG disabled if using targeted ODCR
           SubnetIds:
             - YOUR_PRIVATE_SUBNET_IN_TARGET_AZ
   ```

1. 클러스터를 생성합니다.****

   다음 명령을 사용하여 클러스터를 생성합니다. 구성 파일 이름을 `cluster-config.yaml`으로 바꾸고, 클러스터 이름을 `cluster-dl`로 바꾸고 *REGION\$1ID*를 사용자의 리전 ID(예: us-east-1)로 바꾸세요.

   ```
   $ pcluster create-cluster --cluster-configuration cluster-config.yaml --cluster-name cluster-dl --region REGION_ID
   ```

   클러스터가 생성되면 헤드 노드에서 설치 후 스크립트가 실행됩니다. 스크립트는 `run_instances_overrides.json` 파일을 생성하고 `RunInstances`에 대한 호출을 재정의하여 온디맨드 용량 예약을 통해 파티션 프로비저닝을 강제로 진행합니다.

   클러스터 조정을 담당하는 AWS ParallelCluster 데몬은 시작된 새 인스턴스에 대해이 구성을 자동으로 사용합니다. 다음 로그 파일을 보면 지정된 파라미터가 인스턴스를 프로비저닝하는 데 사용되고 있는지 확인할 수 있습니다.
   + `/var/log/parallelcluster/clustermgtd`(고정 용량용 - [`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount)` > 0`)
   + `/var/log/parallelcluster/slurm_resume.log`(동적 용량용)

   파라미터가 정확하면 다음을 포함하는 로그 항목을 찾을 수 있습니다.

   ```
   Found RunInstances parameters override. Launching instances with: <parameters_list>
   ```

 `RunInstances` 재정의 업데이트**** 

컴퓨팅 플릿을 중지하지 않고 언제든지 생성된 JSON 구성을 업데이트할 수 있습니다. 변경 사항이 적용된 후에는 모든 새 인스턴스가 업데이트된 구성으로 시작됩니다. 업데이트된 구성을 실행 중인 노드에 적용해야 하는 경우 인스턴스 종료를 강제하여 노드를 재활용하고가 해당 노드 AWS ParallelCluster 를 교체할 때까지 기다립니다. Amazon EC2 콘솔 또는 AWS CLI에서 인스턴스를 종료하거나 Slurm 노드를 `DOWN` 또는 `DRAIN` 상태로 설정하여 이 작업을 수행할 수 있습니다.

다음 명령을 사용하여 Slurm 노드를 `DOWN` 또는 `DRAIN`으로 설정합니다.

```
$ scontrol update nodename=my-queue-dy-my-compute-resource-1 state=down reason=your_reason
scontrol update nodename=my-queue-dy-my-compute-resource-1 state=drain reason=your_reason
```