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 Amazon Elastic Kubernetes Service (Amazon EKS) Orchestrator unterstützen benutzerdefinierte Kubernetes-Labels und -Taints für Knoten innerhalb von Instanzgruppen. Labels und Taints sind grundlegende Planungs- und Organisationsmechanismen in Kubernetes, mit denen Sie die Pod-Platzierung und die Ressourcenauslastung 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. Taints, die in Verbindung mit Toleranzen funktionieren, sind knotenspezifische Eigenschaften, die die Pod-Planung beeinflussen, indem sie Pods abstoßen, für die keine passenden Toleranzen gelten. Zusammen ermöglichen Ihnen diese Mechanismen, Workloads zu isolieren, sie gemäß den Hardwarespezifikationen zuzuweisen und eine optimale Ressourcennutzung sicherzustellen.
Häufige Anwendungsfälle
In den folgenden Szenarien sind benutzerdefinierte Bezeichnungen und Kennzeichnungen häufig von Vorteil:
-
Vermeidung von System-Pods auf teuren Instances — Wenden Sie Taints auf GPU-Instances an, um zu verhindern, dass System-Pods und andere unkritische Workloads teure Rechenressourcen verbrauchen
-
Integration mit vorhandenen Tools — Verwenden Sie Labels, die den etablierten Infrastrukturmustern und Knotenaffinitätskonfigurationen Ihres Unternehmens entsprechen
Konfiguration von Labels und Taints
Mithilfe des KubernetesConfig Parameters in Ihrer Clusterkonfiguration können Sie benutzerdefinierte Kubernetes-Labels und -Taints auf Instanzgruppenebene konfigurieren. 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, was bedeutet, dass Sie den vollständigen gewünschten Status der Labels und Taints für eine Instanzgruppe angeben. SageMaker HyperPod gleicht dann den tatsächlichen Zustand der Knoten ab, sodass er dem gewünschten Zustand entspricht.
-
Hinzufügen von Beschriftungen oder Verschmutzungen — Fügen Sie die neuen Beschriftungen oder Verfärbungen
KubernetesConfigzusammen mit allen vorhandenen hinzu, die Sie behalten möchten -
Bezeichnungen oder Verschmutzungen aktualisieren — Ändern Sie die Werte
KubernetesConfigfür die Bezeichnungen oder Verschmutzungen, die Sie ändern möchten, und schließen Sie alle anderen ein, die Sie beibehalten möchten -
Beschriftungen oder Verschmutzungen entfernen — Lassen Sie die Beschriftungen oder Verschmutzungen aus, die Sie aus dem entfernen möchten, und behalten Sie nur die bei
KubernetesConfig, die Sie beibehalten möchten
Erstellen Sie einen Cluster mit Beschriftungen und Flecken
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 sind konfiguriert, um eine unerwünschte Pod-Planung zu verhindern
Aktualisierung von Labels und Taints auf einem vorhandenen Cluster
Mithilfe der API können Sie Labels und Taints in einem vorhandenen Cluster ändern. UpdateCluster Das folgende Beispiel zeigt, wie das KubernetesConfig für eine Instanzgruppe aktualisiert wird:
{ "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 von Labels und Taint-Anwendungen
SageMaker HyperPod stellt APIs zur Verfügung, mit denen Sie den Status von Labels und Taints überwachen können, während sie auf Ihre Clusterknoten angewendet werden.
Überprüfen des Status auf Clusterebene
Verwenden Sie die DescribeCluster API, um den aktuellen und gewünschten Status von Labels und Taints auf Instanzgruppenebene einzusehen. 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 Label- und Taint-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" }] } } }
Node-level Die Überwachung ist nützlich für die Problembehandlung, 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 den Systemgebrauch reserviert und sollten nicht für benutzerdefinierte Bezeichnungen oder Taints 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.