View a markdown version of this page

Rechenleistung für AI/ML Workloads auf Amazon EKS mit Knotengruppen verwalten - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

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.

Um zu diesem Benutzerhandbuch beizutragen, wählen Sie den GitHub Link Diese Seite bearbeiten auf, der sich im rechten Bereich jeder Seite befindet.

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.

Rechenleistung für AI/ML Workloads auf Amazon EKS mit Knotengruppen verwalten

Tipp

Melden Sie sich für bevorstehende Amazon AI/ML EKS-Workshops an.

In diesem Abschnitt wird beschrieben, wie Sie beschleunigte Rechenleistung (AWS Trainium, NVIDIA-GPUs) für KI-Trainings- und Inferenz-Workloads mithilfe von Amazon EKS-verwalteten Knotengruppen oder selbstverwalteten Knoten verwalten.

Von EKS verwaltete Knotengruppen und selbstverwaltete Knoten verwenden EC2 Auto Scaling Groups (ASG). Von EKS verwaltete Knotengruppen verfügen über spezielle EKS-APIs zum Erstellen, Aktualisieren und Löschen von Knoten sowie über integrierte Knotenreparaturfunktionen und Lifecycle-Termination-Hooks. Selbstverwaltete EKS-Knoten werden direkt über EC2-APIs bereitgestellt und verwaltet.

Mit diesen Optionen definieren Sie den Instance-Typ, die gewünschte Anzahl, die Skalierungsgrenzen und die EC2-Startvorlage im Voraus. Erwägen Sie die Verwendung von EKS-verwalteten Knotengruppen oder selbstverwalteten Knoten, wenn Sie auch Workloads haben, die nicht von EKS stammen, und Sie Konfigurationskonsistenz mithilfe von EC2-Startvorlagen bevorzugen. EKS-Knotengruppen eignen sich für das Training und die Feinabstimmung von Workloads, bei denen der beschleunigte Rechenaufwand im Voraus bekannt ist. Beachten Sie, dass sowohl EKS Auto Mode als auch Karpenter auch statische Kapazitätsbereitstellung unterstützen. Weitere Informationen finden Sie unter. Rechenleistung für AI/ML Workloads mit EKS Auto Mode und Karpenter verwalten

Von EKS verwaltete Knotengruppen und selbstverwaltete Knoten unterstützen alle Optionen zum beschleunigten Kauf von Rechenleistung (SpotOn-Demand, On-Demand Kapazitätsreservierungen, Kapazitätsblöcke für ML). Sie erstellen pro Kapazitätstyp eine separate verwaltete oder selbstverwaltete Knotengruppe mit jeweils eigener Startvorlage, Instance-Typen und Skalierungskonfiguration. Dadurch erhalten Sie die explizite ASG-backed Kontrolle über jeden Kapazitätspool ohne heterogene dynamische Bereitstellungslogik.

Von EKS verwaltete Knotengruppen im Vergleich zu selbstverwalteten Knoten

Die Wahl zwischen verwalteten EKS-Knotengruppen und selbstverwalteten Knoten hängt vom Grad der Anpassung und Kontrolle ab, den Sie benötigen. Von EKS verwaltete Knotengruppen ermöglichen einen Teil der Anpassung von EC2-Startvorlagen, wohingegen selbstverwaltete Knoten die gesamte Bandbreite der EC2-Startvorlage unterstützen. Wenn Sie keinen bestimmten Grund haben, den Knotenlebenszyklus selbst anzupassen und zu verwalten, beginnen Sie mit von EKS verwalteten Knotengruppen und wechseln Sie nur dann zu selbstverwalteten Knoten, wenn eine bestimmte Anforderung dies erfordert.

