Questo documento descrive come utilizzare lo slicing dinamico interagendo direttamente con le risorse personalizzate Slice. Puoi creare slice, monitorare gli stati delle partizioni e verificare l'integrità delle slice.
Prima di seguire queste istruzioni, assicurati di comprendere i concetti di suddivisione dinamica.
Perché utilizzare la suddivisione dinamica con uno strumento di pianificazione personalizzato?
Utilizza il tuo scheduler per gestire le risorse personalizzate di Slice se hai requisiti di pianificazione complessi o se vuoi integrare lo slicing dinamico con l'infrastruttura di pianificazione esistente.
Se preferisci utilizzare uno scheduler anziché gestire direttamente le risorse personalizzate Slice, GKE fornisce l'integrazione con Kueue e Topology Aware Scheduling (TAS). Per ulteriori informazioni, vedi Pianificare le sezioni dinamiche con Kueue e TAS.
Panoramica del flusso di lavoro
Per utilizzare la suddivisione dinamica con uno scheduler personalizzato, esegui le seguenti attività in questo documento:
- Attiva il controller delle sezioni.
- Crea node pool con provisioning incrementale.
- Crea risorse personalizzate Slice in base ai requisiti del tuo workload. Applica la risorsa personalizzata Slice al tuo cluster.
- Monitora gli stati delle partizioni e l'integrità delle sezioni.
- Elimina la sezione al termine.
Per saperne di più sui campi e sullo stato della risorsa personalizzata Slice, consulta le informazioni di riferimento sulla risorsa personalizzata Slice.
Requisiti
Per utilizzare lo slicing dinamico in GKE, devi soddisfare i seguenti requisiti:
- Utilizza un cluster Standard nel canale rapido in una delle seguenti versioni:
- Per la configurazione del super-slicing dinamico (topologie uguali o superiori
a
4x4x4), utilizza la versione 1.35.2-gke.1842000 o successive. - Per la configurazione del sottosezionamento dinamico (topologie più piccole
di
4x4x4), utilizza la versione 1.36.0-gke.3712000 o successive.
- Per la configurazione del super-slicing dinamico (topologie uguali o superiori
a
- Utilizza la versione Ironwood (TPU7x).
- Utilizza l'immagine Container-Optimized OS per i tuoi nodi.
- Per utilizzare il provisioning incrementale, utilizza le prenotazioni in modalità Tutta la capacità. La modalità Capacità è una funzionalità abilitata da TPU Cluster Director.
- Per la suddivisione dinamica, assicurati che i tuoi nodi abbiano eventi di manutenzione in attesa. Monitora le istanze per rilevare eventi di manutenzione in attesa. Se uno dei tuoi nodi ha un evento di manutenzione in attesa con un orario di fine compreso tra il 18 settembre 2026 e il 30 settembre 2026, devi attivare manualmente l'evento di manutenzione dell'host su questi nodi prima di poter utilizzare la suddivisione.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Per utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Assicurati di avere un cluster Standard esistente nella versione 1.35.2-gke.1842000 o successive nel canale rapido. Per creare un nuovo cluster, vedi Creazione di un cluster regionale.
- Assicurati di avere una quota sufficiente per Ironwood (TPU7x) nella tua regione.
- Se prevedi di eseguire carichi di lavoro multislice, installa JobSet v0.10.1 o versioni successive.
- Richiedi capacità TPU in modalità Tutta la capacità.
Attiva il controller delle sezioni
Per utilizzare la suddivisione dinamica, abilita il controller di suddivisione nel cluster.
Aggiorna il cluster:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --enable-slice-controllerSostituisci quanto segue:
CLUSTER_NAME: il nome del tuo cluster.LOCATION: la regione con la tua capacità TPU disponibile.
Recupera le credenziali per comunicare con il cluster con i comandi
kubectl:gcloud config set container/cluster CLUSTER_NAME gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONNell'output del seguente comando, verifica che sia presente il valore
slices.accelerator.gke.io:kubectl get crd slices.accelerator.gke.ioL'output è simile al seguente:
slices.accelerator.gke.io 2026-01-09T23:58:02Z
Crea node pool con provisioning incrementale
Questa sezione descrive come creare i pool di nodi TPU con provisioning incrementale. GKE converte tutta la capacità TPU in node pool di gruppi di 16 nodi di VM TPU o in sottoblocchi. GKE esegue il provisioning di questi pool di nodi anche quando non riesce a trovare tutte le 16 VM integre posizionando i nodi su parti integre della macchina host ed eseguendo il provisioning incrementale delle macchine non integre durante la riparazione.
Puoi impostare come target del pool di nodi uno dei seguenti elementi:
- Un blocco specifico di TPU, esposto nelle prenotazioni in modalità Tutta la capacità. Il targeting a blocchi consente a GKE di creare il pool di nodi in qualsiasi sottoblocco disponibile all'interno del blocco specificato.
- Un sottoblocco specifico o un gruppo specifico di 16 nodi di VM TPU, di TPU per un controllo più granulare.
Crea una policy del workload
Per creare un pool di nodi di slice TPU con Ironwood (TPU7x), devi prima creare una
policy del workload con il campo accelerator-topology-mode impostato su provision_only. Questa impostazione
attiva la procedura di provisioning incrementale.
Crea una policy del workload:
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
Sostituisci quanto segue:
WORKLOAD_POLICY_NAME: un nome per la policy del carico di lavoro.PROJECT_ID: il tuo ID progetto Google Cloud .REGION: la regione della policy del workload.
In questo comando, esegui le seguenti operazioni:
- Imposta sempre il campo
accelerator-topologysu4x4x4in modo che corrisponda al numero totale di chip all'interno di un singolo sottoblocco. - Imposta sempre il campo
accelerator-topology-modesuprovision_onlyper assicurarti che venga attivato il processo di provisioning incrementale. Quando il campoprovision_onlyè impostato, il pool di nodi esegue il provisioning dei nodi TPU senza formare collegamenti ICI o OCS.
Imposta il targeting del pool di nodi in modo che appartenga a un blocco o a un sottoblocco
Puoi scegliere come target blocchi o sottoblocchi specifici all'interno della prenotazione in modalità Tutta la capacità.
- Target di un blocco:ogni pool di nodi utilizza la capacità di un blocco specificato. GKE inserisce ilpool di nodil all'interno di un sottoblocco disponibile in quel blocco. Devi creare tanti pool di nodi quanti sono i sottoblocchi nel blocco che vuoi utilizzare.
Target di un sottoblocco:ogni pool di nodi viene mappato a un sottoblocco specifico e disponibile. Quando utilizzi il targeting a livello di sottoblocco, GKE crea il pool di nodi se almeno una VM è integra. Il provisioning incrementale contribuisce a garantire che tutti i nodi vengano posizionati all'interno del sotto-blocco specificato.
Blocca
Per recuperare il nome del blocco in una prenotazione e il conteggio dei sottoblocchi disponibili nel blocco, completa i seguenti passaggi nel documento Visualizzare la topologia e lo stato di integrità delle prenotazioni in modalità All Capacity:
Identifica il nome del blocco elencando tutti i blocchi di prenotazione e copiando il valore nel campo
name:. Questo valore è il nome del blocco o diBLOCK_NAMEin questo documento.Determina il numero di pool di nodi da creare descrivendo un blocco di prenotazione e identificando il valore nel campo
reservationSubBlockCount. Questo valore è il numero di blocchi secondari disponibili. Ad esempio, il valorereservationSubBlockCount: 4indica che il blocco ha quattro sottoblocchi disponibili e devi creare quattro pool di nodi separati.
Imposta il percorso di prenotazione:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME"Sostituisci quanto segue:
RESERVATION_NAME: il nome della prenotazione TPU.BLOCK_NAME: il nome del blocco.
Crea un pool di nodi per ogni sottoblocco identificato nel passaggio precedente. Ad esempio, se il conteggio è
4, esegui questo comando quattro volte. Utilizza un nome univoco per ogni pool di nodi.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}Sostituisci quanto segue:
NODE_POOL_NAME: il nome del nuovo pool di nodi.CLUSTER_NAME: il nome del tuo cluster GKE.WORKLOAD_POLICY_NAME: il nome della policy del workload che hai creato.ZONE: la zona del pool di nodi, ad esempious-central1-a.
Blocco secondario
Per recuperare il nome del blocco e gli ID dei sottoblocchi disponibili, completa i seguenti passaggi nel documento Visualizzare la topologia e lo stato di integrità di tutte le prenotazioni in modalità Tutte le capacità:
Per identificare il nome del blocco, elenca tutti i blocchi di prenotazione e copia il valore nel campo
name:. Questo valore è il nome del blocco o diBLOCK_NAMEin questo documento.Per identificare il nome dei sottoblocchi, elenca tutti i sottoblocchi di un blocco e copia il valore nel campo
name:per ogni voce inreservationSubBlocks. Questo valore è il nome del sottoblocco oSUBBLOCK_NAMEin questo documento.
Imposta il percorso di prenotazione:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUBBLOCK_NAME"Sostituisci quanto segue:
RESERVATION_NAME: il nome della prenotazione TPU.BLOCK_NAME: il nome del blocco.SUBBLOCK_NAME: il nome del sottoblocco.
Crea il pool di nodi:
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}Sostituisci quanto segue:
NODE_POOL_NAME: un nome univoco per il nuovo pool di nodi, ad esempiosub-block-pool-1.PROJECT_ID: il tuo ID progetto Google Cloud .CLUSTER_NAME: il nome del tuo cluster GKE.ZONE: la zona del pool di nodi, ad esempious-central2-b.WORKLOAD_POLICY_NAME: il nome della policy del carico di lavoro che hai creato.
In questa fase, i nodi vengono creati, ma i relativi link Inter-Chip Interconnect (ICI) non sono ancora attivi. Pertanto, non puoi eseguire direttamente i carichi di lavoro su questi pool di nodi.
Per abilitare tutti i collegamenti ICI necessari per formare la sezione e consentire la pianificazione dei carichi di lavoro, crea una sezione dinamica utilizzando uno dei seguenti metodi:
- Crea una risorsa personalizzata Slice. Anziché i pod, utilizzi una risorsa personalizzata Slice per definire la topologia specificata, che viene attivata dal controller slice.
- Pianifica i carichi di lavoro GKE con Kueue e TAS. Kueue gestisce automaticamente la creazione e l'eliminazione delle risorse personalizzate Slice. Evita di modificare manualmente le risorse personalizzate Slice create da Kueue.
Formare una sezione dinamica con la suddivisione o la suddivisione secondaria
Dopo aver creato i pool di nodi, puoi formare una super-slice dinamica più grande o una sotto-slice dinamica più piccola creando una risorsa personalizzata Slice. Una risorsa personalizzata Slice definisce la topologia specificata, che viene attivata dal controller delle sezioni. I tuoi workload vengono quindi pianificati ed eseguiti su questa sezione dinamica.
Partizioni dinamiche delle sezioni
Le partizioni forniscono le topologie disponibili per formare una sezione dinamica per i tuoi workload. Una partizione mostra tutte le topologie disponibili per ciascun
nodo, tra cui 2x2x1, 2x2x2, 2x2x4, 2x4x4 e 4x4x4. Le topologie
più piccole di 4x4x4 richiedono
GKE versione 1.36.0-gke.3712000 o successive.
Qualsiasi slice maggiore di 4x4x4 non ha un'etichetta di partizione, in quanto viene creato
associando più partizioni 4x4x4.
Ogni nodo TPU in un pool di nodi di provisioning incrementale deve possedere ogni etichetta del nodo di stato della partizione e dell'ID partizione specificati.
Verifica lo stato dei nodi e delle partizioni
Per ottenere i nomi dei nodi dal pool di nodi, esegui questo comando:
kubectl get nodes -l cloud.google.com/gke-nodepool=${NODE_POOL_NAME}Il risultato è simile al seguente:
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.1396002Verifica il modello di provisioning del nodo:
kubectl describe node NODE_NAME | grep "cloud.google.com/gke-accelerator-topology-mode"Il risultato è simile al seguente:
cloud.google.com/gke-accelerator-topology-mode: PROVISION_ONLYRecupera le informazioni sull'etichetta del nodo per la partizione della topologia di cui vuoi eseguire il targeting:
kubectl describe node NODE_NAME | grep -E "cloud.google.com/gke-tpu-partition-.*-id"Sostituisci
NODE_NAMEcon il nome di uno dei nodi nel pool di nodi.Il risultato è simile al seguente:
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=0bcfe937d1bb3914a8bdcd94e9f73319Verifica che il nodo includa l'annotazione
node.gke.io/created-by-mig:kubectl describe node NODE_NAME | grep "node.gke.io/created-by-mig"Sostituisci
NODE_NAMEcon il nome di uno dei nodi nel pool di nodi.Il risultato è simile al seguente:
node.gke.io/created-by-mig: projects/735972712744/zones/us-central1-ai1a/team/stringL'output include l'annotazione
node.gke.io/created-by-mig, che consente al control plane GKE di collegare i nodi Kubernetes alle risorse Compute Engine sottostanti.Recupera le informazioni sull'etichetta del nodo per lo stato della partizione della topologia che vuoi verificare:
kubectl describe node NODE_NAME | grep -E "cloud.google.com/gke-tpu-partition-.*-state"Il risultato è simile al seguente:
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=HEALTHYL'etichetta
cloud.google.com/gke-tpu-partition-[shape]-state(dove[shape]corrisponde alla topologia dell'ID partizione) indica se la partizione è disponibile per formare una sezione dinamica. Questa etichetta di stato supporta i seguenti valori:HEALTHY: la partizione è integra e completamente funzionante.DEGRADED: la partizione è danneggiata, ma può comunque essere utilizzata per la formazione di slice dinamici. Questo stato si applica solo alla topologia4x4x4di primo livello. Le topologie più piccole non hanno uno stato degradato.UNHEALTHY: la partizione non funziona correttamente e non può essere utilizzata per formare una fetta.UNSET: lo stato non è definito a causa dell'inizializzazione non riuscita del controller slice GKE.INCOMPLETE: non tutti i nodi all'interno della partizione vengono sottoposti al provisioning.
Crea una risorsa personalizzata Slice
La risorsa personalizzata Slice varia leggermente a seconda che tu stia creando una super-fetta dinamica o una sottofetta dinamica.
Definisci la risorsa personalizzata Slice:
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 neededSostituisci quanto segue:
SLICE_NAME: un nome per la tua sezione. Il nome deve soddisfare le condizionimetadata.namee deve contenere al massimo 49 caratteri.TOPOLOGY: la topologia della sezione dinamica. La topologia deve soddisfare le seguenti condizioni:- Per la suddivisione secondaria dinamica, puoi specificare topologie più piccole di
4x4x4, ad esempio2x2x1,2x2x2,2x2x4o2x4x4. Queste topologie più piccole richiedono GKE versione 1.36.0-gke.3712000 o successive. - Per la suddivisione dinamica, puoi specificare topologie
uguali o superiori a
4x4x4. Per configurare la super-suddivisione dinamica, ogni dimensione della topologia richiesta deve essere un multiplo di quattro, ad esempio4A x 4B x 4C. I tre valori nelle dimensioni della topologia,AxBxC, devono essere in ordine non decrescente (A ≤ B ≤ C). Ad esempio,4x4x8è valido, ma4x8x4non lo è. Questo ordine contribuisce a garantire una formazione coerente delle sezioni ed evita comportamenti imprevisti. Il prodotto dei tre valori nelle dimensioni della topologia,A × B × C,non deve superare 9216.
- Per la suddivisione secondaria dinamica, puoi specificare topologie più piccole di
PARTITION_ID: un elenco di stringhe che identificano le partizioni che compongono la sezione.- Per la suddivisione dinamica, devi specificare esattamente un ID partizione.
- Per la suddivisione dinamica: devi calcolare il numero di partizioni in base al numero totale di chip, dove ogni partizione è composta da 64 chip. Il numero di elementi nell'elenco
spec.partitionIdsdeve corrispondere esattamente al numero calcolato di partizioni ((A × B × C) / 64). - L'elenco
partitionIdsdeve soddisfare le seguenti condizioni:- Ogni partizione deve essere mappata a un sottoblocco di prenotazione.
- Tutti i blocchi secondari associati devono appartenere alla stessa prenotazione.
- Tutti i sottoblocchi associati devono trovarsi all'interno della stessa prenotazione.
- Tutti i nodi dei node pool associati devono essere nello stato
ready.
- Il valore del campo
typedeve esseretpu7x. - Se vuoi che il controller di slice ritenti automaticamente durante la formazione dello slice, puoi aggiungere l'annotazione
slice.gke.io/retry-on-failure: "true"alla risorsa personalizzata dello slice. Se la sezione non viene creata a causa del motivo di statoSliceCreationFailed, il controller riprova finché la sezione non viene formata correttamente.
Ad esempio, per creare una sezione
4x8x8(super-sezionamento dinamico), devi fornire quattro ID partizione univoci.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"Ad esempio, per creare una sezione
2x2x2(suddivisione dinamica), devi fornire un ID partizione univoco.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-sliceApplica la risorsa personalizzata Slice:
kubectl apply -f test-slice-example.yamlA questo punto, GKE tenta di creare lo slice. Se si verifica uno dei seguenti problemi, la creazione dello slice non riesce e il motivo dello stato nella risorsa personalizzata Slice viene aggiornato a
SliceCreationFailedoFAILED:- Se i nodi selezionati nella risorsa personalizzata non esistono, il motivo
dello stato è
SliceCreationFailed. - Se alcuni nodi della risorsa personalizzata vengono utilizzati da un'altra sezione, il
motivo dello stato è
SliceCreationFailed. - Se i nodi della risorsa personalizzata non fanno parte dello stesso
sottoblocco di prenotazione, il motivo dello stato è
FAILED. - Se i nodi non si trovano nella stessa prenotazione, il motivo dello stato è
FAILED. - Se la topologia non corrisponde al numero di partizioni, il motivo
dello stato è
SliceCreationFailed.
Per riprovare automaticamente la formazione delle sezioni quando lo stato è
SliceCreationFailed, configura l'annotazioneslice.gke.io/retry-on-failure: "true"come descritto in Crea una risorsa personalizzata Slice.Per saperne di più sullo stato della risorsa personalizzata Slice, consulta Stato di Slice.
- Se i nodi selezionati nella risorsa personalizzata non esistono, il motivo
dello stato è
Monitorare lo stato della risorsa personalizzata Slice
Per controllare lo stato della risorsa personalizzata Slice, esegui questo comando:
kubectl describe slice SLICE_NAME
Sostituisci SLICE_NAME con il nome della sezione.
L'output è simile al seguente:
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:
Il campo reason nello stato della risorsa personalizzata Slice indica lo stato del ciclo di vita corrente. Gli stati possibili variano a seconda che tu stia
utilizzando la suddivisione dinamica o la suddivisione dinamica avanzata.
Condizioni di stato per la suddivisione dinamica
SliceNotCreated: il controller esegue l'inizializzazione e i controlli delle risorse.- Se i prerequisiti non sono soddisfatti, lo stato passa a
SliceCreationFailed. - Se la convalida viene superata, lo stato passa a
ACTIVATING.
- Se i prerequisiti non sono soddisfatti, lo stato passa a
ACTIVATING: GKE sta formando la sezione.- Se l'operazione ha esito positivo, lo stato passa a
ACTIVE. - Se i blocchi secondari sono degradati, ma la sezione è utilizzabile, lo stato
passa a
ACTIVE_DEGRADED. - Se la formazione non riesce, lo stato passa a
FAILED.
- Se l'operazione ha esito positivo, lo stato passa a
DEACTIVATING: se la risorsa personalizzata Slice viene eliminata o si verifica un errore critico in uno stato attivo o non riuscito, lo slice inizia a essere smantellato.INCOMPLETE: il passaggio finale prima dell'eliminazione completa della risorsa.
Condizioni di stato per la suddivisione dinamica avanzata
SliceNotCreated: la sezione non è ancora stata creata. Il controller della sezione è in fase di inizializzazione ed esegue i controlli preflight per la formazione della sezione.SliceCreationFailed: la creazione non è riuscita perché i prerequisiti non sono stati soddisfatti (ad esempio, mancano le risorse di Compute Engine richieste) o i controlli preliminari non sono riusciti. Per riprovare automaticamente la formazione delle sezioni in questo stato, configura l'annotazioneslice.gke.io/retry-on-failure: "true".ACTIVATING: la sezione è in fase di formazione (unione).ACTIVE: la slice è completamente formata, integra e pronta per l'esecuzione dei carichi di lavoro.ACTIVE_DEGRADED: la sezione è formata ma include cubi degradati, supportati dalla resilienza ICI. I carichi di lavoro possono essere eseguiti, ma le prestazioni potrebbero essere compromesse. Il super-slicing dinamico è resiliente ai singoli guasti dell'Optical Circuit Switch (OCS). Se una singola unità OCS non funziona, tutti i collegamenti ottici che attraversano lo switch diventano non disponibili, il che fa sì che tutti i cubi all'interno del superpod funzionino in uno stato degradato.DEACTIVATING: la sezione è in fase di smantellamento.FAILED: la sezione non è più pronta per eseguire i workload. Questo stato si verifica se la formazione iniziale non è riuscita o se una sezione attiva ha subito un guasto critico del software o dell'hardware.INCOMPLETE: non sono disponibili cubi sufficienti per avviare la formazione della superslice.
Per saperne di più sullo stato della risorsa personalizzata Slice, consulta Stato di Slice.
Esegui carichi di lavoro sullo slicing dinamico
Quando la risorsa personalizzata Slice è nello stato ACTIVE, puoi eseguirvi carichi di lavoro.
La sezione seguente include esempi di carichi di lavoro che utilizzano
la suddivisione dinamica. I workload vengono inviati come job o JobSet.
Esempio 1: un singolo workload utilizza una singola sezione
L'esempio seguente mostra un workload che utilizza una singola superslice dinamica 4x4x4.
Salva il seguente manifest di esempio come
tpu-job-jax-v7x-64.yaml:In questo manifest:
cloud.google.com/gke-tpu-slice-topologyecloud.google.com/gke-tpu-topologydefiniscono la topologia della sezione dinamica.env.value: tpu7x-128è il tipo di acceleratore TPU e il numero totale di core nella slice. Il numero di core viene calcolato moltiplicando le dimensioni della topologia per il numero di core per chip. Ad esempio, per una topologia4x4x4, il calcolo è4 × 4 × 4 × 2 = 128, dove2è il numero di core per chip pertpu7x(Ironwood (TPU7x)). Pertanto, ilTPU_ACCELERATOR_TYPEètpu7x-128.
Applica il manifest
tpu-job-jax-v7x-64.yaml:kubectl apply -f tpu-job-jax-v7x-64.yaml
Esempio 2: esegui il deployment di un workload su pool di nodi multislice utilizzando JobSet
Questo esempio mostra come eseguire il deployment di un carico di lavoro su node pool multislice utilizzando JobSet.
Installa JobSet:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/JOBSET_VERSION/manifests.yamlSostituisci
JOBSET_VERSIONcon la versione richiesta di JobSet. Per la suddivisione secondaria dinamica, utilizza JobSet v0.12.0 o versioni successive. Per la suddivisione dinamica, utilizza JobSet v0.11.1 o versioni successive.Salva il seguente manifest di esempio come
tpu-multislice-jax.yaml:Applica il manifest
tpu-multislice-jax.yaml:kubectl apply -f tpu-multislice-jax.yamlIn questo manifest:
- Il campo
replicas: 2inreplicatedJobsindica che JobSet crea due job separati, ciascuno corrispondente a una fetta di TPU4x4x4. - L'annotazione
alpha.jobset.sigs.k8s.io/exclusive-topology: cloud.google.com/gke-tpu-slicecontribuisce a garantire che ogni job venga assegnato a una sezione TPU univoca. - L'annotazione
cloud.google.com/gke-tpu-slice-topology: 4x4x4definisce la topologia di ogni slice dinamica. - La variabile di ambiente
TPU_ACCELERATOR_TYPEnon è impostata in modo esplicito in questo esempio, poiché JobSet gestisce l'assegnazione delle sezioni. Il codice JAX rileva automaticamente i dispositivi TPU disponibili all'interno della sezione assegnata.
- Il campo
Elimina la sezione
Elimina la sezione:
kubectl patch slice $SLICE_NAME --type json \ -p='[{"op": "remove", "path": "/metadata/finalizers"}]'Verifica che lo slice sia stato eliminato:
kubectl get slices
Esegui l'upgrade dei node pool
Se esegui l'upgrade dei pool di nodi configurati con il provisioning incrementale, devi utilizzare parametri di sovraccarico specifici per evitare conflitti di capacità.
Per configurare ed eseguire l'upgrade del pool di nodi:
Se utilizzi la suddivisione dinamica, elimina le sezioni attive prima di eseguire la manutenzione manuale:
kubectl delete slice SLICE_NAMESe utilizzi la suddivisione secondaria dinamica, non devi prima eliminare le sezioni attive. Tuttavia, le sottosezioni che rimangono attive durante un upgrade non andranno a buon fine e passeranno allo stato
FAILED.Aggiorna i parametri di upgrade per il pool di nodi:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --project=PROJECT_ID \ --location=LOCATION \ --max-surge-upgrade=0 \ --max-unavailable-upgrade=16Assicurati che il campo
--max-surge-upgradesia impostato sul valore0per impedire a GKE di tentare di allocare TPU aggiuntive durante l'upgrade. Ti consigliamo di impostare il campo--max-unavailable-upgrade=16in modo da eseguire l'upgrade di un intero sottoblocco di 16 nodi contemporaneamente.Esegui l'upgrade del pool di nodi:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=NODE_POOL_NAME \ --cluster-version=CLUSTER_VERSION \ --project=PROJECT_ID \ --location=LOCATION
Manutenzione e guasti hardware
Se attivi la manutenzione avviata dal cliente o se si verifica un failover hardware, vengono interessati solo i nodi di destinazione anziché l'intero pool di nodi.
Per la suddivisione dinamica, devi eliminare le suddivisioni dinamiche attive prima di eseguire la manutenzione manuale. Se utilizzi la suddivisione dinamica, non devi prima eliminare le sezioni attive. Se si verificano manutenzione o guasti hardware mentre è attiva una sottosezione dinamica, il sistema gestisce il ripristino come segue:
- Rimodellamento automatico: GKE rimodella automaticamente la sezione dinamica attiva quando inizia la manutenzione su un host associato.
- Slice custom resource failure: la risorsa personalizzata Slice passa allo stato
FAILED. - Osservazione dello scheduler: lo scheduler osserva lo stato di errore della risorsa personalizzata Slice.
- Procedura di riformattazione: lo scheduler tenta automaticamente di ricreare le configurazioni delle sezioni su altri nodi integri disponibili.
Disattivare il controller della sezione
Per disattivare il controller delle sezioni, rimuovilo dal cluster.
Controlla che le risorse personalizzate di Slice siano vuote:
kubectl get slice -AAggiorna il cluster per disattivare il controller delle sezioni:
gcloud container clusters update ${CLUSTER_NAME} \ --location=${REGION} \ --no-enable-slice-controllerElimina la risorsa personalizzata Slice :
kubectl delete crd slices.accelerator.gke.ioVerifica che la risorsa personalizzata Slice sia stata eliminata:
kubectl get crd | grep slices.accelerator.gke.ioRimuovi le etichette aggiunte dal controller delle sezioni. Devi rimuovere queste etichette:
cloud.google.com/gke-tpu-slicecloud.google.com/gke-tpu-topology
- Per rimuovere un nodo specifico, aggiorna il nome del nodo.
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-- Se vuoi rimuovere queste etichette da ogni nodo del cluster:
kubectl label nodes --all cloud.google.com/gke-tpu-slice- cloud.google.com/gke-tpu-slice-topology-- Controlla le etichette dei nodi e conferma che siano vuote:
export NODE_NAME="gke-tpu-bdac9600-3bdg" kubectl describe node $NODE_NAME | grep "cloud.google.com/gke-tpu-slice"
Passaggi successivi
- Scopri di più sui concetti di suddivisione dinamica.
- Scopri di più sulla risorsa personalizzata Slice.