ODCR(온디맨드 용량 예약)로 인스턴스 시작 - AWS ParallelCluster

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

ODCR(온디맨드 용량 예약)로 인스턴스 시작

온디맨드 용량 예약(ODCR)에서는 특정 가용 영역의 Amazon EC2 인스턴스에 예약 용량을 제공합니다. 따라서 절감형 플랜 또는 리전 예약 인스턴스에서 제공하는 결제 할인과는 별도로 용량 예약을 생성 및 관리할 수 있습니다.

open 또는 targeted 온디맨드 용량 예약(ODCR)을 구성할 수 있습니다. 개방형 ODCR은 ODCR 특성과 일치하는 모든 인스턴스를 포함합니다. 이러한 속성은 인스턴스 유형, 플랫폼 및 가용 영역입니다. 클러스터 구성에서 대상 ODCR을 명시적으로 정의해야 합니다. ODCR이 open 또는 targeted인지 확인하려면 AWS CLI EC2 describe-capacity-reservation 명령을 실행합니다.

클러스터 배치 그룹 온디맨드 용량 예약(CPG ODCR)이라고 하는 클러스터 배치 그룹에서 ODCR을 생성할 수도 있습니다.

여러 ODCR을 리소스 그룹으로 그룹화할 수 있습니다. 이는 클러스터 구성 파일에서 정의할 수 있습니다. 리소스 그룹에 대한 자세한 내용은 리소스 그룹 및 태그 사용 설명서리소스 그룹이란 무엇입니까?를 참조하세요.

AWS ParallelCluster으로 ODCR 사용

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

클러스터 구성의 ODCR

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

먼저 링크된 각 문서에 설명된 방법을 사용하여 용량 예약리소스 그룹을 생성합니다. AWS CLI 방법을 사용하여 용량 예약 그룹을 생성해야 합니다. AWS Management Console을 사용하는 경우 태그 기반 또는 스택 기반 리소스 그룹만 생성할 수 있습니다. 태그 기반 및 스택 기반 리소스 그룹은 용량 예약이 있는 인스턴스를 시작할 때 AWS ParallelCluster 또는 AWS CLI에 의해 지원되지 않습니다.

용량 예약과 리소스 그룹을 생성한 후에는 다음 예제 클러스터 구성에 나온 것과 같이 SlurmQueues/CapacityReservationTarget 또는 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
주의
  • AWS ParallelCluster 버전 3.3.0부터는 이 방법을 사용하지 않는 것이 좋습니다. 이 섹션은 이전 버전을 사용한 구현을 위한 참고 자료로 남아 있습니다.

  • 이 방법는 Slurm을 사용한 다중 인스턴스 유형 할당과 호환되지 않습니다.

targeted ODCR에 대한 지원은 AWS ParallelCluster 3.1.1에 추가되었습니다. 이번 릴리스에는 EC2 RunInstances 파라미터를 재정의하고 AWS ParallelCluster에서 구성된 각 컴퓨팅 리소스에 사용할 예약에 대한 정보를 전달하는 메커니즘이 도입되었습니다. 이 메커니즘은 targeted ODCR과 호환됩니다. 하지만 targeted ODCR을 사용할 때는 run-instances 재정의 구성을 지정해야 합니다. 대상 ODCR은 AWS CLI EC2 run-instances 명령에 명시적으로 정의해야 합니다. ODCR이 open 또는 targeted인지 확인하려면 AWS CLI EC2 명령 describe-capacity-reservation를 실행하세요.

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

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

대신 AWS가 targeted ODCR을 생성했거나 특정 예약 인스턴스 세트를 보유하고 있다고 가정해 보겠습니다. 그러면 배치 그룹을 지정할 수 없습니다. AWS에서 구성한 규칙이 배치 그룹 설정과 충돌할 수 있습니다. 따라서 애플리케이션에 배치 그룹이 필요한 경우 CPG ODCR을 사용하세요. 두 경우 모두 run-instances 재정의 구성도 지정해야 합니다.

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

AWS ParallelCluster로 예약 인스턴스 사용

예약 인스턴스는 용량 예약 (ODCR)과 다릅니다. 예약 인스턴스에는 2가지 유형이 있습니다. 리전 예약 인스턴스에서는 용량을 예약하지 않습니다. 영역 예약 인스턴스에서는 지정된 가용 영역에서 용량을 예약합니다.

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

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

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

