View a markdown version of this page

Aufgabenverwaltung für die Modellbereitstellung auf 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.

Aufgabenverwaltung für die Modellbereitstellung auf HyperPod

In diesem Abschnitt wird beschrieben, wie Sie Ihre gemeinsam genutzten Amazon SageMaker HyperPod EKS-Cluster für Inferenz-Workloads in Echtzeit optimieren können. Sie lernen, wie Sie die Aufgaben-Governance-Features von Kueue konfigurieren – darunter Kontingentverwaltung, Prioritätsplanung und Richtlinien zur gemeinsamen Nutzung von Ressourcen –, um sicherzustellen, dass Ihre Inferenz-Workloads bei Traffic-Spitzen die benötigten GPU-Ressourcen erhalten und gleichzeitig eine faire Zuweisung für die Trainings-, Bewertungs- und Testaktivitäten Ihrer Teams gewährleistet ist. Weitere SageMaker HyperPod Verwaltung der Aufgaben allgemeine Informationen zur Aufgabenverwaltung finden Sie unter.

So funktioniert das Inferenz-Workload-Management

Um Datenverkehrsspitzen in Echtzeit in gemeinsam genutzten HyperPod EKS-Clustern effektiv zu bewältigen, implementieren Sie mithilfe der vorhandenen Funktionen von Kueue die folgenden Strategien zur Aufgabenverwaltung.

Konfiguration der Prioritätsklasse

Definieren Sie dedizierte Prioritätsklassen für Inferenz-Workloads mit hohen Gewichtungen (z. B. 100), um sicherzustellen, dass Inferenz-Pods vor anderen Aufgabentypen zugelassen und geplant werden. Diese Konfiguration ermöglicht es Inferenz-Workloads, Jobs mit niedrigerer Priorität während der Clusterlast zuvorzukommen, was für die Einhaltung niedriger Latenzanforderungen bei hohen Datenverkehrszahlen entscheidend ist.

Größe und Zuteilung von Kontingenten

Reservieren Sie ausreichend GPU-Ressourcen in Ihrem TeamClusterQueue, um erwartete Inferenzspitzen zu bewältigen. In Zeiten mit geringem Inferenzverkehr können ungenutzte Quotenressourcen vorübergehend den Aufgaben anderer Teams zugewiesen werden. Wenn der Bedarf an Inferenzen steigt, können diese geliehenen Ressourcen zurückgewonnen werden, um ausstehende Inferenz-Pods zu priorisieren. Weitere Informationen finden Sie unter Cluster-Warteschlange.

Strategien zur gemeinsamen Nutzung von Ressourcen

Wählen Sie zwischen zwei Anwesungen zur Aufteilung der Kontingente, die Ihren Anforderungen entsprechen:

  1. Strikte Ressourcenkontrolle: Deaktivieren Sie das Ausleihen und Ausleihen von Kontingenten, um sicherzustellen, dass reservierte GPU-Kapazität immer für Ihre Workloads verfügbar ist. Dieser Ansatz erfordert ausreichend dimensionierte Kontingente, um Spitzenauslastungen unabhängig bewältigen zu können, was jedoch in Zeiten mit geringem Datenverkehr zu ungenutzten Knoten führen kann.

  2. Flexible gemeinsame Nutzung von Ressourcen: Ermöglichen Sie das Ausleihen von Kontingenten, um bei Bedarf ungenutzte Ressourcen anderer Teams zu nutzen. Ausgeliehene Kapseln sind als vorrätig gekennzeichnet und können geräumt werden, wenn das Ausleihteam Kapazitäten zurückfordert.

Intra-Team Präventivmaßnahmen

Aktivieren Sie die teaminterne Präemption, wenn gemischte Workloads (Evaluierung, Schulung und Inferenz) unter demselben Kontingent ausgeführt werden. Dadurch kann Kueue Aufgaben mit niedrigerer Priorität innerhalb Ihres Teams vorrangig behandeln, um Pods mit hoher Priorität zu berücksichtigen, und so sicherstellen, dass die Echtzeit-Inferenz ohne externe Kontingentausleihe ausgeführt werden kann. Weitere Informationen finden Sie unter Präemption.

Beispiel für die Einrichtung eines Inferenz-Workloads

Das folgende Beispiel zeigt, wie Kueue GPU-Ressourcen in einem gemeinsam genutzten Amazon-Cluster verwaltet. SageMaker HyperPod

Clusterkonfiguration und Richtlinieneinrichtung

