使用 ODCR(按需容量预留)启动实例 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 ODCR(按需容量预留)启动实例

通过使用按需容量预留 (ODCR),您可以在特定可用区中为集群 Amazon EC2 实例预留容量达任意持续时间。通过使用这种方式,您可以独立于由 Savings Plans 或区域预留实例提供的账单账户来创建和管理容量预留

您可以配置opentargeted按需容量预留 (ODCR)。打开 ODCR 涵盖与 ODCR 属性匹配的所有实例。这些属性是实例类型、平台和可用区。您必须在群集配置中明确定义目标 ODCR。要确定 ODC open R 是还是targeted,请运行 Amazon CLI EC2 describe-capacity-reservation命令。

您还可以在集群置放群组中创建 ODCR,该群集置放群组按需容量预留 (CPG OD CR)。

多个 ODCR 可以分组到一个资源组中。这可以在群集配置文件中定义。有关资源组的更多信息,请参阅什么是资源组? 在《Res ource Groups 和标签用户指南》中。

将 ODCR 与 Amazon ParallelCluster

Amazon ParallelCluster支持打开的 ODCR。使用开放的 ODCR 时,您不需要在中指定任何内容。Amazon ParallelCluster系统会自动为集群选择实例。您可以指定现有置放群组或为自己Amazon ParallelCluster创建新组。

集群配置中的 ODCR

从Amazon ParallelCluster版本 3.3.0 开始,您可以在集群配置文件中定义 ODCR,无需指定 EC2 运行实例替代项。

首先,使用每个容量预留资源组的链接文档中描述的方法创建容量预留和资源组。您必须使用这些Amazon CLI方法来创建容量预留组。如果您使用Amazon Web Services Management Console,则只能创建基于标签或基于堆栈的资源组。启动具有容量预留的实例Amazon CLI时,Amazon ParallelCluster或不支持基于标签和基于堆栈的资源组。

创建容量预留和资源组后,在 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
警告
  • 从Amazon ParallelCluster版本 3.3.0 开始,我们不推荐使用此方法。本节仍作为使用先前版本实现的参考。

  • 此方法与 Slurm 的多实例类型分配不兼容。

3.1.1 中添加了targeted对 ODCR 的Support。Amazon ParallelCluster在此版本中,引入了一种机制,该机制可以覆盖 EC2 RunInstances 参数并传递有关预留的信息,以供中Amazon ParallelCluster每个配置的计算资源使用。此机制与 targeted ODCR 兼容。但是,在使用 targeted ODCR 时,必须指定run-instances替代配置。必须在 Amazon CLI EC2 run-instances命令中明确定义@@ 目标 ODCR。要确定 ODCR open 是否是,targeted请运行 Amazon CLI EC2 命令describe-capacity-reservation

多个 ODCR 可以分组到一个资源组中。这可以在运行实例重写中使用,以同时定位多个 ODCR。

如果您使用 targeted ODCR,则可以指定置放群组。但是,您还需要指定run-instances替代配置。

假设为您Amazon创建了一个 targeted ODCR,或者您有一组特定的预留实例。然后,您就无法指定置放群组。由配置的规则Amazon可能与置放群组设置冲突。因此,如果您的应用程序需要置放群组,请使用 CPG OD CR。在上述任何一种情况下,您还必须指定run-instances替代配置。

如果您使用的是 CPG ODCR,则必须指定run-instances替代配置,并且必须在群集配置中指定相同的置放群组。

将预留实例与 Amazon ParallelCluster

预留实例不同于容量预留 (ODCR)。预留实例有 2 种类型区域预留实例不预留容量。可用区Reserve d Instance可在指定可用区中预留容量。

如果您有区域预留实例,则没有容量预留,您可能会遇到容量不足错误。如果您有区域预留实例,则可以预留容量,但没有 run-instances API 参数可用于指定它们。

任何Amazon ParallelCluster版本都支持预留实例。您无需在中指定任何内容Amazon ParallelCluster,即可自动选择实例。

使用区域预留实例时,您可以省略集群配置中的置放群组规范,从而避免潜在的容量不足错误。

警告
  • 从Amazon ParallelCluster版本 3.3.0 开始,我们不推荐使用此方法。本节仍作为使用先前版本实现的参考。

  • 此方法与 Slurm 的多实例类型分配不兼容。

您可以替换在集群队列中配置的每个计算资源的 EC2 RunInstances 参数。为此,请在集群的头节点上创建包含以下代码片段内容的/opt/slurm/etc/pcluster/run_instances_overrides.json文件:

  • ${queue_name}是您要对其应用替代的队列的名称。

  • ${compute_resource_name}是您要对其应用替代的计算资源。

  • ${overrides}是一个任意 JSON 对象,包含用于队列和实例类型的特定组合的RunInstances替代项列表。重写语法需要遵循与 run_instances boto3 调用中记录的相同规范。

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

例如,以下 JSON 将 ODCR 组配置group_arn为用于在和中my-queue配置的p4d.24xlarge实例。my-compute-resource

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

生成此 JSON 文件后,负责集群扩展的Amazon 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":"Amazon::EC2::CapacityReservationPool"}' '{"Type":"Amazon::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["Amazon::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 和REGION_ID您的 Amazon Web Services 区域 ID(例如 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的 Amazon Web Services 区域 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. Amazon Web Services 账户使用您创建的 json 文件为您创建 IAM 策略。

    $ aws iam create-policy --policy-name RunInstancesCapacityReservation --policy-document file://policy.json
  3. 在实例上本地创建以下安装后脚本并将其命名postinstall.sh

    ACCOUNT_ID替换为您的 Amazon Web Services 账户 ID 和您REGION_ID的 Amazon Web Services 区域 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 桶。将 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,强制分区配置通过按需容量预留。

    负责集群扩展的Amazon ParallelCluster守护程序会自动将此配置用于启动的新实例。要确认指定参数用于预置实例,您可以查看以下日志文件:

    • /var/log/parallelcluster/clustermgtd(用于静态容量-MinCount > 0

    • /var/log/parallelcluster/slurm_resume.log(用于动态容量)

    如果参数正确,你会发现日志条目包含以下内容。

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

更新RunInstances替代项

您可以随时更新生成的 JSON 配置,而无需停止计算队列。应用更改后,所有新实例都使用更新的配置启动。如果您需要将更新的配置应用于正在运行的节点,请通过强制终止实例Amazon ParallelCluster来回收节点,然后等待替换这些节点。您可以通过从 EC2 控制台终止实例或Amazon CLI将 Slurm 节点设置为或状态来执行此操作。DOWN DRAIN

使用以下命令将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