In diesem Dokument wird beschrieben, wie Sie dynamisches Slicing verwenden, indem Sie direkt mit benutzerdefinierten Slice-Ressourcen interagieren. Sie können Slices erstellen, Partitionsstatus überwachen und den Zustand von Slices prüfen.
Bevor Sie dieser Anleitung folgen, sollten Sie sich mit den Konzepten des dynamischen Aufteilens vertraut machen.
Vorteile von dynamischem Slicing mit einem benutzerdefinierten Scheduler
Verwenden Sie Ihren eigenen Scheduler, um Slice-Ressourcen zu verwalten, wenn Sie komplexe Planungsanforderungen haben oder dynamisches Slicing in Ihre vorhandene Planungsinfrastruktur einbinden möchten.
Wenn Sie lieber einen Scheduler verwenden möchten, anstatt Slice-benutzerdefinierte Ressourcen direkt zu verwalten, bietet GKE die Integration mit Kueue und Topology Aware Scheduling (TAS). Weitere Informationen finden Sie unter Dynamische Slices mit Kueue und TAS planen.
Übersicht über den Workflow
Wenn Sie dynamisches Slicing mit einem benutzerdefinierten Scheduler verwenden möchten, führen Sie die folgenden Aufgaben in diesem Dokument aus:
- Slice-Controller aktivieren
- Knotenpools mit inkrementeller Bereitstellung erstellen
- Benutzerdefinierte Slice-Ressourcen basierend auf Ihren Arbeitslastanforderungen erstellen. Wenden Sie die benutzerdefinierte Ressource „Slice“ auf Ihren Cluster an.
- Partitionsstatus und Slice-Integrität überwachen
- Löschen Sie den Ausschnitt, wenn Sie fertig sind.
Weitere Informationen zu den Feldern und dem Status der benutzerdefinierten Slice-Ressource finden Sie in den Referenzinformationen zur benutzerdefinierten Slice-Ressource.
Voraussetzungen
Damit Sie dynamisches Slicing in GKE verwenden können, müssen die folgenden Anforderungen erfüllt sein:
- Verwenden Sie einen Standardcluster im Rapid Channel in einer der folgenden Versionen:
- Für die dynamische Konfiguration von Super-Slicing (Topologien, die größer oder gleich
4x4x4sind) verwenden Sie Version 1.35.2-gke.1842000 oder höher. - Für die dynamische Konfiguration von Sub-Slicing (Topologien kleiner als
4x4x4) verwenden Sie Version 1.36.0-gke.3712000 oder höher.
- Für die dynamische Konfiguration von Super-Slicing (Topologien, die größer oder gleich
- Verwenden Sie die Ironwood-Version (TPU7x).
- Verwenden Sie das Container-Optimized OS-Image für Ihre Knoten.
- Wenn Sie die inkrementelle Bereitstellung verwenden möchten, müssen Sie Reservierungen im Modus „Alle Kapazitäten“ verwenden. „Alle“-Kapazitätsmodus ist eine Funktion, die von TPU Cluster Director aktiviert wird.
- Für das dynamische Unterteilen von Slices müssen auf Ihren Knoten ausstehende Wartungsereignisse vorhanden sein. Instanzen auf anstehende Wartungsereignisse überwachen Wenn für einen Ihrer Knoten ein ausstehendes Wartungsereignis mit einem Endzeitpunkt zwischen dem 18. September 2026 und dem 30. September 2026 vorliegt, müssen Sie das Wartungsereignis für den Host für diese Knoten manuell auslösen, bevor Sie die Unterteilung verwenden können.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
- Sie benötigen einen Standardcluster in Version 1.35.2-gke.1842000 oder höher im Rapid Channel. Informationen zum Erstellen eines neuen Clusters finden Sie unter Regionalen Cluster erstellen.
- Prüfen Sie, ob Sie ein ausreichendes Kontingent für Ironwood (TPU7x) in Ihrer Region haben.
- Wenn Sie Multislice-Arbeitslasten ausführen möchten, installieren Sie JobSet v0.10.1 oder höher.
- TPU-Kapazität im Modus „All Capacity“ anfordern
Slice-Controller aktivieren
Wenn Sie dynamisches Slicing verwenden möchten, aktivieren Sie den Slice-Controller in Ihrem Cluster.
Cluster aktualisieren:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --enable-slice-controllerErsetzen Sie Folgendes:
CLUSTER_NAME: Der Name Ihres Clusters.LOCATION: Die Region mit Ihrer verfügbaren TPU-Kapazität.
Rufen Sie Anmeldedaten ab, damit Sie mit
kubectl-Befehlen mit Ihrem Cluster kommunizieren können:gcloud config set container/cluster CLUSTER_NAME gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONPrüfen Sie in der Ausgabe des folgenden Befehls, ob der Wert
slices.accelerator.gke.iovorhanden ist:kubectl get crd slices.accelerator.gke.ioDie Ausgabe sieht etwa so aus:
slices.accelerator.gke.io 2026-01-09T23:58:02Z
Knotenpools mit inkrementeller Bereitstellung erstellen
In diesem Abschnitt wird beschrieben, wie Sie die TPU-Knotenpools mit inkrementeller Bereitstellung erstellen. GKE konvertiert Ihre gesamte TPU-Kapazität in Knotenpools mit einer 16-Knoten-Gruppe von TPU-VMs oder Unterblöcken. GKE stellt diese Knotenpools auch dann bereit, wenn nicht alle 16 fehlerfreien VMs gefunden werden können. Dazu werden Knoten auf fehlerfreien Teilen des Hostcomputers platziert und fehlerhafte Maschinen inkrementell bereitgestellt, während sie repariert werden.
Sie können festlegen, dass Ihr Knotenpool zu einer der folgenden Kategorien gehört:
- Ein bestimmter TPU-Block, der in Reservierungen im Modus „Alle Kapazitäten“ verfügbar ist. Durch die Blockausrichtung kann GKE den Knotenpool in einem beliebigen verfügbaren Unterblock innerhalb des angegebenen Blocks erstellen.
- Ein bestimmter Unterblock oder eine bestimmte Gruppe von 16 TPU-VMs für eine detailliertere Steuerung.
Arbeitslastrichtlinie erstellen
Wenn Sie einen TPU-Slice-Knotenpool mit Ironwood (TPU7x) erstellen möchten, müssen Sie zuerst eine Arbeitslastrichtlinie erstellen, bei der das Feld accelerator-topology-mode auf provision_only festgelegt ist. Diese Einstellung löst den inkrementellen Bereitstellungsprozess aus.
Arbeitslastrichtlinie erstellen:
gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
--project=PROJECT_ID \
--region=REGION \
--type=HIGH_THROUGHPUT \
--accelerator-topology=4x4x4 \
--accelerator-topology-mode=provision_only
Ersetzen Sie Folgendes:
WORKLOAD_POLICY_NAME: ein Name für Ihre Arbeitslastrichtlinie.PROJECT_ID: Projekt-ID in Google Cloud .REGION: die Region für die Arbeitslastrichtlinie.
Führen Sie in diesem Befehl folgende Schritte aus:
- Legen Sie das Feld
accelerator-topologyimmer auf4x4x4fest, damit es der Gesamtzahl der Chips in einem einzelnen Unterblock entspricht. - Legen Sie das Feld
accelerator-topology-modeimmer aufprovision_onlyfest, damit der inkrementelle Bereitstellungsprozess ausgelöst wird. Wenn das Feldprovision_onlyfestgelegt ist, werden im Knotenpool TPU-Knoten bereitgestellt, ohne ICI- oder OCS-Verbindungen zu erstellen.
Knotenpool einem Block oder Unterblock zuweisen
Sie können bestimmte Unterblöcke oder Blöcke in Ihrer Reservierung im Modus „Alle Kapazitäten“ targetieren.
- Auf einen Block ausrichten:Jeder Knotenpool verwendet Kapazität aus einem bestimmten Block. GKE platziert den Knotenpool in einem verfügbaren Unterblock in diesem Block. Sie müssen so viele Knotenpools erstellen, wie es Unterblöcke im Block gibt, den Sie verwenden möchten.
Auf einen Unterblock ausrichten:Jeder Knotenpool wird einem bestimmten verfügbaren Unterblock zugeordnet. Wenn Sie die Ausrichtung auf Unterblöcke verwenden, erstellt GKE den Knotenpool, wenn mindestens eine VM fehlerfrei ist. Die inkrementelle Bereitstellung trägt dazu bei, dass alle Knoten innerhalb des angegebenen Unterblocks platziert werden.
Blockieren
Wenn Sie den Namen des Blocks in einer Reservierung und die Anzahl der verfügbaren Unterblöcke im Block abrufen möchten, führen Sie die folgenden Schritte im Dokument Topologie und Status von Reservierungen im Modus „Alle Kapazitäten“ ansehen aus:
Ermitteln Sie den Namen des Blocks, indem Sie alle Reservierungsblöcke auflisten und den Wert im Feld
name:kopieren. Dieser Wert ist der Name des Blocks oderBLOCK_NAMEin diesem Dokument.Ermitteln Sie, wie viele Knotenpools erstellt werden sollen, indem Sie einen Reservierungsblock beschreiben und den Wert im Feld
reservationSubBlockCountermitteln. Dieser Wert gibt die Anzahl der verfügbaren Unterblöcke an. Der WertreservationSubBlockCount: 4gibt beispielsweise an, dass für den Block vier Unterblöcke verfügbar sind und Sie vier separate Knotenpools erstellen müssen.
Reservierungspfad festlegen:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME"Ersetzen Sie Folgendes:
RESERVATION_NAME: Der Name Ihrer TPU-Reservierung.BLOCK_NAME: der Name des Blocks.
Erstellen Sie für jeden im vorherigen Schritt ermittelten Unterblock einen Knotenpool. Wenn die Anzahl beispielsweise
4ist, führen Sie diesen Befehl viermal aus. Verwenden Sie für jeden Knotenpool einen eindeutigen Namen.gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --node-locations=ZONE \ --machine-type=tpu7x-standard-4t \ --num-nodes=16 \ --placement-policy=WORKLOAD_POLICY_NAME \ --reservation-affinity=specific \ --reservation=${RESERVATION_PATH}Ersetzen Sie Folgendes:
NODE_POOL_NAMEist der Name des neuen Knotenpools.CLUSTER_NAME: der Name Ihres GKE-Clusters.WORKLOAD_POLICY_NAME: der Name der von Ihnen erstellten Workload-Richtlinie.ZONE: die Zone für den Knotenpool, z. B.us-central1-a.
Unterblock
Führen Sie die folgenden Schritte im Dokument Topologie und Integritätsstatus von Reservierungen im Modus „Alle Kapazitäten“ ansehen aus, um den Namen des Blocks und die IDs der verfügbaren Unterblöcke abzurufen:
Um den Namen des Blocks zu ermitteln, listen Sie alle Reservierungsblöcke auf und kopieren Sie den Wert im Feld
name:. Dieser Wert ist der Name des Blocks oder derBLOCK_NAMEin diesem Dokument.Wenn Sie den Namen der Unterblöcke ermitteln möchten, listen Sie alle Unterblöcke eines Blocks auf und kopieren Sie den Wert im Feld
name:für jeden Eintrag unterreservationSubBlocks. Dieser Wert ist der Name des Unterblocks oderSUBBLOCK_NAMEin diesem Dokument.
Reservierungspfad festlegen:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUBBLOCK_NAME"Ersetzen Sie Folgendes:
RESERVATION_NAME: Der Name Ihrer TPU-Reservierung.BLOCK_NAME: der Name des Blocks.SUBBLOCK_NAME: der Name des Unterblocks.
Knotenpool erstellen:
gcloud container node-pools create NODE_POOL_NAME \ --project=PROJECT_ID \ --cluster=CLUSTER_NAME \ --node-locations=ZONE \ --machine-type=tpu7x-standard-4t \ --num-nodes=16 \ --placement-policy=WORKLOAD_POLICY_NAME \ --reservation-affinity=specific \ --reservation=${RESERVATION_PATH}Ersetzen Sie Folgendes:
NODE_POOL_NAME: ein eindeutiger Name für Ihren neuen Knotenpool, z. B.sub-block-pool-1.PROJECT_ID: Projekt-ID in Google Cloud .CLUSTER_NAME: Name Ihres GKE-Clusters.ZONE: Die Zone für den Knotenpool, z. B.us-central2-b.WORKLOAD_POLICY_NAME: der Name der von Ihnen erstellten Arbeitslastrichtlinie.
In dieser Phase werden die Knoten erstellt, ihre Inter-Chip Interconnect-Verbindungen (ICI) sind jedoch noch nicht aktiv. Daher können Sie Arbeitslasten nicht direkt in diesen Knotenpools ausführen.
Damit alle erforderlichen ICI-Links zum Erstellen des Slices und zum Planen von Arbeitslasten verwendet werden können, erstellen Sie einen dynamischen Slice mit einer der folgenden Methoden:
- Erstellen Sie eine benutzerdefinierte Slice-Ressource. Anstelle von Pods verwenden Sie eine benutzerdefinierte Slice-Ressource, um die angegebene Topologie zu definieren, die vom Slice-Controller aktiviert wird.
- GKE-Arbeitslasten mit Kueue und TAS planen. Kueue übernimmt automatisch das Erstellen und Löschen von benutzerdefinierten Slice-Ressourcen. Von Kueue erstellte benutzerdefinierte Slice-Ressourcen sollten nicht manuell geändert werden.
Dynamischen Segment mit Super- oder Sub-Slicing erstellen
Nachdem Sie die Knotenpools erstellt haben, können Sie ein größeres dynamisches Super-Slice oder ein kleineres dynamisches Sub-Slice erstellen, indem Sie eine benutzerdefinierte Slice-Ressource erstellen. Eine benutzerdefinierte Slice-Ressource definiert die angegebene Topologie, die vom Slice-Controller aktiviert wird. Ihre Arbeitslasten werden dann in diesem dynamischen Slice geplant und ausgeführt.
Dynamische Segmentpartitionen
Partitionen stellen die Topologien bereit, die zum Erstellen eines dynamischen Slices für Ihre Arbeitslasten verfügbar sind. In einer Partition werden alle verfügbaren Topologien für jeden Knoten angezeigt, einschließlich 2x2x1, 2x2x2, 2x2x4, 2x4x4 und 4x4x4. Für Topologien, die kleiner als 4x4x4 sind, ist die GKE-Version 1.36.0-gke.3712000 oder höher erforderlich.
Für alle Slices, die größer als 4x4x4 sind, gibt es kein Partitionslabel, da sie durch die Verknüpfung mehrerer 4x4x4-Partitionen erstellt werden.
Jeder TPU-Knoten in einem Knotenpool mit inkrementeller Bereitstellung muss alle angegebenen Knotenlabels für Partitions-ID und Partitionsstatus haben.
Status der Knoten und Partitionen prüfen
Führen Sie den folgenden Befehl aus, um die Knotennamen aus dem Knotenpool abzurufen:
kubectl get nodes -l cloud.google.com/gke-nodepool=${NODE_POOL_NAME}Die Ausgabe sieht in etwa so aus:
NAME STATUS ROLES AGE VERSION gke-np-status-update-7b4c890c-0jhp Ready <none> 2d1h v1.35.1-gke.1396002 gke-np-status-update-7b4c890c-377r Ready <none> 2d1h v1.35.1-gke.1396002 gke-np-status-update-7b4c890c-gb51 Ready <none> 2d1h v1.35.1-gke.1396002Prüfen Sie das Bereitstellungsmodell des Knotens:
kubectl describe node NODE_NAME | grep "cloud.google.com/gke-accelerator-topology-mode"Die Ausgabe sieht in etwa so aus:
cloud.google.com/gke-accelerator-topology-mode: PROVISION_ONLYRufen Sie die Knotenlabelinformationen für die Topologiepartition ab, auf die Sie abzielen möchten:
kubectl describe node NODE_NAME | grep -E "cloud.google.com/gke-tpu-partition-.*-id"Ersetzen Sie
NODE_NAMEdurch den Namen eines der Knoten im Knotenpool.Die Ausgabe sieht in etwa so aus:
cloud.google.com/gke-tpu-partition-4x4x4-id=fba785f80d18552357dcdef6d3d16c27 cloud.google.com/gke-tpu-partition-2x4x4-id=e18372d627ac412cb24d5ea8ab8912c9 cloud.google.com/gke-tpu-partition-2x2x4-id=7fbd4e29dc1839217fae41a9dd8211b4 cloud.google.com/gke-tpu-partition-2x2x2-id=a9476d1b02bd4f4e75ffffae3bd23c01 cloud.google.com/gke-tpu-partition-2x2x1-id=0bcfe937d1bb3914a8bdcd94e9f73319Prüfen Sie, ob der Knoten die Annotation
node.gke.io/created-by-migenthält:kubectl describe node NODE_NAME | grep "node.gke.io/created-by-mig"Ersetzen Sie
NODE_NAMEdurch den Namen eines der Knoten im Knotenpool.Die Ausgabe sieht in etwa so aus:
node.gke.io/created-by-mig: projects/735972712744/zones/us-central1-ai1a/team/stringDie Ausgabe enthält die Annotation
node.gke.io/created-by-mig, mit der die GKE-Steuerungsebene Kubernetes-Knoten mit den zugrunde liegenden Compute Engine-Ressourcen verknüpfen kann.Rufen Sie die Knotenlabelinformationen für den Topologiepartitionsstatus ab, den Sie überprüfen möchten:
kubectl describe node NODE_NAME | grep -E "cloud.google.com/gke-tpu-partition-.*-state"Die Ausgabe sieht in etwa so aus:
cloud.google.com/gke-tpu-partition-4x4x4-state=HEALTHY cloud.google.com/gke-tpu-partition-2x4x4-state=HEALTHY cloud.google.com/gke-tpu-partition-2x2x4-state=HEALTHY cloud.google.com/gke-tpu-partition-2x2x2-state=HEALTHY cloud.google.com/gke-tpu-partition-2x2x1-state=HEALTHYDas Label
cloud.google.com/gke-tpu-partition-[shape]-state(wobei[shape]der Topologie der Partitions-ID entspricht) gibt an, ob die Partition zum Erstellen eines dynamischen Slices verfügbar ist. Dieses Statuslabel unterstützt die folgenden Werte:HEALTHY: Die Partition ist fehlerfrei und voll funktionsfähig.DEGRADED: Die Partition ist beeinträchtigt, kann aber weiterhin für die dynamische Segmentbildung verwendet werden. Dieser Status gilt nur für die4x4x4-Topologie der obersten Ebene. Bei kleineren Topologien gibt es keinen eingeschränkten Zustand.UNHEALTHY: Die Partition funktioniert nicht richtig und kann nicht zum Erstellen eines Slice verwendet werden.UNSET: Der Status ist aufgrund einer fehlgeschlagenen Initialisierung des GKE-Slice-Controllers nicht definiert.INCOMPLETE: Nicht alle Knoten in der Partition werden bereitgestellt.
Benutzerdefinierte Slice-Ressource erstellen
Die benutzerdefinierte Ressource „Slice“ variiert geringfügig, je nachdem, ob Sie einen dynamischen Super-Slice oder einen dynamischen Sub-Slice erstellen.
Definieren Sie die benutzerdefinierte Slice-Ressource:
apiVersion: accelerator.gke.io/v1beta1 kind: Slice metadata: # Name of the slice resource name: SLICE_NAME spec: # Specify the type of accelerator for this slice type: "tpu7x" # Define the desired topology for the accelerator slice topology: TOPOLOGY partitionIds: - PARTITION_ID # Example: a9476d1b02bd4f4e75ffffae3bd23c01 - PARTITION_ID_2 # ... add more partition IDs as neededErsetzen Sie Folgendes:
SLICE_NAME: ein Name für Ihr Segment. Der Name muss den Bedingungen fürmetadata.nameentsprechen und darf maximal 49 Zeichen lang sein.TOPOLOGY: Die Topologie für das dynamische Slice. Die Topologie muss die folgenden Bedingungen erfüllen:- Für dynamisches Unterteilen in Slices können Sie Topologien angeben, die kleiner als
4x4x4sind, z. B.2x2x1,2x2x2,2x2x4oder2x4x4. Für diese kleineren Topologien ist die GKE-Version 1.36.0-gke.3712000 oder höher erforderlich. - Für dynamisches Super-Slicing:Sie können Topologien angeben, die gleich oder größer als
4x4x4sind. Wenn Sie das dynamische Super-Slicing konfigurieren möchten, muss jede Dimension der angeforderten Topologie ein Vielfaches von vier sein, z. B.4A x 4B x 4C. Die drei Werte in den Topologiedimensionen,AxBxC, müssen in nicht absteigender Reihenfolge angegeben werden (A ≤ B ≤ C). Beispiel:4x4x8ist gültig,4x8x4jedoch nicht. Diese Reihenfolge sorgt für eine konsistente Segmentbildung und vermeidet unerwartetes Verhalten. Das Produkt der drei Werte in den Topologiedimensionen,A × B × C,darf 9.216 nicht überschreiten.
- Für dynamisches Unterteilen in Slices können Sie Topologien angeben, die kleiner als
PARTITION_ID: Eine Liste von Strings, die die Partitionen des Segments identifizieren.- Für dynamisches Unterteilen in Slices müssen Sie genau eine Partitions-ID angeben.
- Für dynamisches Super-Slicing müssen Sie die Anzahl der Partitionen anhand der Gesamtzahl der Chips berechnen. Jede Partition besteht aus 64 Chips. Die Anzahl der Elemente in Ihrer
spec.partitionIds-Liste muss genau mit der berechneten Anzahl der Partitionen ((A × B × C) / 64) übereinstimmen. - Die
partitionIds-Liste muss die folgenden Bedingungen erfüllen:- Jede Partition muss einem Reservierungsunterblock zugeordnet werden.
- Alle zugehörigen Unterblöcke müssen zur selben Reservierung gehören.
- Alle zugehörigen Unterblöcke müssen sich in derselben Reservierung befinden.
- Die zugehörigen Knotenpools müssen alle Knoten im Status
readyhaben.
- Der Wert des Felds
typemusstpu7xsein. - Optional können Sie der benutzerdefinierten Slice-Ressource die Annotation
slice.gke.io/retry-on-failure: "true"hinzufügen, damit der Slice-Controller während der Slice-Erstellung automatisch Wiederholungsversuche unternimmt. Wenn das Segment aufgrund des StatusgrundsSliceCreationFailednicht erstellt wird, versucht der Controller es noch einmal, bis das Segment erfolgreich erstellt wurde.
Wenn Sie beispielsweise einen
4x8x8-Slice (dynamisches Super-Slicing) erstellen möchten, müssen Sie vier eindeutige Partitions-IDs angeben.apiVersion: accelerator.gke.io/v1beta1 kind: Slice metadata: name: test-super-slice-example annotations: slice.gke.io/retry-on-failure: "true" spec: type: "tpu7x" topology: "4x8x8" # (4*8*8)/64 = 4 partitions partitionIds: - "p0-4x4x4" - "p1-4x4x4" - "p2-4x4x4" - "p3-4x4x4"Wenn Sie beispielsweise einen
2x2x2-Slice (dynamisches Unter-Slicing) erstellen möchten, müssen Sie eine eindeutige Partitions-ID angeben.apiVersion: accelerator.gke.io/v1beta1 kind: Slice metadata: name: test-sub-slice-example annotations: slice.gke.io/retry-on-failure: "true" spec: type: "tpu7x" topology: "2x2x2" partitionIds: - "fba785f80d18552357dcdef6d3d16c27" # Only 1 partitionId for sub-sliceWenden Sie die benutzerdefinierte Slice-Ressource an:
kubectl apply -f test-slice-example.yamlAn diesem Punkt versucht GKE, den Slice zu erstellen. Wenn eines der folgenden Probleme auftritt, schlägt die Erstellung des Slice fehl und der Statusgrund in der benutzerdefinierten Slice-Ressource wird auf
SliceCreationFailedoderFAILEDaktualisiert:- Wenn die ausgewählten Knoten in der benutzerdefinierten Ressource nicht vorhanden sind, lautet der Statusgrund
SliceCreationFailed. - Wenn Knoten in der benutzerdefinierten Ressource von einem anderen Slice verwendet werden, lautet der Statusgrund
SliceCreationFailed. - Wenn die Knoten in der benutzerdefinierten Ressource nicht Teil desselben Reservierungsunterblocks sind, lautet der Statusgrund
FAILED. - Wenn sich die Knoten nicht in derselben Reservierung befinden, lautet der Statusgrund
FAILED. - Wenn die Topologie nicht mit der Anzahl der Partitionen übereinstimmt, lautet der Statusgrund
SliceCreationFailed.
Wenn die Slice-Erstellung automatisch wiederholt werden soll, wenn der Status
SliceCreationFailedist, konfigurieren Sie die Annotationslice.gke.io/retry-on-failure: "true"wie unter Benutzerdefinierte Slice-Ressource erstellen beschrieben.Weitere Informationen zum Status der benutzerdefinierten Ressource „Slice“ finden Sie unter Slice-Status.
- Wenn die ausgewählten Knoten in der benutzerdefinierten Ressource nicht vorhanden sind, lautet der Statusgrund
Status der benutzerdefinierten Slice-Ressource überwachen
Führen Sie den folgenden Befehl aus, um den Status der benutzerdefinierten Slice-Ressource zu prüfen:
kubectl describe slice SLICE_NAME
Ersetzen Sie SLICE_NAME durch den Namen des Segments.
Die Ausgabe sieht etwa so aus:
Name: test-slice
Namespace:
Labels: <none>
Annotations: <none>
API Version: accelerator.gke.io/v1beta1
Kind: Slice
Metadata:
Creation Timestamp: 2026-01-11T23:45:15Z
Finalizers:
accelerator.gke.io/slice-finalizer
Generation: 1
Resource Version: 1768175347356335006
UID: d0b71e5c-be3f-4788-aead-930c7afec4f2
Spec:
Partition Ids:
2c79463990ff67c4e3c2648666bfedfa
ba898ffcac0ad0946e8ff036d771ee53
[more partition IDs]
Topology: 8x16x16
Type: tpu7x
Status:
Conditions:
Last Transition Time: 2026-01-11T23:45:38Z
Message: ""
Reason: FAILED
Status: False
Type: Ready
Events:
Das Feld reason im Status der benutzerdefinierten Slice-Ressource gibt den aktuellen Lebenszyklusstatus an. Die möglichen Status variieren je nachdem, ob Sie dynamische Unterlizenzen oder dynamische Superlizenzen verwenden.
Statusbedingungen für dynamische Untersegmentierung
SliceNotCreated: Der Controller führt die Initialisierung und Ressourcenprüfungen durch.- Wenn die Voraussetzungen nicht erfüllt sind, wechselt der Status zu
SliceCreationFailed. - Wenn die Validierung erfolgreich ist, ändert sich der Status zu
ACTIVATING.
- Wenn die Voraussetzungen nicht erfüllt sind, wechselt der Status zu
ACTIVATING: GKE bildet den Slice.- Bei Erfolg wechselt der Status zu
ACTIVE. - Wenn Unterblöcke eingeschränkt sind, der Slice aber verwendet werden kann, ändert sich der Status zu
ACTIVE_DEGRADED. - Wenn die Bildung fehlschlägt, wechselt der Status zu
FAILED.
- Bei Erfolg wechselt der Status zu
DEACTIVATING: Wenn die benutzerdefinierte Slice-Ressource gelöscht wird oder ein kritischer Fehler in einem aktiven oder fehlgeschlagenen Status auftritt, wird das Slice abgebaut.INCOMPLETE: Der letzte Schritt, bevor die Ressource vollständig gelöscht wird.
Statusbedingungen für dynamisches Super-Slicing
SliceNotCreated: Das Segment wurde noch nicht erstellt. Der Slice-Controller wird initialisiert und führt Preflight-Prüfungen für die Slice-Erstellung durch.SliceCreationFailed: Die Erstellung ist fehlgeschlagen, weil die Voraussetzungen nicht erfüllt waren (z. B. erforderliche Compute Engine-Ressourcen fehlen) oder Preflight-Prüfungen fehlgeschlagen sind. Wenn Sie die Segmentbildung in diesem Status automatisch wiederholen möchten, konfigurieren Sie dieslice.gke.io/retry-on-failure: "true"-Annotation.ACTIVATING: Das Segment wird gerade erstellt (zusammengefügt).ACTIVE: Der Slice ist vollständig, fehlerfrei und bereit für die Ausführung von Arbeitslasten.ACTIVE_DEGRADED: Der Slice wird gebildet, enthält aber degradierte Cubes, die durch die ICI-Resilienz unterstützt werden. Arbeitslasten können ausgeführt werden, aber die Leistung ist möglicherweise beeinträchtigt. Dynamisches Super-Slicing ist gegenüber dem Ausfall eines einzelnen optischen Schalters (Optical Circuit Switch, OCS) stabil. Wenn eine einzelne OCS-Einheit ausfällt, sind alle optischen Verbindungen, die diesen Switch durchlaufen, nicht mehr verfügbar. Dadurch arbeiten alle Cubes im Superpod in einem eingeschränkten Zustand.DEACTIVATING: Das Segment wird gerade aufgelöst.FAILED: Der Slice kann keine Arbeitslasten mehr ausführen. Dieser Status tritt auf, wenn die anfängliche Bildung fehlgeschlagen ist oder bei einem aktiven Slice ein kritischer Software- oder Hardwarefehler aufgetreten ist.INCOMPLETE: Es sind nicht genügend verfügbare Cubes vorhanden, um die Bildung von Super-Slices zu starten.
Weitere Informationen zum Status der benutzerdefinierten Ressource „Slice“ finden Sie unter Slice-Status.
Arbeitslasten mit dynamischem Slicing ausführen
Wenn sich die benutzerdefinierte Ressource „Slice“ im Status ACTIVE befindet, können Sie Arbeitslasten darauf ausführen.
Im folgenden Abschnitt finden Sie Beispiele für Arbeitslasten, bei denen dynamisches Slicing verwendet wird. Die Arbeitslasten werden als Jobs oder JobSets eingereicht.
Beispiel 1: Eine einzelne Arbeitslast verwendet einen einzelnen Slice
Im folgenden Beispiel wird eine Arbeitslast mit einem einzelnen dynamischen 4x4x4-Superslice dargestellt.
Speichern Sie das folgende Beispielmanifest als
tpu-job-jax-v7x-64.yaml:In diesem Manifest:
cloud.google.com/gke-tpu-slice-topologyundcloud.google.com/gke-tpu-topologydefinieren die Topologie des dynamischen Slice.env.value: tpu7x-128ist der TPU-Beschleunigertyp und die Gesamtzahl der Kerne im Slice. Die Anzahl der Kerne wird berechnet, indem die Dimensionen der Topologie mit der Anzahl der Kerne pro Chip multipliziert werden. Bei einer4x4x4-Topologie lautet die Berechnung beispielsweise4 × 4 × 4 × 2 = 128, wobei2die Anzahl der Kerne pro Chip fürtpu7x(Ironwood (TPU7x)) ist. Daher ist dieTPU_ACCELERATOR_TYPEtpu7x-128.
Wenden Sie das
tpu-job-jax-v7x-64.yaml-Manifest an:kubectl apply -f tpu-job-jax-v7x-64.yaml
Beispiel 2: Arbeitslast mit JobSet in Multislice-Knotenpools bereitstellen
In diesem Beispiel wird gezeigt, wie Sie eine Arbeitslast mit JobSet in Multislice-Knotenpools bereitstellen.
JobSet installieren:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/JOBSET_VERSION/manifests.yamlErsetzen Sie
JOBSET_VERSIONdurch die erforderliche Version von JobSet. Für das dynamische Unterteilen von Slices ist JobSet v0.12.0 oder höher erforderlich. Für dynamisches Super-Slicing verwenden Sie JobSet v0.11.1 oder höher.Speichern Sie das folgende Beispielmanifest als
tpu-multislice-jax.yaml:Wenden Sie das
tpu-multislice-jax.yaml-Manifest an:kubectl apply -f tpu-multislice-jax.yamlIn diesem Manifest:
- Das Feld
replicas: 2unterreplicatedJobsgibt an, dass JobSet zwei separate Jobs erstellt, die jeweils einem4x4x4-TPU-Slice entsprechen. - Die Annotation
alpha.jobset.sigs.k8s.io/exclusive-topology: cloud.google.com/gke-tpu-slicesorgt dafür, dass jeder Job einem eindeutigen TPU-Slice zugewiesen wird. - Mit der Annotation
cloud.google.com/gke-tpu-slice-topology: 4x4x4wird die Topologie jedes dynamischen Slice definiert. - Die Umgebungsvariable
TPU_ACCELERATOR_TYPEwird in diesem Beispiel nicht explizit festgelegt, da die Zuweisung von Segmenten von JobSet übernommen wird. Im JAX-Code werden die verfügbaren TPU-Geräte im zugewiesenen Slice automatisch erkannt.
- Das Feld
Segment löschen
Löschen Sie den Slice:
kubectl patch slice $SLICE_NAME --type json \ -p='[{"op": "remove", "path": "/metadata/finalizers"}]'Prüfen Sie, ob das Segment gelöscht wurde:
kubectl get slices
Knotenpools aktualisieren
Wenn Sie Knotenpools aktualisieren, die mit der inkrementellen Bereitstellung konfiguriert sind, müssen Sie bestimmte Surge-Parameter verwenden, um Kapazitätskonflikte zu vermeiden.
So konfigurieren und führen Sie das Knotenpool-Upgrade aus:
Wenn Sie dynamisches Super-Slicing verwenden, löschen Sie Ihre aktiven Slices, bevor Sie die manuelle Wartung ausführen:
kubectl delete slice SLICE_NAMEWenn Sie dynamisches Unterteilen verwenden, müssen Sie die aktiven Segmente nicht zuerst löschen. Sub-Slices, die während eines Upgrades aktiv bleiben, schlagen jedoch fehl und wechseln in den Status
FAILED.Aktualisieren Sie die Upgrade-Parameter für Ihren Knotenpool:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --project=PROJECT_ID \ --location=LOCATION \ --max-surge-upgrade=0 \ --max-unavailable-upgrade=16Achten Sie darauf, dass das Feld
--max-surge-upgradeauf den Wert0gesetzt ist, damit GKE während des Upgrades nicht versucht, zusätzliche TPUs zuzuweisen. Wir empfehlen, das Feld--max-unavailable-upgrade=16so festzulegen, dass ein vollständiger Unterblock mit 16 Knoten gleichzeitig aktualisiert wird.Knotenpool aktualisieren:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=NODE_POOL_NAME \ --cluster-version=CLUSTER_VERSION \ --project=PROJECT_ID \ --location=LOCATION
Hardwarewartung und ‑fehler
Wenn Sie eine vom Kunden initiierte Wartung auslösen oder ein Hardware-Failover auftritt, sind nur die Zielknoten und nicht der gesamte Knotenpool betroffen.
Bei dynamischem Super-Slicing müssen Sie Ihre aktiven dynamischen Slices löschen, bevor Sie die manuelle Wartung ausführen. Wenn Sie die dynamische Unterteilung verwenden, müssen Sie die aktiven Segmente nicht zuerst löschen. Wenn während der Aktivierung eines dynamischen Sub-Slice Wartungsarbeiten oder Hardwarefehler auftreten, geht das System so vor:
- Automatisches Anpassen der Form: GKE passt die Form des aktiven dynamischen Slice automatisch an, wenn die Wartung auf einem zugehörigen Host beginnt.
- Fehler bei benutzerdefinierter Slice-Ressource: Die benutzerdefinierte Slice-Ressource wechselt in den Status
FAILED. - Scheduler-Beobachtung: Der Scheduler beobachtet den Fehlerstatus der benutzerdefinierten Slice-Ressource.
- Reformation process (Prozess zur Wiederherstellung): Der Scheduler versucht automatisch, die Slice-Konfigurationen auf anderen verfügbaren fehlerfreien Knoten neu zu erstellen.
Slice Controller deaktivieren
Wenn Sie den Slice-Controller deaktivieren möchten, entfernen Sie ihn aus dem Cluster.
Prüfen Sie, ob die benutzerdefinierten Slice-Ressourcen leer sind:
kubectl get slice -AAktualisieren Sie den Cluster, um den Slice-Controller zu deaktivieren:
gcloud container clusters update ${CLUSTER_NAME} \ --location=${REGION} \ --no-enable-slice-controllerLöschen Sie die benutzerdefinierte Slice-Ressource :
kubectl delete crd slices.accelerator.gke.ioPrüfen Sie, ob die benutzerdefinierte Ressource „Slice“ gelöscht wurde:
kubectl get crd | grep slices.accelerator.gke.ioEntfernen Sie die Labels, die vom Slice-Controller hinzugefügt wurden. Diese Labels müssen entfernt werden:
cloud.google.com/gke-tpu-slicecloud.google.com/gke-tpu-topology
- Wenn Sie einen Knoten entfernen möchten, aktualisieren Sie den Knotennamen.
export NODE_NAME="gke-tpu-bdac9600-3bdg" kubectl label node $NODE_NAME cloud.google.com/gke-tpu-slice- cloud.google.com/gke-tpu-slice-topology-- So entfernen Sie diese Labels von jedem Knoten in Ihrem Cluster:
kubectl label nodes --all cloud.google.com/gke-tpu-slice- cloud.google.com/gke-tpu-slice-topology-- Prüfen Sie die Knotenlabels und bestätigen Sie, dass sie leer sind:
export NODE_NAME="gke-tpu-bdac9600-3bdg" kubectl describe node $NODE_NAME | grep "cloud.google.com/gke-tpu-slice"