Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Konfiguration benutzerdefinierter Kubernetes-Labels und -Taints in Amazon SageMaker HyperPod
SageMaker HyperPod Amazon-Cluster mit dem Orchestrator Amazon Elastic Kubernetes Service (Amazon EKS) unterstützen benutzerdefinierte Kubernetes-Labels und -Taints für Knoten innerhalb von Instanzgruppen. Labels and Taints sind grundlegende Planungs- und Organisationsmechanismen in Kubernetes, mit denen Sie die Pod-Platzierung und die Ressourcennutzung genau steuern können.
Labels sind Schlüssel-Wert-Paare, die an Kubernetes-Objekte angehängt werden können, sodass Sie Ressourcen anhand von Attributen organisieren und auswählen können. Bei Taints handelt es sich in Verbindung mit Toleranzen um knotenspezifische Eigenschaften, die das Pod-Scheduling beeinflussen, indem sie Pods abwehren, für die es keine passenden Toleranzen gibt. Zusammen ermöglichen Ihnen diese Mechanismen, Workloads zu isolieren, sie gemäß den Hardwarespezifikationen zuzuweisen und eine optimale Ressourcennutzung sicherzustellen.
Häufige Anwendungsfälle
Im Folgenden finden Sie häufig vorkommende Szenarien, in denen benutzerdefinierte Labels und Taints von Vorteil sind:
-
Vermeidung von System-Pods auf teuren Instanzen — Wenden Sie Taints auf GPU-Instances an, um zu verhindern, dass System-Pods und andere unkritische Workloads teure Rechenressourcen verbrauchen
-
Integration mit vorhandenen Tools — Wenden Sie Labels an, die den etablierten Infrastrukturmustern und Knotenaffinitätskonfigurationen Ihres Unternehmens entsprechen
Konfiguration von Labels und Taints
Sie können benutzerdefinierte Kubernetes-Labels und -Taints auf Instanzgruppenebene konfigurieren, indem Sie den KubernetesConfig Parameter in Ihrer Cluster-Konfiguration verwenden. Labels und Taints werden auf alle Knoten in der Instanzgruppe angewendet und bleiben während des gesamten Lebenszyklus des Clusters bestehen.
Der KubernetesConfig Parameter ist deklarativ, d. h. Sie geben den vollständigen gewünschten Status von Labels und Taints für eine Instanzgruppe an. SageMaker HyperPod gleicht dann den tatsächlichen Zustand der Knoten so ab, dass er diesem gewünschten Zustand entspricht.
-
Hinzufügen von Labels oder Taints — Fügen Sie die neuen Labels oder Taints
KubernetesConfigzusammen mit allen vorhandenen hinzu, die Sie behalten möchten -
Beschriftungen oder Verschmutzungen aktualisieren — Ändern Sie die Werte
KubernetesConfigfür die Beschriftungen oder Verfärbungen, die Sie ändern möchten, und schließen Sie alle anderen ein, die Sie behalten möchten -
Beschriftungen oder Verschmutzungen entfernen — Lassen Sie die Beschriftungen oder Verfälschungen aus, die Sie entfernen möchten, und behalten Sie nur diejenigen bei
KubernetesConfig, die Sie beibehalten möchten
Erstellen eines Clusters mit Labels und Makeln
Wenn Sie einen neuen SageMaker HyperPod Cluster erstellen, nehmen Sie den KubernetesConfig Parameter in Ihre Instanzgruppenkonfiguration auf. Das folgende Beispiel zeigt, wie Sie einen Cluster mit benutzerdefinierten Labels und Taints erstellen:
{ "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"} } }
In diesem Beispiel:
-
Labels — Drei benutzerdefinierte Labels werden angewendet:
env=prodteam=ml-training, undgpu-type=a100 -
Taints — Zwei Taints wurden konfiguriert, um ungewolltes Pod-Scheduling zu verhindern
Labels und Taints auf einem vorhandenen Cluster werden aktualisiert
Sie können Labels und Taints auf einem vorhandenen Cluster mithilfe der UpdateCluster API ändern. Das folgende Beispiel zeigt, wie Sie die KubernetesConfig für eine Instanzgruppe aktualisieren:
{ "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" }] } }] }
Wenn Sie Labels und Taints aktualisieren, werden die Änderungen auf alle Knoten in der Instanzgruppe SageMaker HyperPod angewendet. Der Service verwaltet den Übergang vom aktuellen zum gewünschten Status, den Sie mithilfe der DescribeCluster API überwachen können.
Überwachung, Etikett und Anwendung
SageMaker HyperPod ermöglicht APIs die Überwachung des Status von Labels und Taints, wenn sie auf Ihre Clusterknoten angewendet werden.
Überprüfen Sie den Status auf Clusterebene
Verwenden Sie die DescribeCluster API, um den aktuellen und gewünschten Status von Labels und Taints auf Instanzgruppenebene anzuzeigen. Das folgende Beispiel zeigt die Antwortstruktur:
{ "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" }] } }] }
Bei CurrentLabels Übereinstimmung DesiredLabels und CurrentTaints Übereinstimmung DesiredTaints wird auf alle Knoten in der Instanzgruppe die angegebene Konfiguration angewendet. Wenn sie sich unterscheiden, ist der Cluster noch dabei, die Änderungen anzuwenden.
Der Status einzelner Knoten wird überprüft
Für Details auf Knotenebene verwenden Sie die DescribeClusterNode API, um die Bezeichnung und die fehlerhafte Konfiguration einzelner Knoten zu überprüfen. Das folgende Beispiel zeigt die Antwortstruktur:
{ "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" }] } } }
Die Überwachung auf Knotenebene ist nützlich für die Fehlerbehebung, wenn Labels oder Taints nicht korrekt auf bestimmte Knoten angewendet werden oder wenn Sie die Konfiguration einer bestimmten Instanz überprüfen müssen.
Reservierte Präfixe
Bestimmte Präfixe sind für die Verwendung durch das System reserviert und sollten nicht für benutzerdefinierte Beschriftungen oder Markierungen verwendet werden. Die folgenden Präfixe sind reserviert:
-
kubernetes.io/- Reserviert für Kubernetes-Kernkomponenten -
k8s.io/— Reserviert für Kubernetes-Kernkomponenten -
sagemaker.amazonaws.com/- Reserviert für SageMaker HyperPod -
eks.amazonaws.com/- Reserviert für Amazon EKS -
k8s.aws/- Reserviert für Amazon EKS -
karpenter.sh/— Reserviert für Karpenter Autoscaling
Labels und Taints mit diesen Präfixen werden von Systemkomponenten verwaltet und sollten nicht mit benutzerdefinierten Werten überschrieben werden.