Verwenden Sie verwaltete Knotengruppen, wenn: Sie möchten, dass EKS die AMI-Auswahl, das Bootstrapping von Knoten, fortlaufende Updates, die Knotenreparatur und die Workflows für den Graceful Drain in Ihrem Namen abwickelt. Von EKS verwaltete Knotengruppen sind der empfohlene Ausgangspunkt, wenn Sie EKS Auto Mode oder Karpenter nicht für Trainings- und Inferenz-Workloads verwenden möchten. Wenn Sie Capacity Blocks for ML verwenden, erstellen die von EKS verwalteten Knotengruppen automatisch eine geplante Skalierungsrichtlinie, die die Knotengruppe 40 Minuten vor Ende der Reservierung entleert, sodass Sie den Node Termination Handler oder Ihre eigene AWS Scale-Down-Automatisierung nicht mehr verwenden müssen. Verwenden Sie von EKS verwaltete Knotengruppen, wenn Sie ein unterstütztes EKS-optimized AMI verwenden, wenn Sie keine Anpassungen der EC2-Startvorlagen auf Kernelebene oder tiefgreifende Anpassungen benötigen und wenn Sie einen einfacheren Knoten-Upgrade-Pfad für Kubernetes-Versionen wünschen.

Verwenden Sie selbstverwaltete Knotengruppen, wenn: Sie volle Kontrolle über die EC2-Startvorlage, das AMI, die Kernel-Parameter, die Container-Laufzeitkonfiguration oder benutzerdefinierte Bootstrap-Skripts benötigen. Zu den gängigen ML-Szenarien gehören die Optimierung der Kernel- und NIC-Einstellungen für verteiltes Training mit dem Elastic Fabric Adapter (EFA) oder die Integration mit einem benutzerdefinierten Node Lifecycle Controller. Self-managed Nodes bieten Ihnen die Flexibilität, alle benötigten Benutzerdaten und IAM-Instanzprofile bereitzustellen. Sie übernehmen jedoch die Verantwortung für Updates, geplante Skalierungsrichtlinien und Lifecycle-Hooks wie den AWS Node Termination Handler.

Reservieren Sie GPUs mit Kapazitätsblöcken für ML

Mit Kapazitätsblöcken für maschinelles Lernen (ML) können Sie GPU-Instanzen zu einem future Zeitpunkt für zeitgebundene Trainings- oder Inferenz-Workloads reservieren. Weitere Informationen finden Sie unter Capacity Blocks for ML im Amazon EC2 EC2-Benutzerhandbuch.

Sie können Capacity Block-Reservierungen über von EKS verwaltete Knotengruppen und selbstverwaltete Knoten verwenden. Die Konfiguration der EC2-Startvorlage ist in beiden Fällen identisch. Der Arbeitsablauf bei der Knotenerstellung, das Scale-Down-Verhalten und die Lifecycle-Hooks für die Workloadbeendigung unterscheiden sich je nach Bereitstellungsoption.

Überlegungen

  • Kapazitätsblöcke sind nur für bestimmte Amazon EC2 EC2-Instance-Typen und AWS Regionen verfügbar. Weitere Informationen finden Sie unter Voraussetzungen für das Arbeiten mit Kapazitätsblöcken.

  • Kapazitätsblöcke sind zonal. Bei der Erstellung der Knotengruppe müssen Sie das Subnetz in derselben Availability Zone (AZ) wie die Kapazitätsblock-Reservierung verwenden.

  • Wenn Sie eine Knotengruppe erstellen, bevor die Kapazitätsblock-Reservierung aktiv wird, legen Sie 0 bei der Erstellung der Knotengruppe die gewünschte Kapazität auf fest.

  • Um genügend Zeit für einen ordnungsgemäßen Abbau der Arbeitslast zu haben, sollten Sie die Skalierung auf Null mehr als 30 Minuten vor dem Ende der Kapazitätsblock-Reservierung einplanen. EC2 beginnt 30 Minuten vor Ende der Reservierung mit dem Herunterfahren der Instances.

Erstellen Sie Knotengruppen mit Kapazitätsblöcken für ML

Von EKS verwaltete Knotengruppen und selbstverwaltete Knoten erfordern die Verwendung einer benutzerdefinierten EC2-Startvorlage, die auf die Kapazitätsblockreservierung abzielt. Im Folgenden werden die mindestens erforderlichen Felder für von EKS verwaltete Knotengruppen und selbstverwaltete Knoten aufgeführt. Für selbstverwaltete Knoten sind zusätzliche Felder erforderlich, wie in den folgenden Self-managed Knotenschritten dargestellt.

