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

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

在亚马逊中配置自定义 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 自动缩放

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