Mengonfigurasi label dan taint Kubernetes kustom di Amazon SageMaker HyperPod - Amazon SageMaker AI

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengonfigurasi label dan taint Kubernetes kustom di Amazon SageMaker HyperPod

SageMaker HyperPod Cluster Amazon dengan orkestrator Amazon Elastic Kubernetes Service (Amazon EKS) mendukung label Kubernetes kustom dan taint untuk node dalam grup instance. Label dan taints adalah mekanisme penjadwalan dan organisasi mendasar di Kubernetes yang memberi Anda kontrol yang baik atas penempatan pod dan pemanfaatan sumber daya.

Label adalah pasangan nilai kunci yang dapat dilampirkan ke objek Kubernetes, memungkinkan Anda untuk mengatur dan memilih sumber daya berdasarkan atribut. Taints, bekerja sama dengan toleransi, adalah properti khusus node yang memengaruhi penjadwalan pod dengan menolak pod yang tidak memiliki toleransi yang cocok. Bersama-sama, mekanisme ini memungkinkan Anda untuk mengisolasi beban kerja, menetapkannya sesuai dengan spesifikasi perangkat keras, dan memastikan pemanfaatan sumber daya yang optimal.

Kasus penggunaan umum

Berikut ini adalah skenario umum di mana label dan noda khusus bermanfaat:

  • Mencegah pod sistem pada instans mahal - Menerapkan taints ke instance GPU untuk mencegah pod sistem dan beban kerja non-kritis lainnya menghabiskan sumber daya komputasi yang mahal

  • Integrasi dengan perkakas yang ada - Terapkan label yang sesuai dengan pola infrastruktur yang telah ditetapkan organisasi Anda dan konfigurasi afinitas simpul

Mengkonfigurasi label dan noda

Anda dapat mengonfigurasi label dan taint Kubernetes kustom di tingkat grup instance menggunakan KubernetesConfig parameter dalam konfigurasi klaster Anda. Label dan taints diterapkan ke semua node dalam grup instance dan bertahan sepanjang siklus hidup cluster.

KubernetesConfigParameternya bersifat deklaratif, artinya Anda menentukan status lengkap label dan taint yang diinginkan untuk grup instance. SageMaker HyperPod kemudian merekonsiliasi keadaan sebenarnya dari node agar sesuai dengan keadaan yang diinginkan ini.

  • Menambahkan label atau noda - Sertakan label atau noda baru KubernetesConfig bersama dengan label yang sudah ada yang ingin Anda simpan

  • Memperbarui label atau noda - Ubah nilai KubernetesConfig untuk label atau noda yang ingin Anda ubah, dan sertakan semua yang ingin Anda simpan

  • Menghapus label atau noda - Hilangkan label atau noda yang ingin Anda hapus dariKubernetesConfig, simpan hanya label yang ingin Anda pertahankan

Membuat cluster dengan label dan taints

Saat membuat SageMaker HyperPod cluster baru, sertakan KubernetesConfig parameter dalam konfigurasi grup instans Anda. Contoh berikut menunjukkan cara membuat cluster dengan label kustom dan taints:

{ "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" } } }

Dalam contoh ini:

  • Label - Tiga label khusus diterapkan:env=prod,team=ml-training, dan gpu-type=a100

  • Taints - Dua taint dikonfigurasi untuk mencegah penjadwalan pod yang tidak diinginkan

Memperbarui label dan noda pada cluster yang ada

Anda dapat memodifikasi label dan taint pada klaster yang ada menggunakan UpdateCluster API. Contoh berikut menunjukkan cara memperbarui KubernetesConfig untuk grup instance:

{ "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" }] } }] }

Saat Anda memperbarui label dan taints, SageMaker HyperPod terapkan perubahan ke semua node dalam grup instance. Layanan mengelola transisi dari keadaan saat ini ke keadaan yang diinginkan, yang dapat Anda pantau menggunakan DescribeCluster API.

Memantau label dan aplikasi noda

SageMaker HyperPod menyediakan APIs untuk memantau status label dan taint saat diterapkan ke node cluster Anda.

Memeriksa status tingkat cluster

Gunakan DescribeCluster API untuk melihat status label dan taint saat ini dan yang diinginkan di tingkat grup instans. Contoh berikut menunjukkan struktur respon:

{ "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" }] } }] }

Ketika CurrentLabels cocok DesiredLabels dan CurrentTaints cocokDesiredTaints, semua node dalam grup instance memiliki konfigurasi yang ditentukan diterapkan. Jika mereka berbeda, cluster masih dalam proses menerapkan perubahan.

Memeriksa status node individu

Untuk detail tingkat simpul, gunakan DescribeClusterNode API untuk memeriksa label dan konfigurasi taint dari masing-masing node. Contoh berikut menunjukkan struktur respon:

{ "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" }] } } }

Pemantauan tingkat simpul berguna untuk pemecahan masalah saat label atau taint tidak diterapkan dengan benar ke node tertentu, atau saat Anda perlu memverifikasi konfigurasi instance tertentu.

Awalan yang dicadangkan

Awalan tertentu dicadangkan untuk penggunaan sistem dan tidak boleh digunakan untuk label atau noda khusus. Awalan berikut dicadangkan:

  • kubernetes.io/- Dicadangkan untuk komponen inti Kubernetes

  • k8s.io/- Dicadangkan untuk komponen inti Kubernetes

  • sagemaker.amazonaws.com/- Dicadangkan untuk SageMaker HyperPod

  • eks.amazonaws.com/- Dicadangkan untuk Amazon EKS

  • k8s.aws/- Dicadangkan untuk Amazon EKS

  • karpenter.sh/- Dicadangkan untuk penskalaan otomatis Karpenter

Label dan taint dengan awalan ini dikelola oleh komponen sistem dan tidak boleh ditimpa dengan nilai kustom.