주의
  • AWS ParallelCluster 버전 3.3.0부터는 이 방법을 사용하지 않는 것이 좋습니다. 이 섹션은 이전 버전을 사용한 구현을 위한 참고 자료로 남아 있습니다.

  • 이 방법는 Slurm을 사용한 다중 인스턴스 유형 할당과 호환되지 않습니다.

클러스터 대기열에 구성된 각 컴퓨팅 리소스의 EC2 RunInstances 파라미터를 재정의할 수 있습니다. 이렇게 하려면 클러스터의 헤드 노드에 다음 코드 스니펫 콘텐츠로 /opt/slurm/etc/pcluster/run_instances_overrides.json 파일을 생성하세요.

  • ${queue_name}은 재정의를 적용할 대기열의 이름입니다.

  • ${compute_resource_name}은 재정의를 적용할 컴퓨팅 리소스입니다.

  • ${overrides}는 대기열과 인스턴스 유형의 특정 조합에 사용할 RunInstances 재정의 목록이 포함된 임의의 JSON 객체입니다. 재정의 구문은 run_instances boto3 호출에 설명된 것과 동일한 사양을 따라야 합니다.

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

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

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

이 JSON 파일이 생성되면 클러스터 확장을 담당하는 AWS ParallelCluster 대몬(daemon)은 자동으로 인스턴스 시작을 위한 재정의 구성을 사용합니다. 지정된 파라미터가 인스턴스 프로비저닝에 사용되고 있는지 확인하려면 다음 로그 파일을 살펴보세요.

  • /var/log/parallelcluster/clustermgtd(고정 용량용)

  • /var/log/parallelcluster/slurm_resume.log(동적 용량용)

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

Found RunInstances parameters override. Launching instances with: <parameters_list>
주의
  • AWS ParallelCluster 버전 3.3.0부터는 이 방법을 사용하지 않는 것이 좋습니다. 이 섹션은 이전 버전을 사용한 구현을 위한 참고 자료로 남아 있습니다.

  • 이 방법은 Slurm을 사용하여 여러 인스턴스 유형 할당과 호환되지 않습니다.

  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을 생성할 때마다 그룹 예약에 추가합니다. 계정 ID를 ACCOUNT_ID로, 용량 예약 ID를 PLACEHOLDER_CAPACITY_RESERVATION으로, 사용자의 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

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

    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
  2. 생성한 json 파일을 AWS 계정 사용하여 사용자의 에 IAM 정책을 생성합니다.

    $ aws iam create-policy --policy-name RunInstancesCapacityReservation --policy-document file://policy.json
  3. 다음 설치 후 스크립트를 인스턴스에 로컬로 생성하고 이름을 postinstall.sh로 지정합니다.

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

    #!/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 버킷에 이미지 파일을 업로드합니다. S3_NAME_BUCKET을 특정 S3 버킷 이름으로 바꿉니다.

    $ aws s3 mb s3://S3_NAME_BUCKET aws s3 cp postinstall.sh s3://S3_NAME_BUCKET/postinstall.sh
  4. 자리 표시자를 자체 값으로 대체하여 로컬 클러스터 구성을 생성합니다.

    Region: REGION_ID Image:   Os: alinux2 HeadNode:   InstanceType: c5.2xlarge   Ssh:     KeyName: YOUR_SSH_KEY   Iam:     S3Access:       - BucketName: S3_NAME_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://S3_NAME_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
  5. 클러스터를 생성합니다.

    다음 명령을 사용하여 클러스터를 생성합니다. 구성 파일 이름을 cluster-config.yaml으로 바꾸고, 클러스터 이름을 cluster-dl로 바꾸고 REGION_ID를 사용자의 리전 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 대몬(daemon)은 새로 시작되는 인스턴스에 이 구성을 자동으로 사용합니다. 다음 로그 파일을 보면 지정된 파라미터가 인스턴스를 프로비저닝하는 데 사용되고 있는지 확인할 수 있습니다.

    • /var/log/parallelcluster/clustermgtd(고정 용량용 - MinCount > 0)

    • /var/log/parallelcluster/slurm_resume.log(동적 용량용)

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

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

RunInstances 재정의 업데이트

컴퓨팅 플릿을 중지하지 않고 언제든지 생성된 JSON 구성을 업데이트할 수 있습니다. 변경 사항이 적용된 후에는 모든 새 인스턴스가 업데이트된 구성으로 시작됩니다. 업데이트된 구성을 실행 중인 노드에 적용해야 하는 경우 인스턴스를 강제로 종료하여 노드를 재활용하고 AWS ParallelCluster가 해당 노드를 교체할 때까지 기다리세요. 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