Risolvi i problemi delle TPU in GKE


Questa pagina mostra come risolvere i problemi relativi alle TPU in Google Kubernetes Engine (GKE).

Se hai bisogno di ulteriore assistenza, contatta Assistenza clienti Google Cloud.

Quota insufficiente per soddisfare la richiesta di TPU

Un errore simile a Insufficient quota to satisfy the request indica che La quota disponibile per il progetto Google Cloud non è sufficiente per soddisfare le richiesta.

Per risolvere il problema, controlla il limite di quota del progetto e l'utilizzo attuale. Se se necessario, richiedi un aumento della quota di TPU.

Controlla il limite quota e l'utilizzo attuale

Per verificare il limite e l'utilizzo attuale della tua quota dell'API Compute Engine per le TPU, segui questi passaggi:

  1. Vai alla pagina Quote nella console Google Cloud:

    Vai a Quote

  2. Nella casella Filtro di , esegui le seguenti:

    1. Seleziona la proprietà Servizio, inserisci API Compute Engine e premi Invio.

    2. Seleziona la proprietà Tipo e scegli Quota.

    3. Seleziona la proprietà Dimensioni (ad es.località) e inserisci region:. seguito dal nome della regione in cui prevedi di creare le TPU con GKE. Ad esempio, inserisci region:us-west4 se prevedi di crea nodi della sezione TPU nella zona us-west4-a. La quota TPU è a livello di regione, di altre zone all'interno della stessa regione consumano la stessa quota di TPU.

Se nessuna quota corrisponde al filtro inserito, il progetto non è stato a una delle quote specificate per la regione desiderata e devi richiedere un aumento della quota di TPU.

Errore durante l'abilitazione del provisioning automatico dei nodi in un pool di nodi della sezione TPU

Il seguente errore si verifica quando abiliti il provisioning automatico dei nodi in una Cluster GKE che non supporta le TPU.

Il messaggio di errore è simile al seguente:

ERROR: (gcloud.container.clusters.create) ResponseError: code=400,
  message=Invalid resource: tpu-v4-podslice.

Per risolvere il problema, esegui l'upgrade del cluster GKE alla versione 1.27.6 o successiva.

GKE non esegue automaticamente il provisioning dei nodi sezione TPU

Le seguenti sezioni descrivono i casi in cui GKE non eseguire automaticamente il provisioning dei nodi della sezione TPU e come correggerli.

Limita configurazione errata

GKE non esegue automaticamente il provisioning dei nodi sezione TPU se I limiti di provisioning automatico che hai definito per un cluster sono troppo bassi. Puoi osservare i seguenti errori in questi scenari:

  • Se esiste un pool di nodi della sezione TPU, ma GKE non può fare lo scale up dei nodi a causa a violare i limiti delle risorse, quando esegui il comando kubectl get events, puoi visualizzare il seguente messaggio di errore:

    11s Normal NotTriggerScaleUp pod/tpu-workload-65b69f6c95-ccxwz pod didn't
    trigger scale-up: 1 node(s) didn't match Pod's node affinity/selector, 1 max
    cluster cpu, memory limit reached
    

    Inoltre, in questo caso potresti vedere messaggi di avviso simili ai seguenti: nella console Google Cloud:

    "Your cluster has one or more unschedulable Pods"
    
  • Quando GKE tenta di eseguire il provisioning automatico di un pool di nodi della sezione TPU che supera i limiti delle risorse, i log di visibilità del gestore della scalabilità automatica dei cluster il seguente messaggio di errore:

    messageId: "no.scale.up.nap.pod.zonal.resources.exceeded"
    

    Inoltre, in questo caso potresti vedere messaggi di avviso simili ai seguenti: nella console Google Cloud:

    "Can't scale up because node auto-provisioning can't provision a node pool for
    the Pod if it would exceed resource limits"
    

Per risolvere questi problemi, aumenta il numero massimo di chip TPU, core CPU e memoria nel cluster.

