本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 ODCR(按需容量预留)启动实例
通过使用按需容量预留 (ODCR),您可以在特定可用区中为集群 Amazon EC2 实例预留容量达任意持续时间。通过使用这种方式,您可以独立于由 Savings Plans 或区域预留实例提供的账单账户来创建和管理容量预留。
您可以配置open
targeted
按需容量预留 (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/CapacityReservationTarget或 SlurmQueuesComputeResources/中指定容量预留和资源组,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>
警告
-
从Amazon ParallelCluster版本 3.3.0 开始,我们不推荐使用此方法。本节仍作为使用先前版本实现的参考。
-
此方法与不兼容使用 Slurm 进行多实例类型分配。
-
创建资源组,对容量进行分组。
$
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 时,都要将其添加到团体预订中。
替换为您的账户 ID、ACCOUNT_ID
容量预留 ID 和PLACEHOLDER_CAPACITY_RESERVATION
您的 Amazon Web Services 区域 ID(例如 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
在本地计算机中创建策略文档。
替换为您的账户 ID 和您ACCOUNT_ID
的 Amazon Web Services 区域 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 -
Amazon Web Services 账户使用您创建的 json 文件为您创建 IAM 策略。
$
aws iam create-policy --policy-name
RunInstancesCapacityReservation
--policy-document file://policy.json -
在实例上本地创建以下安装后脚本并将其命名
postinstall.sh
。
替换为您的 Amazon Web Services 账户 ID 和您ACCOUNT_ID
的 Amazon Web Services 区域 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 -
创建本地群集配置,用您自己的值替换占位符。
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
-
创建集群。
使用以下命令创建集群。
使用您的配置文件名替换为您的集群名称,cluster-config.yaml
并将 REGIONcluster-dl
_ID 替换为您的区域 ID
(例如,us-east-1)。$
pcluster create-cluster --cluster-configuration
cluster-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来回收节点,然后等待替换这些节点。您可以通过从 EC2 控制台终止实例或Amazon 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