本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用按需容量预留启动实例 (ODCR)
通过按需容量预留 (ODCR),您可以在特定可用区为集群 Amazon EC2 实例预留容量。通过这种方式,您可以独立于由节省计划
您可以配置open
或targeted
ODCR。打开ODCR所有与ODCR属性匹配的实例。这些属性包括实例类型、平台和可用区。您必须在群集配置ODCR中明确定义目标。要确定是open
还是ODCR是targeted
,请运行 AWS CLI
Amazon EC2 describe-capacity-reservation
命令。
您还可以在集群ODCR中创建名为集群置放群组按需容量预留 (CPGODCR) 的置放群组。
ODCRs可以将多个资源分组到一个资源组中。这可以在集群配置文件中定义。有关资源组的更多信息,请参阅 Resource Groups and Tags User Guide 中的 What are resource groups?。
ODCR与一起使用 AWS ParallelCluster
AWS ParallelCluster 支持打开ODCR。使用 open 时ODCR,无需在中指定任何内容 AWS ParallelCluster。系统会自动为集群选择实例。您可以指定现有的置放群组或为您 AWS ParallelCluster 创建一个新的置放群组。
ODCR在集群配置中
从 AWS ParallelCluster 版本 3.3.0 开始,您可以在集群配置文件ODCRs中进行定义,而无需指定 Amazon EC2 运行实例替代。
您首先使用各自链接文档中描述的方法创建容量预留和资源组。您必须使用这些 AWS CLI 方法来创建容量预留组。如果您使用 AWS Management Console,则只能创建基于标签或基于堆栈的资源组。启动带有容量预留的实例 AWS CLI 时, AWS ParallelCluster 或不支持基于标签和基于堆栈的资源组。
创建容量预留和资源组后,在 SlurmQueues/CapacityReservationTarget 或 SlurmQueues/ComputeResources/CapacityReservationTarget 中指定它们,如以下集群配置示例所示。Replace(替换) values
用红色高亮显示您的有效值。
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
警告
-
从 3.3.0 AWS ParallelCluster 版开始,我们不建议使用这种方法。本节仍然是使用先前版本的实施参考。
-
此方法与 Slurm 的多实例类型分配不兼容。
AWS ParallelCluster 3.1.1 中增加了targeted
ODCRs对 Support 的支持。在此版本中,引入了一种机制,该机制可以覆盖EC2RunInstances
参数并传递有关预留的信息,以用于中 AWS ParallelCluster配置的每个计算资源。此机制与兼容targeted
ODCR。但是,在使用时 targeted
ODCR,必须指定run-instances
覆盖配置。ODCRs必须在 AWS CLI Amazon EC2 run-instances
命令中明确定义@@ 目标。要确定ODCR是open
还是targeted
运行 AWS CLI Amazon EC2 命令describe-capacity-reservation
。
ODCRs可以将多个资源分组到一个资源组中。这可以用在运行实例覆盖中,以同时定位多个ODCRs实例。
如果您使用的是 targeted
ODCR,则可以指定置放群组。但您还需要指定 run-instances
覆盖配置。
假设targeted
ODCR为您 AWS 创建了一个,或者您有一组特定的预留实例。则您无法指定置放群组。由配置的规则 AWS 可能与置放群组设置冲突。因此,如果您的应用程序需要置放群组,请使用CPGODCR。在任何一种情况下,您还必须指定 run-instances
覆盖配置。
如果您使用的是 CPGODCR,则必须指定run-instances
覆盖配置,并且必须在集群配置中指定相同的置放群组。
将预留实例与 AWS ParallelCluster
预留实例与容量预留 (ODCR) 不同。预留实例有两种类型。区域性预留实例不预留容量。分区预留实例可在指定可用区中预留容量。
如果您有区域性预留实例,则没有容量预留,可能会出现容量不足错误。如果您有区域预留实例,则可以预留容量,但没有run-instances
API参数可以用来指定它们。
任何 AWS ParallelCluster 版本都支持预留实例。您无需在中指定任何内容 AWS ParallelCluster ,实例就会自动选中。
使用分区预留实例时,您可以不在集群配置中指定置放群组,从而避免潜在的容量不足错误。
警告
-
从 3.3.0 AWS 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文件后,负责集群扩展的 AWS ParallelCluster 守护程序会自动使用覆盖配置来启动实例。要确认实例预置是否使用了指定的参数,请查看以下日志文件:
-
/var/log/parallelcluster/clustermgtd
(对于静态容量) -
/var/log/parallelcluster/slurm_resume.log
(对于动态容量)
如果参数正确,您会发现包含以下内容的日志条目:
Found RunInstances parameters override. Launching instances with: <parameters_list>
警告
-
从 3.3.0 AWS ParallelCluster 版开始,我们不建议使用这种方法。本节仍然是使用先前版本的实施参考。
-
此方法与 Slurm 的多实例类型分配不兼容。
-
创建资源组以对容量分组。
$
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,都要将其添加到群组预约中。Replace(替换)
使用您的账户 ID,ACCOUNT_ID
使用您的容量预留 ID,以及PLACEHOLDER_CAPACITY_RESERVATION
使用你的 AWS 区域 身份证(例如 us-east-1)。REGION_ID
$
aws resource-groups group-resources --region
REGION_ID
--groupEC2CRGroup
\ --resource-arns arn:aws:ec2:REGION_ID
:ACCOUNT_ID
:capacity-reservation/PLACEHOLDER_CAPACITY_RESERVATION
在本地计算机中创建策略文档。Replace(替换)
使用您的账户 ID 和ACCOUNT_ID
使用你的 AWS 区域 身份证(例如 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 -
AWS 账户 使用您创建的 json 文件在您的上创建IAM策略。
$
aws iam create-policy --policy-name
RunInstancesCapacityReservation
--policy-document file://policy.json -
在实例上本地创建以下安装后脚本并将其命名为
postinstall.sh
。
替换为你的 AWS 账户 身份证和ACCOUNT_ID
你的 AWS 区域 身份证(例如 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 存储桶。Replace(替换)
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 -
创建本地集群配置,将占位符替换为您自己的值。
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
-
创建集群。
使用以下命令来创建集群。Replace(替换)
用你的配置文件名,集群配置.yaml
使用您的集群名称,以及集群-dl
REGION_ID
使用您的地区编号(例如 us-east-1)。$
pcluster create-cluster --cluster-configuration
cluster-config.yaml
--cluster-namecluster-dl
--regionREGION_ID
创建集群后,安装后脚本将在头节点中运行。该脚本将会创建
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,或者通过设置 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