本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在亚马逊中配置自定义 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匹配DesiredLabels并CurrentTaints匹配时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 自动缩放
带有这些前缀的标签和污点由系统组件管理,不应被自定义值覆盖。