Ihr Cluster hat die folgende Konfiguration:

  • Gruppe A: 10-P4-GPU-Kontingent

  • Team B: 20-P4-GPU-Kontingent

  • Statische Bereitstellung: Keine automatische Skalierung

  • Gesamtkapazität: 30 P4-GPUs

Der gemeinsam genutzte GPU-Pool verwendet diese Prioritätsrichtlinie:

  1. Real-time Inferenz: Priorität 100

  2. Schulung: Priorität 75

  3. Bewertung: Priorität 50

In der Warteschlange werden Teamkontingente und Prioritätsklassen durchgesetzt, wobei Präemption und Quotenausleihe aktiviert sind.

Ausgangszustand: Normale Clusterauslastung

Im Normalbetrieb:

  • Team A führt Schulungs- und Evaluierungsjobs auf allen 10 P4-GPUs durch

  • Team B führt Inferenz (10 P4s) und Evaluierungen (10 P4s) in Echtzeit im Rahmen seiner 20-GPU-Quote durch

  • Der Cluster ist voll ausgelastet, da alle Jobs zugelassen sind und ausgeführt werden

Inferenzanstieg: Team B benötigt zusätzliche GPUs

Wenn Team B einen Anstieg des Datenverkehrs verzeichnet, benötigen zusätzliche Inferenz-Pods 5 weitere P4-GPUs. Kueue stellt fest, dass es sich bei den neuen Pods um:

  • Im Namespace von Team B

  • Priorität 100 (Echtzeit-Inferenz)

  • Aufgrund von Quotenbeschränkungen steht die Zulassung noch aus

Bei der Reaktion von Kueue wird zwischen zwei Optionen gewählt:

Option 1: Quotenausleihe – Wenn Team A nur 6 seiner 10 P4 verwendet, kann Kueue die Pods von Team B zulassen, die die 4 P4 im Leerlauf verwenden. Diese geliehenen Ressourcen sind jedoch präventiv – wenn Team A Aufträge einreicht, um sein volles Kontingent zu erreichen, entfernt Kueue die geliehenen Inferenzkapseln von Team B.

Option 2: Self-preemption (Empfohlen) — Team B führt Bewertungsaufträge mit niedriger Priorität aus (Priorität 50). Wenn Inferenz-Pods mit hoher Priorität warten, nimmt Kueue die Evaluierungsjobs innerhalb des Kontingents von Team B vor und lässt die Inferenz-Pods zu. Dieser Ansatz ermöglicht eine sichere Ressourcenzuweisung ohne das Risiko einer externen Räumung.

Kueue folgt einem dreistufigen Prozess zur Zuweisung von Ressourcen:

  1. Kontingentprüfung

    Frage: Hat Team B ein ungenutztes Kontingent?

    • Ja → Gib die Pods zu

    • Nein → Weiter mit Schritt 2

  2. Self-preemption innerhalb von Team B

    Frage: Können Team-B-Jobs mit niedrigerer Priorität ausgeschlossen werden?

    • Ja → Evaluierungsjobs (Priorität 50) zuvorkommen, 5 P4 freigeben und Inferenz-Pods zulassen

    • Nein → Weiter mit Schritt 3

    Dieser Ansatz hält die Arbeitslast innerhalb der garantierten Quote von Team B und vermeidet so das Risiko einer externen Unternehmensräumung.

  3. Kredite von anderen Teams aufnehmen

    Frage: Gibt es ungenutzte, ausleihbare Quoten von anderen Teams?

    • Ja → Gib zu, ein geliehenes Kontingent genutzt zu haben (als präemptiv gekennzeichnet)

    • Nein → Der Pod bleibt im Status NotAdmitted

Konfiguration der Aufgabensteuerung für Inferenz-Workloads

Um Ihre Inferenz-Workloads in Kueue zu integrieren, fügen Sie Ihrer CRD Aufgaben-Governance-Labels hinzu. InferenceEndpointConfig JumpStartModel Diese Labels legen fest, wer die Arbeitslast für die Kontingentverwaltung LocalQueue erhält, und definieren die Planungspriorität, die bei Präventiventscheidungen verwendet wird. In den folgenden Abschnitten werden Voraussetzungen, Ressourcenumfang, Labelkonfiguration und Überprüfungsschritte behandelt.

Voraussetzungen

Bevor Sie die Task-Governance für Inferenz-Workloads konfigurieren, stellen Sie sicher, dass die folgenden Ressourcen in Ihrem Cluster vorhanden sind: HyperPod

  • Kueue ist auf Ihrem Cluster installiert und läuft

  • A ClusterQueue existiert mit einem GPU-Kontingent, das Ihrem Team zugewiesen ist

  • A LocalQueue ist in dem Namespace vorhanden, in dem Sie Ihren Inferenzendpunkt bereitstellen möchten

  • Eine oder mehrere PriorityClass Ressourcen sind für Workload-Typen (wie Inferenz, Schulung, Bewertung) definiert

