在亚马逊中配置自定义 Kubernetes 标签和污点 SageMaker HyperPod - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在亚马逊中配置自定义 Kubernetes 标签和污点 SageMaker HyperPod

带有亚马逊 Elastic Kubernetes Service(Amazon EKS)编排器的亚马逊 SageMaker HyperPod 集群支持实例组内节点的自定义 Kubernetes 标签和污点。标签和污点是 Kubernetes 中的基本调度和组织机制,可让您精细地控制 pod 的放置和资源利用率。

标签是可以附加到 Kubernetes 对象的键值对,允许您根据属性组织和选择资源。污点与容忍度相结合,是特定于节点的属性,它们通过排斥容差不匹配的 pod 来影响 Pod 的调度。这些机制共同使您能够隔离工作负载,根据硬件规格分配工作负载,并确保最佳的资源利用率。

常见使用案例

以下是自定义标签和污点有益的常见场景:

  • 防止在昂贵的实例上使用系统 Pod-对 GPU 实例应用污点,以防止系统 Pod 和其他非关键工作负载消耗昂贵的计算资源

  • 与现有工具集成-应用与组织已建立的基础架构模式和节点关联性配置相匹配的标签

配置标签和污点

您可以使用集群配置中的KubernetesConfig参数在实例组级别配置自定义 Kubernetes 标签和污点。标签和污点应用于实例组中的所有节点,并在集群的整个生命周期中持续存在。

KubernetesConfig参数是声明性的,这意味着您可以为实例组指定标签和污点的完整所需状态。 SageMaker HyperPod 然后协调节点的实际状态以匹配所需的状态。

  • 添加标签或污点-将新的标签或污点KubernetesConfig以及您想要保留的任何现有标签或污点包括在中

  • 更新标签或污点-修改中要更改KubernetesConfig的标签或污点的值,并包括所有其他要保留的标签或污点

  • 移除标签或污点-省略要从中移除的标签或污点KubernetesConfig,只保留要保留的标签或污点

创建带有标签和污点的集群

创建新 SageMaker HyperPod 集群时,请在您的实例组配置中包含KubernetesConfig参数。以下示例说明如何使用自定义标签和污点创建集群:

{ "ClusterName": "my-cluster", "InstanceGroups": [{ "InstanceGroupName": "worker-group-1", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 4, "LifeCycleConfig": { "SourceS3Uri": "s3://my-bucket/lifecycle-config.sh", "OnCreate": "on-create.sh" }, "ExecutionRole": "arn:aws:iam::123456789012:role/HyperPodExecutionRole", "ThreadsPerCore": 1, "KubernetesConfig": { "Labels": { "env": "prod", "team": "ml-training", "gpu-type": "a100" }, "Taints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }, { "key": "dedicated", "value": "ml-workloads", "effect": "NoExecute" }] } }], "VpcConfig": { "SecurityGroupIds": ["sg-0123456789abcdef0"], "Subnets": ["subnet-0123456789abcdef0", "subnet-0123456789abcdef1"] }, "Orchestrator": { "Eks": { "ClusterArn": "arn:aws:eks:us-west-2:123456789012:cluster/my-eks-cluster" } } }

在本示例中:

  • 标签-应用了三个自定义标签:env=prodteam=ml-training、和 gpu-type=a100

  • 污点-配置了两个污点以防止不必要的 pod 调度

更新现有集群上的标签和污点

您可以使用 UpdateCluster API 修改现有集群上的标签和污点。以下示例说明如何更新实例组KubernetesConfig的:

{ "ClusterName": "my-cluster", "InstanceGroups": [{ "InstanceGroupName": "worker-group-1", "KubernetesConfig": { "Labels": { "env": "prod", "team": "ml-training", "gpu-type": "a100", "cost-center": "ml-ops" }, "Taints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }] } }] }

更新标签和污点时,会将更改 SageMaker HyperPod 应用于实例组中的所有节点。该服务管理从当前状态到所需状态的过渡,您可以使用 DescribeCluster API 对其进行监控。

监控标签和污点应用

SageMaker HyperPod APIs 用于监控标签和污点应用于集群节点时的状态。

检查集群级别的状态

使用 DescribeCluster API 在实例组级别查看标签和污点的当前和所需状态。以下示例显示了响应结构:

{ "ClusterName": "my-cluster", "ClusterStatus": "InService", "InstanceGroups": [{ "InstanceGroupName": "worker-group-1", "InstanceType": "ml.p4d.24xlarge", "CurrentInstanceCount": 4, "TargetInstanceCount": 4, "KubernetesConfig": { "CurrentLabels": { "env": "prod", "team": "ml-training", "gpu-type": "a100" }, "DesiredLabels": { "env": "prod", "team": "ml-training", "gpu-type": "a100" }, "CurrentTaints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }], "DesiredTaints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }] } }] }

CurrentLabels匹配DesiredLabelsCurrentTaints匹配时DesiredTaints,实例组中的所有节点都将应用指定的配置。如果它们不同,则集群仍处于应用更改的过程中。

检查单个节点的状态

有关节点级别的详细信息,请使用 DescribeClusterNode API 检查各个节点的标签和污点配置。以下示例显示了响应结构:

{ "NodeDetails": { "InstanceId": "i-0123456789abcdef0", "InstanceGroupName": "worker-group-1", "InstanceType": "ml.p4d.24xlarge", "InstanceStatus": { "Status": "Running", "Message": "Node is healthy" }, "LifeCycleConfig": { "SourceS3Uri": "s3://my-bucket/lifecycle-config.sh", "OnCreate": "on-create.sh" }, "LaunchTime": 1699564800.0, "KubernetesConfig": { "CurrentLabels": { "env": "prod", "team": "ml-training", "gpu-type": "a100" }, "DesiredLabels": { "env": "prod", "team": "ml-training", "gpu-type": "a100" }, "CurrentTaints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }], "DesiredTaints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }] } } }

当标签或污点未正确应用于特定节点时,或者当您需要验证特定实例的配置时,节点级监控对于排除故障非常有用。

保留前缀

某些前缀保留给系统使用,不应用于自定义标签或污点。保留以下前缀:

  • kubernetes.io/-保留给 Kubernetes 核心组件

  • k8s.io/-保留给 Kubernetes 核心组件

  • sagemaker.amazonaws.com/-保留给 SageMaker HyperPod

  • eks.amazonaws.com/-专为 Amazon EKS 保留

  • k8s.aws/-专为 Amazon EKS 保留

  • karpenter.sh/-保留给 Karpenter 自动缩放

带有这些前缀的标签和污点由系统组件管理,不应被自定义值覆盖。