기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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 일치 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 Auto Scaling용으로 예약됨
이러한 접두사가 있는 레이블과 테인트는 시스템 구성 요소에 의해 관리되며 사용자 지정 값으로 덮어쓰면 안 됩니다.