In diesem Dokument wird erläutert, wie Sie TPU-Knotenpools bereitstellen und dynamische Slices in Google Kubernetes Engine (GKE) mithilfe von Kueue und Topology-Aware Scheduling (TAS) planen.
Sie können das dynamische Slicing auch verwenden, indem Sie direkt mit benutzerdefinierten Slice-Ressourcen interagieren. Weitere Informationen finden Sie unter Dynamisches Slicing mit einem benutzerdefinierten Planer verwenden.
Bevor Sie diese Anleitung befolgen, sollten Sie sich mit den Konzepten des dynamischen Slicings vertraut machen.
Voraussetzungen
Für die Verwendung von dynamischem Slicing in GKE müssen die folgenden Anforderungen erfüllt sein:
- Verwenden Sie einen Standardcluster im Rapid Channel in einer der folgenden Versionen:
- Verwenden Sie für die dynamische Super-Slicing-Konfiguration (Topologien gleich oder größer als
4x4x4) die Version 1.35.2-gke.1842000 oder höher. - Verwenden Sie für die dynamische Sub-Slicing-Konfiguration (Topologien kleiner als
4x4x4) die Version 1.36.0-gke.3712000 oder höher.
- Verwenden Sie für die dynamische Super-Slicing-Konfiguration (Topologien gleich oder größer als
- 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 „Gesamte Kapazität“ verwenden. Der Modus „Alle Kapazitäten“ ist eine Funktion, die von TPU Cluster Director aktiviert wird.
- Für dynamisches Sub-Slicing müssen Ihre Knoten ausstehende Wartungsereignisse haben. Instanzen auf ausstehende Wartungsereignisse überwachen Wenn für einen Ihrer Knoten ein ausstehendes Wartungsereignis mit einer Endzeit zwischen dem 18. September 2026 und dem 30. September 2026 geplant ist, müssen Sie das Hostwartungsereignis auf diesen Knoten manuell auslösen, bevor Sie Sub-Slicing 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. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
- Sie benötigen einen Standardcluster mit 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 in Ihrer Region ein ausreichendes Kontingent für Ironwood (TPU7x) haben.
- Wenn Sie Multislice-Arbeitslasten ausführen möchten, installieren Sie JobSet v0.10.1 oder höher.
- TPU-Kapazität im Modus „Alle Kapazitäten“ anfordern
Dynamisches Slicing in GKE mit Kueue verwenden
In diesem Abschnitt wird der Workflow für die Verwendung von dynamischem Slicing in GKE beschrieben.
- Topologie und Systemstatus von Reservierungen im Modus „Gesamte Kapazität“ ansehen
- Aktivieren Sie den Slice-Controller in Ihrem Cluster.
- Installieren Sie Kueue, JobSet und LWS.
- TPU-Knotenpools erstellen
- Kueue so konfigurieren, dass eine benutzerdefinierte Slice-Ressource erstellt wird
- Arbeitslasten mit dynamischem Slicing mit Kueue ausführen
- Führen Sie eine Bereinigung durch.
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 die 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
Kueue, JobSet und LWS installieren
Wenn Sie Kueue, JobSet und LWS bereits installiert haben, können Sie diesen Abschnitt überspringen.
Kueue installieren
Folgen Sie der Anleitung in der Kueue-Dokumentation oder führen Sie den folgenden Befehl aus:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/KUEUE_VERSION/manifests.yaml
Ersetzen Sie KUEUE_VERSION durch die erforderliche Kueue-Version gemäß Ihren Topologieanforderungen. Verwenden Sie für dynamisches Sub-Slicing Kueue v0.18.2 oder höher. Verwenden Sie für dynamisches Super-Slicing Kueue v0.16.6 oder höher.
JobSet installieren
Folgen Sie der Anleitung in der JobSet-Dokumentation oder führen Sie den folgenden Befehl aus:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/JOBSET_VERSION/manifests.yaml
Ersetzen Sie JOBSET_VERSION durch die erforderliche JobSet-Version, die Ihren Topologieanforderungen entspricht. Verwenden Sie für dynamisches Sub-Slicing JobSet v0.12.0 oder höher. Verwenden Sie für dynamisches Super-Slicing JobSet v0.11.1 oder höher.
LWS installieren
LeaderWorkerSet (LWS) ist nur für dynamisches Sub-Slicing erforderlich.
Folgen Sie der Anleitung in der LWS-Dokumentation oder führen Sie den folgenden Befehl aus:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/lws/releases/download/LWS_VERSION/manifests.yaml
Ersetzen Sie LWS_VERSION durch die erforderliche LWS-Version. Verwenden Sie LWS v0.8.0 oder höher.
Knotenpools mit inkrementeller Bereitstellung erstellen
In diesem Abschnitt wird beschrieben, wie Sie die TPU-Knotenpools mit inkrementeller Bereitstellung erstellen. Die GKE wandelt Ihre gesamte TPU-Kapazität in Knotenpools um, die aus 16-Knoten-Gruppen von Ironwood-VMs (TPU7x) oder Unterblöcken bestehen. GKE stellt diese Knotenpools auch dann bereit, wenn nicht alle fehlerfreien VMs gefunden werden können. Dazu werden Knoten auf fehlerfreien Teilen der Hostmaschine platziert und fehlerhafte Maschinen schrittweise bereitgestellt, während sie repariert werden.
Sie können Ihren Knotenpool so ausrichten, dass er zu einer der folgenden Optionen gehört:
- Ein bestimmter Block von TPUs, der in Reservierungen im Modus „Gesamte Kapazität“ verfügbar gemacht wird. Mit der Blockausrichtung kann GKE den Knotenpool in einem beliebigen verfügbaren Unterblock innerhalb des angegebenen Blocks erstellen.
- Einen bestimmten Unterblock oder eine bestimmte Gruppe von 16 Ironwood-VMs (TPU7x) 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 Folgendes aus:
- Setzen Sie das Feld
accelerator-topologyimmer auf4x4x4, um die Gesamtzahl der Chips in einem einzelnen Unterblock zu erreichen. - Setzen Sie das Feld
accelerator-topology-modeimmer aufprovision_only, damit der inkrementelle Bereitstellungsprozess ausgelöst wird. Wenn das Feldprovision_onlyfestgelegt ist, stellt der Knotenpool TPU-Knoten bereit, ohne ICI- oder OCS-Links zu bilden.
Knotenpool einem Block oder Unterblock zuweisen
Sie können bestimmte Unterblöcke oder Blöcke innerhalb Ihrer Reservierung im Modus „Gesamte Kapazität“ als Ziel festlegen.
- 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 abzielen: Jeder Knotenpool wird einem bestimmten und verfügbaren Unterblock zugeordnet. Wenn Sie das Targeting auf Unterblöcke verwenden, erstellt GKE den Knotenpool, wenn mindestens eine VM fehlerfrei ist. Die inkrementelle Bereitstellung trägt dazu bei, dass alle Knoten im angegebenen Subblock platziert werden.
Blockieren
Führen Sie die folgenden Schritte im Dokument Topologie und Systemzustand von Reservierungen im All Capacity Mode ansehen aus, um den Namen des Blocks in einer Reservierung und die Anzahl der verfügbaren Unterblöcke im Block abzurufen:
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.Bestimmen Sie, wie viele Knotenpools erstellt werden sollen, indem Sie einen Reservierungsblock beschreiben und den Wert im Feld
reservationSubBlockCountermitteln. Dieser Wert ist die Anzahl der verfügbaren Unterblöcke. Der WertreservationSubBlockCount: 4gibt beispielsweise an, dass der Block vier Unterblöcke hat und Sie vier separate Knotenpools erstellen müssen.
Legen Sie den Reservierungspfad fest:
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 identifizierten 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 Arbeitslastrichtlinie.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 aller Reservierungen im All-Capacity-Modus ansehen aus, um den Namen des Blocks und die IDs der verfügbaren Unterblöcke abzurufen:
Wenn Sie den Namen des Blocks ermitteln möchten, listen Sie alle Reservierungsblöcke auf und kopieren Sie den Wert im Feld
name:. Dieser Wert ist der Name des Blocks oderBLOCK_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.
Legen Sie den Reservierungspfad fest:
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.
Erstellen Sie den Knotenpool:
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 den 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, aber ihre ICI-Links (Inter-Chip Interconnect) sind noch nicht aktiv. Daher können Sie Arbeitslasten nicht direkt in diesen Knotenpools ausführen.
Wenn Sie alle erforderlichen ICI-Links aktivieren möchten, um den Slice zu bilden und das Planen von Arbeitslasten zu ermöglichen, 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. Vermeiden Sie es, von Kueue erstellte benutzerdefinierte Slice-Ressourcen manuell zu ändern.
Dynamischen Slice mit Kueue und TAS erstellen
In diesem Abschnitt planen Sie GKE-Arbeitslasten mit Kueue und TAS.
Kueue-Slice-Controller installieren
Speichern Sie das folgende Manifest als
slice-controller.yaml, um den Kueue-Slice-Controller zu installieren:Wenden Sie das
slice-controller.yaml-Manifest an:kubectl apply -f slice-controller.yamlSpeichern Sie das folgende Manifest als
dynamic-slice-topology.yaml, um Kueue für dynamisches Slicing zu konfigurieren:Wenden Sie das
dynamic-slice-topology.yaml-Manifest an:kubectl apply -f dynamic-slice-topology.yamlIn diesem Manifest konfigurieren Sie Kueue für das dynamische Slicing, indem Sie die folgenden Ressourcen definieren:
- Ironwood (TPU7x) dynamische Slice-Topologie (
superslice-topology): Die Topologie definiert die Ebenen, die Kueue bei der Planung von Arbeitslasten mit dynamischem Slicing berücksichtigt. Diese Ebenen sind:cloud.google.com/gce-topology-block-Label: Dieses Level ist erforderlich, um zu verstehen, welche Unterblöcke zu welchen Blöcken gehören, da nur Unterblöcke aus demselben Block einen Slice bilden können.cloud.google.com/gke-tpu-partition-4x4x4-id-Label: Diese Ebene stellt einzelne Ironwood-Unterblöcke (TPU7x) dar (4x4x4-Topologie).kubernetes.io/hostname-Label: Diese Ebene ist erforderlich, um Pods bestimmten VMs zuzuweisen und ihre Labels und Markierungen zu beobachten.
- Ironwood (TPU7x) SuperSlice ResourceFlavor (
superslice-rf): Die Ressourcenvariante für Ironwood (TPU7x)-Unterblöcke enthält das Labelcloud.google.com/gke-tpu-accelerator: tpu7x, um Knoten mit Ironwood (TPU7x)-Maschinen abzugleichen. - SuperSlice AdmissionCheck (
superslice-ac): Diese Zulassungsprüfung weist Kueue an, eine Arbeitslast erst dann zu planen, wenn der GKE-Slice-Controller bestätigt, dass der Slice aktiv ist. Die Zulassungsprüfung wird zuerst definiert und dann demClusterQueuehinzugefügt, der Arbeitslasten für dynamisches Slicing verarbeitet. - ClusterQueue (
cq) und LocalQueue (lq): Diese Felder verwaltengoogle.com/tpu-Ressourcen. Die ClusterQueuecqenthält die Zulassungsprüfungsuperslice-ac. Das FeldnominalQuotafürgoogle.com/tpukann auf zwei Arten konfiguriert werden:- Spezifisches Kontingent: Legen Sie das Feld
nominalQuotaso fest, dass es der vorhandenen Kapazität für die faire Freigabe und die Kontingentverwaltung entspricht. - Unbegrenztes Kontingent: Setzen Sie das Feld
nominalQuotaauf einen sehr hohen Wert wie"999999", um ein unbegrenztes Kontingent zu modellieren. Damit der Fokus auf TAS und dynamischem Slicing liegt, wird bei dieser Konfiguration die Kontingentverwaltungsfunktion von Kueue umgangen.
- Spezifisches Kontingent: Legen Sie das Feld
- Ironwood (TPU7x) dynamische Slice-Topologie (
Auswahl des Partitionszustands definieren
Zusätzlich zum Standardzustand und zur Standardbereitschaft von Knoten stellt GKE den spezifischen Zustand jeder Partitionsform über das Label cloud.google.com/gke-tpu-partition-[shape]-state bereit (wobei [shape] der Partitions-ID-Form entspricht, z. B. 2x2x1, 2x2x2, 2x2x4, 2x4x4 oder 4x4x4). Mit diesem Label kann GKE Faktoren berücksichtigen, die die Slice-Bildung beeinflussen, z. B. den Zustand von TPU-Links. Für die dynamische Sub-Slicing-Konfiguration (Topologien kleiner als 4x4x4) ist die GKE-Version 1.36.0-gke.3712000 oder höher erforderlich.
Sie können den Wert des Labels für den Partitionsstatus so definieren:
HEALTHY: Die Partition ist fehlerfrei und voll funktionsfähig.DEGRADED: Die Infrastruktur der Partition ist in einem beeinträchtigten Zustand, z. B. aufgrund einer Beeinträchtigung der OCS-Verbindung. Die Partition kann weiterhin ein Slice bilden, aber die Gesamtleistung ist möglicherweise geringer als bei fehlerfreien Partitionen. Dieser Status gilt nur für die4x4x4-Topologie der obersten Ebene. Kleinere Topologien haben keinen beeinträchtigten Zustand.UNHEALTHY: Die Partition ist fehlerhaft und kann kein Slice bilden.UNSET: Der Status ist aufgrund einer fehlgeschlagenen Initialisierung des GKE-Slice-Controllers nicht definiert.INCOMPLETE: Nicht alle Knoten innerhalb der Partition sind bereitgestellt.
Der Webhook des Kueue-Slice-Controllers prüft, ob eine Arbeitslast eine bestimmte Anforderung an den Zustand der Partition enthält. Wenn keine Präferenz angegeben ist, fügt der Webhook eine Standardknotenaffinität ein.
Das Verhalten ist wie folgt:
- Wenn ein
nodeSelectorodernodeAffinityvorhanden ist, das auf das Labelcloud.google.com/gke-tpu-partition-[shape]-stateabzielt, bleibt es unverändert. Wenn keine solche Labelkonfiguration vorhanden ist, fügt der Webhook die folgende Standardknotenaffinität ein, um sicherzustellen, dass nur verfügbare Partitionen verwendet werden:
nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-tpu-partition-4x4x4-state operator: In values: - "HEALTHY" - "DEGRADED"
Im folgenden Abschnitt finden Sie Beispiele, in denen das Label cloud.google.com/gke-tpu-partition-4x4x4-state so konfiguriert ist, dass die verschiedenen Integritätskonfigurationen für Unterblöcke angegeben werden.
Testarbeitslasten für dynamisches Slicing mit Kueue ausführen
In diesem Abschnitt wird beschrieben, wie Sie Arbeitslasten mit Kueue und TAS auf dynamischem Slicing bereitstellen. Es enthält Beispiele, die zeigen, wie Sie eine Arbeitslast mit dynamischem Slice und eine Arbeitslast mit mehreren Slices erstellen. Die Arbeitslasten werden als JobSets gesendet.
Beispiel 1: Einzelne Arbeitslast verwendet ein einzelnes dynamisches Slice
Im folgenden Beispiel wird beschrieben, wie Sie eine Arbeitslast mit einem Slice mit einer 4x12x16-Topologie erstellen, die aus 12 Unterblöcken besteht. Die Anzahl der Pods wurde so berechnet: (4 * 12 * 16) / 4 Chips pro Knoten = 192 Pods.
Speichern Sie das folgende Manifest als
big-super-slice.yaml:In diesem Manifest teilen die folgenden Annotationen Kueue die Slice-Eigenschaften und die Topologie mit, um Folgendes zu konfigurieren:
cloud.google.com/gke-tpu-slice-topology: Gibt"4x12x16"als Topologie für das dynamische Slice an. Für die Beschleunigertopologietpu7xgelten die folgenden Regeln:- Für dynamisches Sub-Slicing: Sie können 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. Bei der dynamischen Super-Slicing-Konfiguration muss jede Dimension der angeforderten Topologie ein Vielfaches von vier sein, z. B.4A x 4B x 4C. - Die Topologie muss ein dreidimensionaler String im Format
AxBxCsein, z. B.4x8x8. - Die Dimensionen müssen in nicht absteigender Reihenfolge sortiert sein: A <= B <= C. Beispiel:
4x8x4ist ungültig und sollte4x4x8sein. - Das Produkt der Dimensionen (ABC) darf 9.216 nicht überschreiten.
- Die größten unterstützten Slice-Topologien können bis zu 32 Unterblöcke enthalten. Beispielsweise liegen
8x16x16mit 32 Unterblöcken,8x12x20mit 30 Unterblöcken oder12x12x12mit 27 Unterblöcken innerhalb der zulässigen Limits.
- Für dynamisches Sub-Slicing: Sie können Topologien angeben, die kleiner als
cloud.google.com/gke-tpu-accelerator: tpu7x: Plant Pods auf VMs, auf denen Ironwood (TPU7x) ausgeführt wird.kueue.x-k8s.io/queue-name: weist das JobSet einer lokalen Kueue-Warteschlange zu.- Der Webhook fügt die Standardknotenaffinität ein, um sicherzustellen, dass
HEALTHY- undDEGRADED-Knoten verwendet werden.
Wenden Sie das
big-super-slice.yaml-Manifest an:kubectl apply -f big-super-slice.yamlNachdem Sie das Manifest angewendet haben, erstellt Kueue eine
JobSetmit dem Namenbig-super-slice. Kueue versucht dann, einen einzelnen dynamischen Slice mit einer4x12x16-Topologie zu erstellen. Nachdem der Slice aktiv ist, lässt Kueue die Arbeitslast zu und die 192 Pods werden auf den Knoten geplant, um den dynamischen Slice zu bilden, auf dem Ihre Arbeitslasten ausgeführt werden.
Beispiel 2: Arbeitslast mit mehr als einem Replikat
Im folgenden Beispiel wird gezeigt, wie Sie eine Arbeitslast erstellen, die zwei dynamische Slices verwendet, die jeweils aus vier Unterblöcken bestehen, die nur auf HEALTHY-Knoten abzielen.
Speichern Sie das folgende Manifest als
two-super-slices.yaml:Wenden Sie das
two-super-slices.yaml-Manifest an:kubectl apply -f two-super-slices.yaml
In diesem Manifest legen Sie im Abschnitt replicatedJobs das Feld replicas auf 2 fest.
Nachdem Sie das Manifest angewendet haben, versucht Kueue, zwei separate Slices mit einer 4x8x8-Topologie zu bilden. Kueue erstellt für jedes in jobset.spec.replicatedJobs[].replicas definierte Replikat ein dynamisches Slice.
Wenn n Replikate angegeben sind, erstellt Kueue n dynamische Slices für die Arbeitslast und wartet, bis alle Slices aktiv sind, bevor die Arbeitslast zugelassen wird.
Arbeitslastplanung mit Slice-Wiederverwendung optimieren
Standardmäßig weist Kueue den Slice-Controller an, für jede Arbeitslastausführung ein neues TPU-Slice bereitzustellen und es nach Abschluss der Arbeitslast zu löschen. Dieses Verhalten kann zu Abwanderung und Mehraufwand für die zugrunde liegende Infrastruktur führen.
Mit der Slice-Wiederverwendung können neue Arbeitslasten vorhandene, inaktive TPU-Slices mit identischer Topologie und identischen Hardwarelimits wiederverwenden. Wenn Sie die Slice-Wiederverwendung aktivieren, markiert Kueue das Slice am Ende eines Jobs als inaktiv, anstatt es zu löschen. Ein neuer Job, der dieselbe Partition anfordert, beansprucht und verwendet den Slice sofort wieder. Dadurch wird die Verzögerung bei der Hardwarebereitstellung umgangen.
Slice-Wiederverwendung aktivieren
Wenn Sie die Slice-Wiederverwendung vollständig optimieren möchten, müssen Sie sowohl den Slice-Controller als auch Kueue so konfigurieren, dass sie zusammenarbeiten.
Slice-Controller konfigurieren: Aktualisieren Sie die Bereitstellungsargumente des Kueue-Slice-Controllers, um das Flag
--reuse-slices=trueeinzufügen. Damit Arbeitslasten optimal auf vorhandenen Slices geplant werden, fügen Sie auch das Flag--add-preferred-node-affinity=truehinzu.Kueue konfigurieren (empfohlen): Damit Kueue die bevorzugten Vorschläge für die Knotenaffinität des Controllers verwenden kann, müssen Sie das Feature Gate
TASRespectNodeAffinityPreferredin Ihrer Kueue-Konfiguration aktivieren.Bearbeiten Sie beispielsweise die ConfigMap
kueue-manager-config, um das Feature Gate hinzuzufügen:apiVersion: v1 kind: ConfigMap metadata: name: kueue-manager-config namespace: kueue-system data: controller_manager_config.yaml: | apiVersion: config.kueue.x-k8s.io/v1beta1 kind: Configuration featureGates: TASRespectNodeAffinityPreferred: true # ...Starten Sie nach dem Ändern der ConfigMap das Deployment
kueue-controller-managerneu, um die Änderung zu erzwingen:kubectl rollout restart deploy kueue-controller-manager -n kueue-system
Löschen von Slices pro Arbeitslast erzwingen
Führen Sie die folgenden Schritte aus, um eine bestimmte Arbeitslast dazu zu bringen, ihre Slices zu bereinigen und die Wiederverwendung von Slices zu verhindern:
Wenden Sie das folgende Label auf Ihre Job- oder JobSet-Definition an:
kueue.gke.io/tpu-enforce-slice-deletion: "true"Nachdem Sie dieses Label angewendet haben, kann die Arbeitslast weiterhin auf einem vorhandenen inaktiven Slice geplant werden. Nach Abschluss der Arbeitslast wird der Slice jedoch endgültig gelöscht und nicht an den wiederverwendbaren Pool zurückgegeben.
Konfigurieren Sie Kueue so, dass dieses Label vom Framework-Job an das Kueue-Arbeitslastobjekt weitergegeben wird. Fügen Sie dazu das Label der Liste
labelKeysToCopyin Ihrer Kueue-Konfiguration hinzu:labelKeysToCopy: - "kueue.gke.io/tpu-enforce-slice-deletion"
Slice überwachen
Sie können den Status des Slice einsehen und die Slice-Messwerte mit GKE-Systemmesswerten überwachen.
Status des Slice überwachen
Wenn ein Slice erstellt oder aktiv von einer Arbeitslast verwendet wird, fügt der Slice-Controller Labels hinzu, um die Arbeitslast zu identifizieren, die ihn verwendet. Da Slice-Namen dynamisch generiert werden (und vom Namen der Arbeitslast entkoppelt sind, wenn die Wiederverwendung aktiviert ist), sollten Sie diese Labels verwenden, um das Slice zu finden, das Ihrer Arbeitslast zugewiesen ist.
Führen Sie den folgenden Befehl aus, um die Slices zu finden, die einer Arbeitslast zugewiesen sind:
kubectl get slice -l kueue.gke.io/tpu-slice-used-by-namespace=NAMESPACE,kueue.gke.io/tpu-slice-used-by-workload=WORKLOAD_NAMEErsetzen Sie Folgendes:
NAMESPACE: Namespace Ihrer Arbeitslast.WORKLOAD_NAME: der Name der Kueue-Arbeitslast, der in der Regel mit dem Namen Ihres Jobs oder JobSets übereinstimmt.
Kopieren Sie den Slice-Namen aus der Ausgabe des vorherigen Befehls.
Verwenden Sie den Slice-Namen, um den detaillierten Status Ihres dynamischen Slice zu prüfen:
kubectl describe slice SLICE_NAMEErsetzen Sie
SLICE_NAMEdurch den Namen Ihres Slices.
Die Ausgabe sieht etwa so aus:
Name: s-4x4x4-74d3fb0b
Namespace:
Labels: <none>
Annotations: <none>
API Version: accelerator.gke.io/v1beta1
Kind: Slice
Metadata:
Creation Timestamp: 2026-02-12T23:44:28Z
Finalizers:
accelerator.gke.io/slice-finalizer
Generation: 1
Resource Version: 1770939905695871008
UID: 6dbbfe14-4486-4462-864d-e078d0ca8b5b
Spec:
Partition Ids:
5eae6a4f59d59cf30a9bf49de618eb2b
Topology: 4x4x4
Type: tpu7x
Status:
Conditions:
Last Transition Time: 2026-02-12T23:45:05Z
Message:
Reason: ACTIVE
Status: True
Type: Ready
Last Transition Time: 2026-02-12T23:45:05Z
Message: NodeLabelingCompleted
Reason: NodeLabelIsAdded
Status: True
Type: NodeLabeled
Events: <none>
Messwerte des Slice überwachen
Sie können die folgenden GKE-Systemmesswerte überwachen, die den Zustand eines Slice anzeigen:
kubernetes.io/accelerator/slice/statekubernetes.io/accelerator/partition/statekubernetes.io/accelerator/slice/deformation_durationskubernetes.io/accelerator/slice/formation_durations
Weitere Informationen zu den Messwerten finden Sie unter GKE-Systemmesswerte.
Kueue-Slice-Controller-Messwerte
Sie können auch die folgenden Prometheus-Messwerte überwachen, die vom Kueue Slice Controller bereitgestellt werden, um den Lebenszyklus, die Wiederverwendung und die Zulassungsprüfungen von Slices zu beobachten:
Messwerte zum Lebenszyklus von Slices
Messwerte zum Slice-Lebenszyklus erfassen das Erstellen und Löschen von Slices:
tpu_ac_slice_create_time: Histogramm, das zeigt, wie lange die Erstellung des Slices gedauert hat.tpu_ac_slices_created: Zähler, der erstellte Slices erfasst (enthält einis_reusable-Label).tpu_ac_slices_status: Gauge, die die aktuelle Anzahl der Slices nach Status erfasst, einschließlich der Labelsis_reusableundin_use.tpu_ac_slice_delete_time: Histogramm, das zeigt, wie lange das Löschen von Slices gedauert hat.tpu_ac_slices_deleted: Zähler, der gelöschte Slices erfasst.tpu_ac_slices_gc: Durch das Zähler-Tracking wurden Slices automatisch bereinigt.
Messwerte zur Wiederverwendung von Slices
Messwerte zur Slice-Wiederverwendung erfassen die erfolgreiche Wiederverwendung und Konflikte von TPU-Slices:
tpu_ac_slices_reused: Zähler, der erfolgreich wiederverwendete Slices erfasst.tpu_ac_slices_conflict: Zähler, der die Slices erfasst, die aufgrund von Topologie- oder Formabweichungen gelöscht wurden.
Arbeitslast- und Zulassungsmesswerte
Arbeitslast- und Zulassungsmesswerte erfassen die Dauer und die Ergebnisse von Zulassungsprüfungen:
tpu_ac_admission_time: Histogramm, das die Dauer des Zulassungsprüfungsprozesses misst. Hinweis: Hier wird die Dauer der Zulassungsprüfung des Slice-Controllers gemessen. Die Gesamtzulassungszeit für Kueue-Arbeitslasten ist nicht enthalten.tpu_ac_workload_processed: Zähler für Entscheidungen zur Zulassungsprüfung, der eintarget_state-Label enthält.
Allgemeine Messwerte
Allgemeine Messwerte erfassen operative Probleme und Fehler:
tpu_ac_problem: Ein Zähler, der Betriebsprobleme oder Fehler erfasst. Dieser Messwert enthält das Labelproblem, das den spezifischen Fehlertyp angibt.
Bereinigen
Löschen Sie Ihre Slices, bevor Sie Knotenpools löschen, um unerwartete Kosten zu vermeiden.
Löschen Sie das JobSet. Diese Aktion löst Kueue aus, um die zugehörigen benutzerdefinierten Slice-Ressourcen zu löschen.
kubectl delete jobset JOBSET_NAMEErsetzen Sie
JOBSET_NAMEdurch den Namen Ihres JobSets, z. B.big-super-slice.Löschen Sie den TPU-Knotenpool:
gcloud container node-pools delete NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION
(Optional) Dynamisches Slicing mit Ihrem eigenen Planer verwenden
In diesem Dokument geht es um die Verwendung von Kueue und TAS. Sie können das dynamische Slicing aber auch mit einem eigenen benutzerdefinierten Planer verwalten. Wenn Sie einen anderen Planer verwenden möchten, folgen Sie den Referenzinformationen zur benutzerdefinierten Slice-Ressource.
Nächste Schritte
- Weitere Informationen zu TPU Cluster Director
- Wartungsereignisse mit TPUs im Modus „Gesamte Kapazität“ verwalten
- Cloud TPU-Arbeitslasten mit dynamischem Slicing im Cluster Toolkit bereitstellen