Per completare questi passaggi:

  1. Calcola i requisiti delle risorse per un determinato tipo di macchina TPU e effettua il conteggio. Tieni presente che devi aggiungere risorse per i pool di nodi delle sezioni non TPU, come i pool di carichi di lavoro con scale out impegnativi.
  2. Ottenere una descrizione delle TPU, della CPU e della memoria disponibili per un tipo di macchina e zona. Utilizza gcloud CLI:

    gcloud compute machine-types describe MACHINE_TYPE \
        --zone COMPUTE_ZONE
    

    Sostituisci quanto segue:

    • MACHINE_TYPE: il tipo di macchina in cui eseguire la ricerca.
    • COMPUTE_ZONE: il nome del zona di computing.

    L'output include una riga descrittiva simile alla seguente:

      description: 240 vCPUs, 407 GB RAM, 4 Google TPUs
      ```
    
  3. Calcola il numero totale di CPU e memoria moltiplicando questi valori per il numero di nodi richiesto. Ad esempio, il tipo di macchina ct4p-hightpu-4t utilizza 240 core CPU e 407 GB di RAM con 4 chip TPU. Supponendo che tu abbia bisogno 20 chip TPU, che corrispondono a cinque nodi, devi definire quanto segue valori:

    • --max-accelerator=type=tpu-v4-podslice,count=20.
    • CPU = 1200 (240 volte 5)
    • memory = 2035 (407 volte 5)

    Devi definire i limiti con un certo margine per ospitare i nodi delle sezioni non TPU come i carichi di lavoro di sistema.

  4. Aggiorna i limiti del cluster:

    gcloud container clusters update CLUSTER_NAME \
        --max-accelerator type=TPU_ACCELERATOR \
        count=MAXIMUM_ACCELERATOR \
        --max-cpu=MAXIMUM_CPU \
        --max-memory=MAXIMUM_MEMORY
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster.
    • TPU_ACCELERATOR: il nome dell'acceleratore TPU.
    • MAXIMUM_ACCELERATOR: il numero massimo di chip TPU nel cluster.
    • MAXIMUM_CPU: il numero massimo di core nell' in un cluster Kubernetes.
    • MAXIMUM_MEMORY: il numero massimo di gigabyte di nel cluster.

Non tutte le istanze in esecuzione

ERROR: nodes cannot be created due to lack of capacity. The missing nodes
will be created asynchronously once capacity is available. You can either
wait for the nodes to be up, or delete the node pool and try re-creating it
again later.

Questo errore può essere visualizzato quando l'operazione GKE è scaduta o la richiesta non può essere completati e in coda per il provisioning dei pool di nodi TPU a host singolo o multi-host. Per ridurre i problemi di capacità, puoi utilizzare le prenotazioni o prendere in considerazione le VM spot.

Configurazione errata del carico di lavoro

Questo errore si verifica a causa di un'errata configurazione del carico di lavoro. Di seguito sono riportate le alcune delle cause più comuni dell'errore:

  • Le cloud.google.com/gke-tpu-accelerator e cloud.google.com/gke-tpu-topology etichette sono errate o mancanti nel pod del modello. GKE non eseguirà il provisioning dei pool di nodi della sezione TPU e del nodo il provisioning automatico non sarà in grado di fare lo scale up del cluster.
  • La specifica del pod non specifica google.com/tpu nei requisiti delle risorse.

Per risolvere il problema, procedi in uno dei seguenti modi:

  1. Verifica che non siano presenti etichette non supportate nel selettore dei nodi dei carichi di lavoro. Ad esempio, un selettore di nodi per l'etichetta cloud.google.com/gke-nodepool impedire a GKE di creare pool di nodi aggiuntivi per i tuoi pod.
  2. Assicurati che le specifiche del modello di pod, dove viene eseguito il carico di lavoro TPU, includano i seguenti valori:
    • cloud.google.com/gke-tpu-accelerator e cloud.google.com/gke-tpu-topology etichette nel relativo nodeSelector.
    • google.com/tpu nella richiesta.

Per scoprire come eseguire il deployment di carichi di lavoro TPU in GKE, consulta Esegui un carico di lavoro che visualizza il numero di chip TPU disponibili in un pool di nodi della sezione TPU.

Pianificazione degli errori durante il deployment di pod che utilizzano TPU in GKE

Il seguente problema si verifica quando GKE non può pianificare i pod richiedendo TPU sui nodi delle sezioni TPU. Ad esempio, questo potrebbe verificarsi se alcune sezioni non TPU sono già stati pianificati sui nodi TPU.

Il messaggio di errore, emesso come evento FailedScheduling nel pod, è simile al seguente:

Cannot schedule pods: Preemption is not helpful for scheduling.

Error message: 0/2 nodes are available: 2 node(s) had untolerated taint
{google.com/tpu: present}. preemption: 0/2 nodes are available: 2 Preemption is
not helpful for scheduling

Per risolvere il problema:

Verifica di avere almeno un pool di nodi CPU nel cluster, in modo che il sistema sia critico I pod possono essere eseguiti nei nodi non TPU. Per saperne di più, vedi Esegui il deployment di un pod in un pool di nodi specifico.

Risoluzione dei problemi comuni relativi ai JobSet in GKE

Per conoscere i problemi comuni relativi a JobSet e i suggerimenti per la risoluzione dei problemi, consulta la pagina relativa alla risoluzione dei problemi di JobSet. Questa pagina riguarda problemi comuni, ad esempio "Webhook non disponibile" l'errore, il job figlio o i pod non creati, e il ripristino del problema di carichi di lavoro prerilasciati utilizzando JobSet e Kueue.

Inizializzazione della TPU non riuscita

Il seguente problema si verifica quando GKE non può eseguire il provisioning di nuovi carichi di lavoro TPU a causa della mancanza di autorizzazioni per accedere ai dispositivi TPU.

Il messaggio di errore è simile al seguente:

TPU platform initialization failed: FAILED_PRECONDITION: Couldn't mmap: Resource
temporarily unavailable.; Unable to create Node RegisterInterface for node 0,
config: device_path: "/dev/accel0" mode: KERNEL debug_data_directory: ""
dump_anomalies_only: true crash_in_debug_dump: false allow_core_dump: true;
could not create driver instance

Per risolvere questo problema, assicurati di eseguire il container TPU in con privilegi oppure aumenti il valore di ulimit all'interno del contenitore.

Programmazione deadlock

La pianificazione di due o più job potrebbe non riuscire in un deadlock. Ad esempio, nello scenario in cui si verifica quanto segue:

  • Esistono due job (Job A e Job B) con regole di affinità pod. GKE pianifica le sezioni TPU per entrambi i job con una topologia TPU di v4-32.
  • Nel cluster sono presenti due sezioni TPU v4-32.
  • Il cluster ha un'ampia capacità per pianificare sia i job che, in teoria, ogni job può essere pianificato rapidamente su ogni sezione TPU.
  • Lo scheduler Kubernetes pianifica un pod dal job A su una sezione pianifica un pod dal job B nella stessa sezione.

In questo caso, date le regole di affinità dei pod per il job A, lo scheduler tenta di pianificare tutti i pod rimanenti per il job A e il job B, su una singola sezione TPU ciascuno. Di conseguenza, GKE non sarà in grado di pianificare completamente il job A Lavoro B. Di conseguenza, lo stato di entrambi i job rimarrà In attesa.

Per risolvere il problema, utilizza Anti-affinità dei pod con cloud.google.com/gke-nodepool come topologyKey, come mostrato nell'esempio seguente:

apiVersion: batch/v1
kind: Job
metadata:
 name: pi
spec:
 parallelism: 2
 template:
   metadata:
     labels:
       job: pi
   spec:
     affinity:
       podAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
         - labelSelector:
             matchExpressions:
             - key: job
               operator: In
               values:
               - pi
           topologyKey: cloud.google.com/gke-nodepool
       podAntiAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
         - labelSelector:
             matchExpressions:
             - key: job
               operator: NotIn
               values:
               - pi
           topologyKey: cloud.google.com/gke-nodepool
           namespaceSelector:
             matchExpressions:
             - key: kubernetes.io/metadata.name
               operator: NotIn
               values:
               - kube-system
     containers:
     - name: pi
       image: perl:5.34.0
       command: ["sleep",  "60"]
     restartPolicy: Never
 backoffLimit: 4

Autorizzazione negata durante la creazione del cluster in us-central2

Se stai tentando di creare un cluster in us-central2 (l'unica regione dove è disponibile TPU v4), potresti ricevere un messaggio di errore simile a le seguenti:

ERROR: (gcloud.container.clusters.create) ResponseError: code=403,
message=Permission denied on 'locations/us-central2' (or it may not exist).

Questo errore è perché la regione us-central2 è una regione privata.

Per risolvere il problema, invia una richiesta di assistenza o contatta il tuo di rendere visibile us-central2 all'interno del tuo progetto Google Cloud.

Quota insufficiente durante la creazione del pool di nodi TPU in us-central2

Se stai tentando di creare un pool di nodi della sezione TPU in us-central2 (l'unico regione in cui è disponibile TPU v4), potrebbe essere necessario aumentare il Quote relative a GKE alla creazione iniziale di pool di nodi TPU v4:

  • Quota di SSD (GB) su Persistent Disk in us-central2: il disco di avvio di ogni Il nodo Kubernetes richiede 100 GB per impostazione predefinita. Pertanto, questa quota deve essere impostata almeno quanto il prodotto del numero massimo di GKE nodi che prevedi di creare in us-central2 e 100 GB (maximum_nodes X 100 GB).
  • Quota di indirizzi IP in uso in us-central2: ogni nodo Kubernetes utilizza a un indirizzo IP. Pertanto, questa quota deve essere impostata almeno su un valore pari a quello di nodi GKE che prevedi di creare us-central2.

Subnet mancante durante la creazione del cluster GKE

Se stai tentando di creare un cluster in us-central2 (l'unica regione dove è disponibile TPU v4), potresti ricevere un messaggio di errore simile a le seguenti:

ERROR: (gcloud.container.clusters.create) ResponseError: code=404,
message=Not found: project <PROJECT> does not have an auto-mode subnetwork
for network "default" in region <REGION>.

Per fornire la connettività è necessaria una subnet nella tua rete VPC ai nodi GKE. Tuttavia, in alcune regioni come us-central2, è possibile che non venga creata una subnet predefinita, anche quando utilizzi rete VPC predefinita in modalità automatica (per la creazione di subnet).

Per risolvere il problema, assicurati di aver creato un modello personalizzato nella regione durante la creazione del cluster GKE. Questa subnet non deve sovrapporsi ad altre subnet creati in altre regioni nella stessa rete VPC.

Passaggi successivi

Se hai bisogno di ulteriore assistenza, contatta Assistenza clienti Google Cloud.