使用隨需容量保留 (ODCR) 啟動執行個體 - AWS ParallelCluster

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

使用隨需容量保留 (ODCR) 啟動執行個體

使用隨需容量保留 (ODCR),您可以為特定可用區域中的叢集 Amazon EC2 執行個體預留容量。如此一來,您就可以獨立於 S avings Plan s 或地區預留執行個體提供的帳單帳戶建立和管理容量保留

您可以配置opentargeted ODCR。「開啟 ODCR」會涵蓋符合 ODCR 屬性的所有實例。這些屬性包括執行個體類型、平台和可用區域。您必須在叢集配置中明確定義目標 ODCR。若要判斷是open否為 ODCRtargeted,請執行 AWS CLI Amazon EC2 describe-capacity-reservation命令。

您也可以在稱為叢集置放群組隨選容量保留 (CPG ODCR) 的叢集置放群組中建立 OD CR。

可以在資源群組中分組多個 ODC。這可以在群集配置文件中定義。如需有關資源群組的詳細資訊,請參閱什麼是資源群組? 在《Res ource Groups 與標籤使用指南》中。

使用 OCR 搭配使用 AWS ParallelCluster

AWS ParallelCluster 支持開放的 ODCR。使用開啟的 ODCR 時,您不需要在中指定任何內 AWS ParallelCluster容。系統會自動為叢集選取執行個體。您可以指定現有的放置群組,也可以為您 AWS ParallelCluster 建立新的放置群組。

叢集配置中的 ODCR

從 AWS ParallelCluster 版本 3.3.0 開始,您可以在叢集組態檔中定義 ODC,而不需要指定 Amazon EC2 執行個體覆寫。

首先,您可以使用連結文件集中描述的方法來建立容量保留資源群組。您必須使用這 AWS CLI 些方法來建立容量保留群組。如果使用 AWS Management Console,則只能建立以標籤為基礎或堆疊式資源群組。 AWS ParallelCluster 或在啟動具有容量保留的執行個體 AWS CLI 時,不支援以標記為基礎和堆疊型資源群組。

建立容量保留區和資源群組之後,請在 SlurmQueues/CapacityReservationTargetSlurmQueuesComputeResources/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 的多個實例類型分配不兼容。

在 3.1.1 中 AWS ParallelCluster 新增了對 targeted ODC 的 Support。在此版本中,引入了一種機制,該機制會覆寫 EC2 RunInstances 參數,並傳遞保留相關資訊,以用於中的每個已設定運算資源 AWS ParallelCluster。這種機制與 targeted ODCR 兼容。但是,當您使用 targeted ODCR 時,您必須指定run-instances覆寫組態。目標 OCR 必須在 AWS CLI Amazon EC2 run-instances命令中明確定義。判斷是否有 ODCR opentargeted執行 AWS CLI Amazon EC2 命令describe-capacity-reservation

可以在資源群組中分組多個 ODC。這可用於執行執行個體覆寫,以同時鎖定多個 ODC。

如果您使用的是 targeted ODCR,您可以指定放置群組。但是,您也需要指定run-instances覆寫組態。

假設為您 AWS 建立了 targeted ODCR,或者您擁有一組特定的預留執行個體。然後,您就無法指定刊登位置群組。由所配置的規則 AWS 可能會與置放群組設定衝突。因此,如果您的申請需要安置組,請使用 CPG OD CR。在任何一種情況下,您也必須指定run-instances覆寫組態。

如果您使用的是 CPG ODCR,則必須指定run-instances覆寫配置,並且必須在叢集配置中指定相同的置放群組。

使用預留執行個體 AWS ParallelCluster

預留執行個體與容量保留 (ODCR) 不同。預留執行個體有 2 種類型。地預留執行個體不保留容量。區域預留執行個體會在指定的可用區域中保留容量。

如果您有區域預留執行個體,則沒有容量保留,而且可能會出現容量不足錯誤。如果您有區域預留執行個體,則您有容量保留,但沒有可用來指定它們的 run-instances API 參數。

任何 AWS ParallelCluster 版本都支援預留執行個體。您不必在中指定任何內容, AWS ParallelCluster 而且會自動選取實體。

使用區域預留執行個體時,您可以省略叢集配置中的放置群組規格,以避免潛在的容量不足錯誤。

警告
  • 從 AWS ParallelCluster 版本 3.3.0 開始,我們不建議使用此方法。本節仍作為使用先前版本之實作的參考。

  • 此方法與 Slurm 的多個實例類型分配不兼容。

您可以為叢集佇列中設定的每個運算資源覆寫 Amazon EC2 RunInstances 參數。若要這麼做,請使用下列程式碼片段內容,在叢集的 head 節點上建立/opt/slurm/etc/pcluster/run_instances_overrides.json檔案:

  • ${queue_name}是您要套用覆寫項目的佇列名稱。

  • ${compute_resource_name}是您要套用覆寫的計算資源。

  • ${overrides}是任意 JSON 物件,其中包含要用於佇列和執行個體類型之特定組合的RunInstances覆寫清單。覆寫語法需要遵循與 run_instance boto3 呼叫中所記錄的相同規格。

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

例如,下列 JSON 會設定group_arn要用於和中設定的p4d.24xlarge執行個體的 ODCR 群組。my-queue my-compute-resource

{     "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>
警告
  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的容量保留識別碼以及您REGION_ID的 AWS 區域 識別碼 (例如 us-east-1) 取代。

    $ 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 和您REGION_ID的 AWS 區域 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
  2. AWS 帳戶 使用您建立的 json 檔案建立 IAM 政策。

    $ aws iam create-policy --policy-name RunInstancesCapacityReservation --policy-document file://policy.json
  3. 在執行個體本機上建立下列安裝後指令碼,並將其命名postinstall.sh

    ACCOUNT_ID用您的 AWS 帳戶 身份證和您REGION_ID的 AWS 區域 身份證替換(例如 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 儲存貯體。將 S3_NAME 儲存貯體取代為您的特定 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

    建立叢集之後,安裝後指令碼會在 head 節點中執行。指令碼會建立run_instances_overrides.json檔案並覆寫呼叫,RunInstances以強制佈建磁碟分割透過隨選容量保留。

    負責叢集擴展的 AWS ParallelCluster 精靈會針對已啟動的新執行個體自動使用此設定。若要確認指定的參數是用來佈建執行個體,您可以查看下列記錄檔:

    • /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 取代這些節點。您可以透過從 Amazon EC2 主控台終止執行個體 AWS CLI,或者在DOWNDRAIN狀態中設定Slurm節點來執行此操作。

使用以下命令將Slurm節點設置為DOWNDRAIN

$ 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