ML 容量块 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

ML 容量块

重要
  • 容量块仅适用于某些 Amazon EC2 实例类型和 Amazon Web Services 区域。有关兼容性信息,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的使用容量块

  • 容量块目前不支持 Amazon EKS 托管节点组或 Karpenter。

机器学习(ML)容量块允许您在未来某个日期预留 GPU 实例,从而支持您的短期 ML 工作负载。在容量块内运行的实例会自动在 Amazon EC2 UltraClusters 中紧密放置,因此无需使用集群置放群组。有关更多信息,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的适用于 ML 的容量块

您可以将容量块与 Amazon EKS 配合使用来预置和扩展自己的自行管理节点。以下步骤给出了一般的示例概述。

  1. 在 Amazon Web Services Management Console 中创建启动模板。有关更多信息,请参阅《Amazon EC2 Auto Scaling 用户指南》中的将容量块用于机器学习工作负载

    请务必包括实例类型和 Amazon 系统映像(AMI)的配置。

  2. 使用容量预留 ID 将容量块链接到启动模板。

    以下是针对容量块创建启动模板的示例 Amazon CloudFormation 模板:

    NodeLaunchTemplate: Type: "Amazon::EC2::LaunchTemplate" Properties: LaunchTemplateData: InstanceMarketOptions: MarketType: "capacity-block" CapacityReservationSpecification: CapacityReservationTarget: CapacityReservationId: "cr-02168da1478b509e0" IamInstanceProfile: Arn: iam-instance-profile-arn ImageId: image-id InstanceType: p5.48xlarge KeyName: key-name SecurityGroupIds: - sg-05b1d815d1EXAMPLE UserData: user-data

    由于容量块是区域性的,因此必须将子网传递到进行预留的可用区。

  3. 如果您在容量预留变为活动状态之前创建自行管理节点组,请将所需容量设置为 0。创建节点组时,请确保仅为预留容量的可用区指定相应的子网。

    以下是可供使用的 CloudFormation 模板示例。此示例获取上一个示例中所显示 Amazon::Amazon EC2::LaunchTemplate 资源的 LaunchTemplateIdVersion。它还会获取 DesiredCapacityMaxSizeMinSizeVPCZoneIdentifier 的值,这些内容在同一模板的其他位置声明。

    NodeGroup: Type: "AWS::AutoScaling::AutoScalingGroup" Properties: DesiredCapacity: !Ref NodeAutoScalingGroupDesiredCapacity LaunchTemplate: LaunchTemplateId: !Ref NodeLaunchTemplate Version: !GetAtt NodeLaunchTemplate.LatestVersionNumber MaxSize: !Ref NodeAutoScalingGroupMaxSize MinSize: !Ref NodeAutoScalingGroupMinSize VPCZoneIdentifier: !Ref Subnets Tags: - Key: Name PropagateAtLaunch: true Value: !Sub ${ClusterName}-${NodeGroupName}-Node - Key: !Sub kubernetes.io/cluster/${ClusterName} PropagateAtLaunch: true Value: owned
  4. 成功创建节点组后,请务必记录已创建节点组的 NodeInstanceRole。您需要此信息以确保在扩展节点组时,新节点会加入集群,并且 Kubernetes 能够识别节点。有关更多信息,请参阅 启动自行管理的 Amazon Linux 节点 中的 Amazon Web Services Management Console 说明。

  5. 我们建议您为 Auto Scaling 组创建与容量块预留时间保持一致的计划扩展策略。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的 Amazon EC2 Auto Scaling 的计划扩展

    您可以在容量块结束时间前 30 分钟使用预留的所有实例。那时仍在运行的实例将开始终止。为了留出足够的时间来正常地耗尽节点,我们建议您在容量块预留结束时间前 30 分钟计划扩展至零。

    如果您想改为在容量预留变为 Active 时手动纵向扩展,则需要在容量块预留开始时更新 Auto Scaling 组的所需容量。然后,您还需要在容量块预留结束前 30 多分钟手动缩减。

  6. 节点组现在已准备好计划工作负载和 Pods。

  7. 为了正常地耗尽您的 Pods,我们建议您设置 Amazon 节点终止处理程序。该处理程序将能够使用 EventBridge 监视来自 Amazon EC2 Auto Scaling 的“ASG 横向缩减”生命周期事件,并允许 Kubernetes 控制面板在实例不可用之前执行所需的操作。否则,您的 Pods 和 Kubernetes 对象将停留在待处理状态。有关更多信息,请参阅 GitHub 上的 Amazon 节点终止处理程序

    如果您没有设置节点终止处理程序,我们建议您在到达 30 分钟时段之前开始手动耗尽 Pods,这样就有充足的时间正常地耗尽这些节点。