Sie LaunchTemplateData müssen Folgendes beinhalten:

  • InstanceMarketOptions mit der Einstellung "capacity-block" für MarketType

  • CapacityReservationSpecification: CapacityReservationTargetmit CapacityReservationId Einstellung auf die Capacity-Block-ID. Beispiel, cr-0123456789abcdef0.

  • InstanceTypeauf den Instance-Typ Ihrer Capacity Block-Reservierung festgelegt. Beispiel, p5.48xlarge.

Diese Anforderungen werden in den folgenden Beispielen für die Erstellung der Startvorlage für EKS-verwaltete Knotengruppen und selbstverwaltete Knoten dargestellt.

Managed node groups
  1. Erstellen Sie eine Datei mit dem Namen eks-capacity-block-lt.json und dem folgenden Inhalt.

    Ersetzen Sie den Inhalt für CapacityReservationId und InstanceType durch die Werte für Ihren Kapazitätsblock. Weitere Informationen zu den zusätzlichen Feldern für EC2-Startvorlagen finden Sie unter Verwaltete Knoten mit Startvorlagen anpassen und Verwenden von Kapazitätsblöcken für maschinelles Lernen.

    { "LaunchTemplateData": { "InstanceMarketOptions": { "MarketType": "capacity-block" }, "CapacityReservationSpecification": { "CapacityReservationTarget": { "CapacityReservationId": "cr-0123456789abcdef0" } }, "InstanceType": "p5.48xlarge" } }
  2. Erstellen Sie die Startvorlage.

    aws ec2 create-launch-template \ --launch-template-name EKS-Capacity-Block-Launch-Template \ --launch-template-data file://eks-capacity-block-lt.json
  3. Verwenden Sie die Startvorlage, um eine verwaltete EKS-Knotengruppe zu erstellen. Ersetzen Sie die Platzhalter im folgenden Befehl durch Werte, die für Ihre Umgebung gelten. Der folgende Befehl setzt --ami-type auf die EKS-optimized AL2023-NVIDIA-AMIs. Verwenden Sie EKS-optimized beschleunigte AMIs für GPU-InstancesWeitere Informationen zu den verfügbaren EKS-optimized AMIs finden Sie unter. Wenn Sie ein benutzerdefiniertes AMI mit von EKS verwalteten Knotengruppen verwenden, geben Sie Ihre AMI-ID in der Startvorlage an.

    Gehen Sie beim Erstellen einer verwalteten EKS-Knotengruppe, die Kapazitätsblöcke verwendet, wie folgt vor:

    • Setzen Sie --capacity-type auf "CAPACITY_BLOCK".

    • Geben Sie nur das Subnetz in derselben Availability Zone an, in der sich die Kapazitätsreservierung befindet.

    • Wenn Sie einen Wert ungleich Null angeben, desiredSize bevor die Reservierung aktiv ist, meldet die Auto Scaling Group Startfehler, bis die Reservierung aktiv wird. Sobald sie aktiv sind, werden die Instances gestartet und die ASG wird auf die angeforderte Größe skaliert. desiredSize

      aws eks create-nodegroup \ --cluster-name my-eks-cluster \ --nodegroup-name eks-cb-nodes \ --node-role "arn:aws: iam::111122223333:role/myNodeRole" \ --region region-code \ --subnets subnet-ExampleID1 \ --ami-type "AL2023_x86_64_NVIDIA" \ --scaling-config minSize=0,maxSize=2,desiredSize=0 \ --capacity-type "CAPACITY_BLOCK" \ --launch-template name="EKS-Capacity-Block-Launch-Template"
  4. Wenn Sie 0 bei der Erstellung desiredSize die Option auf einstellen, skalieren Sie die Knotengruppe, sobald die Reservierung aktiv wird. Verwenden Sie dazu eine der folgenden Optionen:

    • Eine geplante Skalierungsrichtlinie für das ASG, die auf die Startzeit der Reservierung abgestimmt ist. Weitere Informationen finden Sie unter Geplante Skalierung für Amazon EC2 Auto Scaling im Amazon EC2 Auto Scaling-Benutzerhandbuch.

    • Die Amazon EKS-Konsole oder aws eks update-nodegroup-config um die Skalierungskonfiguration zu aktualisieren.

  5. Stellen Sie sicher, dass die Knoten nach der Skalierung dem Cluster beitreten.

  6. EKS erstellt automatisch eine geplante Skalierungsrichtlinie mit dem Namen Amazon EKS Node Group Capacity Scaledown Before Reservation End, um die Knotengruppe auf 0 40 Minuten vor Ende der Reservierung herunterzuskalieren. Dadurch haben die Pods Zeit, ordnungsgemäß entleert zu werden, bevor EC2 beginnt, Instances nach 30 Minuten zu beenden. Bearbeiten oder löschen Sie diese geplante Aktion nicht.

