本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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 操作。
-
打开 Amazon A SageMaker I 控制台,网址为https://console.aws.amazon.com/sagemaker/
。 -
在左侧,展开HyperPod 集群,然后选择集群管理。
-
选择要更新的集群,然后选择详细信息和更新 AMI。
要通过编程方式创建和管理更新计划,请使用以下 API 操作:
-
CreateCluster— 在指定更新计划的同时创建集群
-
UpdateCluster— 更新集群以添加更新计划
-
UpdateClusterSoftware— 更新集群的平台软件
-
DescribeCluster— 查看您为集群创建的更新计划
-
DescribeClusterNode和 ListClusterNodes— 查看上次更新集群的时间。
所需的权限
根据您在 Amazon EK HyperPod S 集群中配置容器中断预算
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(MinutesHoursDay-of-monthMonthDay-of-weekYear)
| 字段 | 值 | 通配符 |
|---|---|---|
|
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 *)