View a markdown version of this page

Konfiguration benutzerdefinierter Kubernetes-Labels und -Taints in Amazon SageMaker HyperPod - Amazon SageMaker KI

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 KubernetesConfig zusammen mit allen vorhandenen hinzu, die Sie behalten möchten

  • Bezeichnungen oder Verschmutzungen aktualisieren — Ändern Sie die Werte KubernetesConfig fü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 beiKubernetesConfig, 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, und gpu-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.