Amazon SageMaker HyperPod에서 사용자 지정 Kubernetes 레이블 및 테인트 구성 - Amazon SageMaker AI

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon SageMaker HyperPod에서 사용자 지정 Kubernetes 레이블 및 테인트 구성

Amazon Elastic Kubernetes Service(Amazon EKS) 오케스트레이터를 사용하는 Amazon SageMaker HyperPod 클러스터는 인스턴스 그룹 내 노드에 대한 사용자 지정 Kubernetes 레이블 및 테인트를 지원합니다. 레이블 및 테인트는 포드 배치 및 리소스 사용률을 세밀하게 제어할 수 있는 Kubernetes의 기본 일정 및 조직 메커니즘입니다.

레이블은 Kubernetes 객체에 연결할 수 있는 키-값 페어로, 속성을 기반으로 리소스를 구성하고 선택할 수 있습니다. 테인트는 허용 오차와 함께 작동하며, 일치하는 허용 오차가 없는 포드를 제거함으로써 포드 스케줄링에 영향을 미치는 노드별 속성입니다. 이러한 메커니즘을 함께 사용하면 워크로드를 격리하고 하드웨어 사양에 따라 할당하며 최적의 리소스 사용률을 보장할 수 있습니다.

일반 사용 사례

다음은 사용자 지정 레이블과 테인트가 유용한 일반적인 시나리오입니다.

  • 고가의 인스턴스에서 시스템 포드 방지 - GPU 인스턴스에 테인트를 적용하여 시스템 포드 및 기타 중요하지 않은 워크로드가 고가의 컴퓨팅 리소스를 소비하지 않도록 방지

  • 기존 도구와의 통합 - 조직의 확립된 인프라 패턴 및 노드 선호도 구성과 일치하는 레이블 적용

레이블 및 테인트 구성

클러스터 구성의 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=prod, 및 team=ml-training의 세 가지 사용자 지정 레이블이 적용됩니다. gpu-type=a100

  • 테인트 - 원치 않는 포드 예약을 방지하기 위해 두 개의 테인트가 구성됨

기존 클러스터의 레이블 및 테인트 업데이트

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 Auto Scaling용으로 예약됨

이러한 접두사가 있는 레이블과 테인트는 시스템 구성 요소에 의해 관리되며 사용자 지정 값으로 덮어쓰면 안 됩니다.