本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用按需容量预留(ODCR)启动实例
通过按需容量预留 (ODCR),您可以在特定可用区为集群 Amazon EC2 实例预留容量。通过这种方式,您可以独立于由节省计划
您可以配置open或targeted ODCR。开放式 ODCR 涵盖与 ODCR 属性匹配的所有实例。这些属性包括实例类型、平台和可用区。您必须在集群配置中显式定义定向 ODCR。要确定 ODC open R 是还是targeted,请运行 Amazon CLI
Amazon EC2 describe-capacity-reservation命令。
您还可以在集群置放群组中创建 ODCR,称为集群置放群组按需容量预留 (CPG ODCR)。
ODCRs 可以将多个资源分组到一个资源组中。这可以在集群配置文件中定义。有关资源组的更多信息,请参阅 Resource Groups and Tags User Guide 中的 What are resource groups?。
将 ODCR 与 Amazon ParallelCluster
Amazon ParallelCluster 支持开放式 ODCR。使用开放式 ODCR 时,您不需要在 Amazon ParallelCluster中指定任何内容。系统会自动为集群选择实例。您可以指定现有的置放群组或为您 Amazon ParallelCluster 创建一个新的置放群组。
集群配置中的 ODCR
从 Amazon ParallelCluster 版本 3.3.0 开始,您可以在集群配置文件 ODCRs 中进行定义,而无需指定 Amazon EC2 运行实例替代。
您首先使用各自链接文档中描述的方法创建容量预留和资源组。您必须使用这些 Amazon CLI 方法来创建容量预留组。如果您使用 Amazon Web Services 管理控制台,则只能创建基于标签或基于堆栈的资源组。启动带有容量预留的实例 Amazon CLI 时, Amazon ParallelCluster 或不支持基于标签和基于堆栈的资源组。
创建容量预留和资源组后,在 SlurmQueues/CapacityReservationTarget 或 SlurmQueues/ComputeResources/CapacityReservationTarget 中指定它们,如以下集群配置示例所示。用您的有效值替换以红色values突出显示的内容。
Image: Os:osHeadNode: InstanceType:head_node_instanceNetworking: SubnetId:public_subnet_idSsh: KeyName:key_nameScheduling: Scheduler:schedulerSlurmQueues: - Name: queue1 Networking: SubnetIds: -private_subnet_idComputeResources: - Name: cr1 Instances: - InstanceType:instanceMaxCount:max_queue_sizeMinCount:max_queue_sizeEfa: Enabled: true CapacityReservationTarget: CapacityReservationResourceGroupArn:capacity_reservation_arn
警告
-
从 3.3.0 Amazon ParallelCluster 版开始,我们不建议使用这种方法。本节仍然是使用先前版本的实施参考。
-
此方法与 Slurm 的多实例类型分配不兼容。
Amazon ParallelCluster 3.1.1 中增加了targeted ODCRs 对 Support 的支持。在此版本中,引入了一种机制,该机制可以覆盖 EC2RunInstances参数并传递有关预留的信息,以用于中 Amazon ParallelCluster配置的每个计算资源。该机制与targeted ODCR 兼容。但在使用targeted ODCR 时,必须指定 run-instances 覆盖配置。 ODCRs 必须在 Amazon CLI Amazon EC2 run-instances命令中明确定义@@ 目标。要确定 ODCR 是open还是targeted运行 Amazon CLI Amazon EC2 命令describe-capacity-reservation。
ODCRs 可以将多个资源分组到一个资源组中。这可以用在运行实例覆盖中,以同时定位多个 ODCRs 实例。
如果您使用的是 targeted ODCR,则可以指定置放群组。但您还需要指定 run-instances 覆盖配置。
假设为您 Amazon 创建了一个 targeted ODCR,或者您有一组特定的预留实例。则您无法指定置放群组。由配置的规则 Amazon 可能与置放群组设置冲突。因此,如果您的应用程序需要置放群组,请使用 CPG ODCR。在任何一种情况下,您还必须指定 run-instances 覆盖配置。
如果您使用的是 CPG ODCR,则必须指定 run-instances 覆盖配置,并且必须在集群配置中指定相同的置放群组。
将预留实例与 Amazon ParallelCluster
预留实例不同于容量预留 (ODCR)。预留实例有两种类型。区域性预留实例不预留容量。分区预留实例可在指定可用区中预留容量。
如果您有区域性预留实例,则没有容量预留,可能会出现容量不足错误。如果您有分区预留实例,则有容量预留,但没有 run-instances API 参数可以用来指定容量预留。
任何 Amazon ParallelCluster 版本都支持预留实例。您无需在中指定任何内容 Amazon ParallelCluster ,实例就会自动选中。
使用分区预留实例时,您可以不在集群配置中指定置放群组,从而避免潜在的容量不足错误。
警告
-
从 3.3.0 Amazon ParallelCluster 版开始,我们不建议使用这种方法。本节仍然是使用先前版本的实施参考。
-
此方法与 Slurm 的多实例类型分配不兼容。
您可以为在集群队列中配置的每个计算资源覆盖 Amazon EC2 RunInstances 参数。为此,请在集群的头节点上创建包含以下代码片段内容的 /opt/slurm/etc/pcluster/run_instances_overrides.json 文件:
-
${queue_name}是要对其应用覆盖的队列的名称。 -
${compute_resource_name}是要对其应用覆盖的计算资源。 -
${overrides}是一个任意 JSON 对象,其中包含用于队列和实例类型特定组合的RunInstances替代列表。覆盖语法必须遵循与 run_instancesboto3 调用中记录的规范相同的规范。
{ "${queue_name}": { "${compute_resource_name}": { ${overrides} }, ... }, ... }
例如,以下 JSON 将 ODCR 组 group_arn 配置为用于 my-queue 和 my-compute-resource 中配置的 p4d.24xlarge 实例。
{"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>
警告
-
从 3.3.0 Amazon ParallelCluster 版开始,我们不建议使用这种方法。本节仍然是使用先前版本的实施参考。
-
此方法与 Slurm 的多实例类型分配不兼容。
-
创建资源组以对容量分组。
$aws resource-groups create-group --nameEC2CRGroup\ --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 时,请将其添加到群组预留中。
替换为您的账户 ID、ACCOUNT_ID容量预留 ID 和PLACEHOLDER_CAPACITY_RESERVATION您的 Amazon Web Services 区域 ID(例如 us-east-1)。REGION_ID$aws resource-groups group-resources --regionREGION_ID--groupEC2CRGroup\ --resource-arns arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/PLACEHOLDER_CAPACITY_RESERVATION在本地计算机中创建策略文档。
替换为您的账户 ID 和ACCOUNT_IDAmazon Web Services 区域 ID(例如 us-east-1)。REGION_IDcat > 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 -
Amazon Web Services 账户 使用您创建的 json 文件在您的上创建 IAM 策略。
$aws iam create-policy --policy-nameRunInstancesCapacityReservation--policy-document file://policy.json -
在实例上本地创建以下安装后脚本并将其命名为
postinstall.sh。替换为你的 Amazon Web Services 账户 身份证和ACCOUNT_ID你的 Amazon Web Services 区域 身份证(例如 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 存储桶。
amzn-s3-demo-bucket替换为您特定的 S3 存储桶名称。$aws s3 mb s3://amzn-s3-demo-bucketaws s3 cp postinstall.sh s3://amzn-s3-demo-bucket/postinstall.sh -
创建本地集群配置,将占位符替换为您自己的值。
Region:REGION_IDImage: Os: alinux2 HeadNode: InstanceType: c5.2xlarge Ssh: KeyName:YOUR_SSH_KEYIam: S3Access: - BucketName:amzn-s3-demo-bucketAdditionalIamPolicies: - 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_AZScheduling: Scheduler: slurm SlurmQueues: - Name: my-queue ComputeResources: - MinCount: 0 MaxCount: 100 InstanceType: p4d.24xlarge Name:my-compute-resourceEfa: Enabled: true Networking: ## PlacementGroup: ## Enabled: true ## Keep PG disabled if using targeted ODCR SubnetIds: -YOUR_PRIVATE_SUBNET_IN_TARGET_AZ -
创建集群。
使用以下命令来创建集群。
替换为配置文件名、cluster-config.yaml集群cluster-dlREGION_ID名称和区域 ID(例如 us-east-1)。$pcluster create-cluster --cluster-configurationcluster-config.yaml--cluster-namecluster-dl--regionREGION_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 来回收节点,然后等待替换这些节点。为此,您可以从 Amazon EC2 控制台终止实例 Amazon CLI,或者将Slurm节点设置为DOWN或DRAIN状态。
使用以下命令将 Slurm 节点设置为 DOWN 或 DRAIN。
$scontrol update nodename=my-queue-dy-my-compute-resource-1state=down reason=your_reasonscontrol update nodename=my-queue-dy-my-compute-resource-1state=drain reason=your_reason