Führen Sie die folgenden Befehle aus, um zu überprüfen, ob diese Ressourcen verfügbar sind:

# Verify Kueue is installed kubectl get crd | grep kueue # List available PriorityClasses kubectl get priorityclass # List ClusterQueues kubectl get clusterqueue # List LocalQueues in your namespace kubectl get localqueue -n <your-namespace>

Grundlegendes zum Ressourcenumfang

Ressourcen zur Aufgabenverwaltung haben unterschiedliche Bereiche, die sich darauf auswirken, wie Sie Ihre Labels für die Inferenzbereitstellung konfigurieren.

Das kueue.x-k8s.io/queue-name Label muss auf ein verweisen LocalQueue , das im selben Namespace wie Ihr oder existiert. InferenceEndpointConfig JumpStartModel Wenn in diesem Namespace keine Übereinstimmung gefunden LocalQueue wird, wird die Arbeitslast von Kueue nicht akzeptiert.

ClusterQueue ResourceFlavor, und PriorityClass sind clusterübergreifend und von jedem Namespace aus zugänglich.

Gehen Sie wie folgt vor, um den Ressourcenbereich in Ihrem Cluster zu überprüfen:

kubectl api-resources | grep kueue

Hinzufügen von Bezeichnungen für die Aufgabenverwaltung

Um die Aufgabensteuerung für Ihre Inferenzbereitstellung zu aktivieren, fügen Sie dem metadata Abschnitt Ihrer InferenceEndpointConfig oder JumpStartModel CRD die folgenden Bezeichnungen hinzu:

metadata: name: <your-deployment-name> namespace: <your-namespace> labels: kueue.x-k8s.io/queue-name: <your-localqueue-name> kueue.x-k8s.io/priority-class: <your-priority-class>

Beschreibungen der Labels:

  • kueue.x-k8s.io/queue-name— Leitet die Arbeitslast LocalQueue zur Kontingentverfolgung an Ihr Team weiter. Muss mit einem LocalQueue Namen im gleichen Namespace wie die Arbeitslast übereinstimmen.

  • kueue.x-k8s.io/priority-class— Legt die Planungspriorität für Präventiventscheidungen fest. Verweist auf einen Clusterbereich anhand seines Namens PriorityClass .

Die Konfiguration der Aufgabenverwaltung wird überprüft

Nachdem Sie Ihre InferenceEndpointConfig oder JumpStartModel die Task-Governance-Labels angebracht haben, überprüfen Sie, ob Kueue die Arbeitslast zugelassen hat und die Pods korrekt geplant werden.

Um zu überprüfen, ob die Task-Governance funktioniert
  1. Überprüfen Sie den Status der Workload-Zulassung:

    kubectl get workloads -n <namespace>

    Ein erfolgreich zugelassener Workload wird True in der Spalte ZUGELASSEN angezeigt und listet ClusterQueue die reservierten Ressourcen in der Spalte RESERVED IN auf.

  2. Überprüfen Sie den Pod-Status:

    kubectl get pods -n <namespace>

    Nach der Aufnahme durchlaufen die Pods schrittweise die Initialisierungsphasen, bis sie den Running Status erreichen.

  3. Überprüfen Sie den Kontingentverbrauch:

    kubectl get clusterqueue <clusterqueue-name> -o yaml

    Überprüfe den status Abschnitt, um sicherzustellen, dass der Ressourcenverbrauch erfasst wird.

  4. Überprüfen Sie die LocalQueue ausstehenden Workloads:

    kubectl get localqueue -n <namespace>

    In der Spalte AUSSTEHENDE ARBEITSLASTEN wird angezeigt, wie viele Workloads auf ihre Zulassung warten.

  5. Veranstaltungen zur Zulassung in Kueue anzeigen:

    kubectl describe workload <workload-name> -n <namespace>

    Im Abschnitt Veranstaltungen finden Sie Informationen zu Zulassungsentscheidungen und etwaigen Fehlern.

Wenn die Pods weiterhin im Pending Status sind, stellen Sie fest, ob das Problem auf der Kueue-Zulassungsebene (Workload wird angezeigtAdmitted: False) oder auf der Kubernetes-Scheduler-Ebene (Workload zugelassen, Pod jedoch nicht planbar) liegt.