在 SageMaker HyperPod 集群中更新您的 AMI 版本 - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 SageMaker HyperPod 集群中更新您的 AMI 版本

A SageMaker HyperPod mazon Amazon 机器映像 (AMIs) 是用于分布式机器学习工作负载和高性能计算的专用机器映像。每个 AMI 都预装了驱动程序、机器学习框架、训练库以及性能监控工具。通过更新集群中的 AMI 版本,您可以在训练作业和工作流中使用这些组件及软件包的最新版本。

在更新集群中的 AMI 版本时,您可以选择立即执行更新、安排一次性更新,或使用 cron 表达式创建周期性计划。您也可以选择更新一个实例组中的所有实例,或者仅分批次更新实例。如果您选择批量更新,则可以设置 SageMaker AI 一次应升级的实例的百分比或数量。如果您使用这种更新方法,则可以设置 SageMaker AI 应在批次之间等待多长时间的间隔。

如果您选择批量更新,还可以纳入警报和指标列表。在等待间隔 SageMaker 内,AI 会观察这些指标,如果有任何指标超过其阈值,则相应的警报将进入警报状态, SageMaker AI 会回滚 AMI 更新。要使用自动回滚,IAM 执行角色必须具有权限 cloudwatch:DescribeAlarms

注意

批量更新集群仅适用于与 Amazon EKS HyperPod 集成的集群。此外,如果您要创建多个计划,建议您在各个计划之间预留一段时间缓冲。如果计划出现重叠,更新可能会失败。

有关您的 HyperPod 集群的每个 AMI 版本的更多信息,请参阅亚马逊 SageMaker HyperPod AMI。有关常规 HyperPod 版本的更多信息,请参阅亚马逊 SageMaker HyperPod 发行说明

您可以使用 SageMaker AI API 或 CLI 操作来更新集群或查看特定集群的计划更新。如果您使用的是Amazon控制台,请按照以下步骤操作:

注意

使用Amazon控制台更新您的 AMI 仅适用于与 Amazon EKS 集成的集群。如果你有 Slurm 集群,则必须使用 SageMaker AI API 或 CLI 操作。

  1. 打开 Amazon A SageMaker I 控制台,网址为https://console.aws.amazon.com/sagemaker/

  2. 在左侧,展开HyperPod 集群,然后选择集群管理

  3. 选择要更新的集群,然后选择详细信息更新 AMI

要通过编程方式创建和管理更新计划,请使用以下 API 操作:

所需的权限

根据您在 Amazon EK HyperPod S 集群中配置容器中断预算的方式,在 AMI 更新过程中驱逐容器、释放节点并阻止任何更新计划。如果违反了预算内的任何限制,则在 AMI 更新期间 HyperPod 跳过该节点。 SageMaker HyperPod 要正确驱逐 pod,必须向 HyperPod 服务相关角色添加必要的权限。以下 yaml 文件具有必要的权限。

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: hyperpod-patching rules: - apiGroups: [""] resources: ["pods"] verbs: ["list"] - apiGroups: [""] resources: ["pods/eviction"] verbs: ["create"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: hyperpod-patching subjects: - kind: User name: hyperpod-service-linked-role roleRef: kind: ClusterRole name: hyperpod-patching apiGroup: rbac.authorization.k8s.io

使用以下命令可应用权限。

git clone https://github.com/aws/sagemaker-hyperpod-cli.git cd sagemaker-hyperpod-cli/helm_chart helm upgrade hyperpod-dependencies HyperPodHelmChart --namespace kube-system --install

Cron 表达式

要配置特定时间的一次性更新或周期性计划,请使用 cron 表达式。cron 表达式支持六个字段,各字段之间用空格分隔。所有六个字段均为必填字段。

cron(Minutes Hours Day-of-month Month Day-of-week Year)
字段 通配符

Minutes

00 – 59

不适用

Hours

00 – 23

不适用

D ay-of-month

01 – 31

?

Month

01 – 12

* /

D ay-of-week

1 – 7 或 MON-SUN

? # L

Year

当前年份 – 2099

*
通配符
  • *(星号)通配符包含该字段中的所有值。在 Hours 字段中,* 将包含每个小时。

  • /(正斜杠)通配符用于指定增量。在 Months 字段中,您可以输入 */3 来指定每三个月执行一次。

  • ?(问号)通配符用于指定一个或另一个。在Day-of-month字段中你可以输入 7,如果你不在乎第七天是什么日子,你可以输入 在 Day-of-week野外。

  • day-of-week 字段中的 L 通配符用于指定月或周的最后一天。例如,5L 表示当月的最后一个星期五。

  • ay-of-week字段中的 # 通配符指定一个月内一周中指定某一天的特定实例。例如,3#2 指该月的第二个星期二:3 指的是星期二,因为它是每周的第三天,2 是指该月内该类型的第二天。

您可以将 cron 表达式用于以下场景:

  • 在特定日期和时间运行的一次性计划。你可以使用?通配符来表示这一点, day-of-month也可以无关紧 day-of-week要。

    cron(30 14 ? 12 MON 2024)
    cron(30 14 15 12 ? 2024)
  • 在特定日期和时间运行的每周计划。以下示例创建了一个无论如何均在每周一中午 12:00 运行的时间表。 day-of-month

    cron(00 12 ? * 1 *)
  • 每月计划,无论如何,每月运行一次 day-of-week. 以下计划在每个月 15 日的中午 12:30 运行。

    cron(30 12 15 * ? *)
  • 使用的月度计划 day-of-week.

    cron(30 12 ? * MON *)
  • 要创建每 N 个月运行一次的计划,请使用 / 通配符。以下示例创建了每 3 个月运行一次的每月计划。以下两个示例演示了它如何与 day-of-week和配合使用 day-of-month。

    cron(30 12 15 */3 ? *)
    cron(30 12 ? */3 MON *)
  • 在指定的星期几对特定实例运行的计划。以下示例创建了一个计划,该计划在每个月第二个星期一的中午 12:30 运行。

    cron(30 12 ? * 1#2 *)
  • 在指定的星期几对最后一个实例运行的计划。以下计划在每个月最后一个星期一的中午 12:30 运行。

    cron(30 12 ? * 1L *)