Self-managed nodes
  1. Erstellen Sie eine Datei mit dem Namen eks-capacity-block-lt.json und dem folgenden Inhalt.

    Ersetzen Sie den Inhalt für CapacityReservationId und InstanceType durch die Werte für Ihren Kapazitätsblock. Weitere Informationen zu den zusätzlichen Feldern für EC2-Startvorlagen finden Sie unter Verwaltete Knoten mit Startvorlagen anpassen und Verwenden von Kapazitätsblöcken für maschinelles Lernen.

    Ersetzen Sie den Inhalt fürIamInstanceProfile,ImageId,, SecurityGroupIdsUserData, KeyName durch die Werte für Ihre Umgebung.

    { "LaunchTemplateData": { "InstanceMarketOptions": { "MarketType": "capacity-block" }, "CapacityReservationSpecification": { "CapacityReservationTarget": { "CapacityReservationId": "cr-0123456789abcdef0" } }, "IamInstanceProfile": { "Arn": "arn:aws: iam::111122223333:role/myNodeRole" }, "ImageId": "image-id", "InstanceType": "p5.48xlarge", "KeyName": "key-name", "SecurityGroupIds": "sg-05b1d815d1EXAMPLE" ], "UserData": "user-data" } }
  2. Erstellen Sie die Startvorlage.

    aws ec2 create-launch-template \ --launch-template-name EKS-Capacity-Block-Launch-Template \ --launch-template-data file://eks-capacity-block-lt.json
  3. Verwenden Sie die Startvorlage, um die Auto Scaling Scaling-Gruppe zu erstellen. Gehen Sie dabei wie unter beschrieben vorSelbstverwaltete Amazon-Linux-Knoten erstellen. Wenn die Reservierung noch nicht aktiv ist, stellen Sie DesiredCapacity sie auf ein0. Geben Sie nur das Subnetz in der Availability Zone an, in dem die Kapazität reserviert ist.

  4. Nachdem Ihre selbstverwalteten Knoten mit der DesiredCapacity Einstellung auf erstellt wurden0, erstellen Sie eine geplante Skalierungsrichtlinie für die Auto Scaling Scaling-Gruppe, die auf die Reservierungszeiten des Kapazitätsblocks abgestimmt ist. Weitere Informationen finden Sie unter Geplante Skalierung für Amazon EC2 Auto Scaling.

    Sie können die Reserved Instances bis 30 Minuten vor dem Ende der Reservierung nutzen. Planen Sie die Skalierung auf Null mehr als 30 Minuten vor Ablauf der Endzeit ein, damit die Pods ausreichend Zeit haben, sich zu leeren.

    Wenn Sie es vorziehen, manuell zu skalieren, aktualisieren Sie die gewünschte Kapazität der ASG zu Beginn der Reservierung und erneut mehr als 30 Minuten vor der Endzeit.

  5. Richten Sie den AWS Node Termination Handler ein, um Pods ordnungsgemäß zu entleeren. Es beobachtet mithilfe von Amazon EC2 Auto Scaling Scale-in-Lifecycle-Ereignisse von ASG EventBridge und lässt die Kubernetes-Steuerebene handeln, bevor die Instance nicht mehr verfügbar ist. Ohne sie können Pods und Kubernetes-Objekte im Status „Ausstehend“ hängen bleiben. Weitere Informationen finden Sie unter AWS Node Termination Handler on. GitHub

    Wenn Sie den Node Termination Handler nicht einrichten, entleeren Sie die Pods vor Ablauf des 30-Minuten-Fensters manuell, damit sie Zeit haben, ordnungsgemäß entleert zu werden.