Questa guida è destinata a ingegneri di machine learning (ML), amministratori e operatori di piattaforme e a specialisti di dati e AI interessati a utilizzare le funzionalità di orchestrazione dei container Kubernetes per l'esecuzione di batch workload. Per maggiori informazioni sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti, consulta Ruoli e attività comuni degli utenti GKE. Google Cloud
Prezzi con avvio flessibile
L'avvio flessibile è consigliato se il tuo workload richiede risorse di cui viene eseguito il provisioning in modo dinamico in base alle necessità, per un massimo di sette giorni con prenotazioni a breve termine, senza gestione complessa delle quote e con accesso conveniente. L'inizio flessibile è basato su Dynamic Workload Scheduler e viene fatturato in base ai prezzi di Dynamic Workload Scheduler:
- Scontati (fino al 53%) per vCPU, GPU e TPU.
- Paghi in base al consumo.
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
- Se vuoi 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.
- Verifica di avere un cluster Autopilot o un cluster standard che esegue la versione 1.33.0-gke.1712000 o successive.
- Verifica di avere familiarità con le limitazioni dell'avvio flessibile.
- Quando utilizzi un cluster Standard, verifica di mantenere almeno un pool di nodi senza l'avvio flessibile abilitato per il corretto funzionamento del cluster.
- Verifica di disporre della quota per le TPU prerilasciabili nelle località dei nodi.
Crea un pool di nodi con avvio flessibile
Se utilizzi un cluster in modalità Autopilot, salta questa sezione e vai alla sezione Esegui un carico di lavoro batch.
Per creare un pool di nodi con flex-start abilitato in un cluster Standard esistente, utilizza gcloud CLI.
Crea un pool di nodi TPU single-host
Puoi creare un pool di nodi di sezioni TPU single-host con avvio flessibile:
Crea un pool di nodi con avvio flessibile:
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_ZONES \ --machine-type=MACHINE_TYPE \ --reservation-affinity=none \ --enable-autoscaling \ --flex-start \ --num-nodes 0 \ --min-nodes=0 \ --max-nodes=1Sostituisci quanto segue:
NODE_POOL_NAME: il nome che scegli per il tuo pool di nodi.CLUSTER_NAME: il nome del cluster.CONTROL_PLANE_LOCATION: la regione di computing per il control plane del cluster.NODE_ZONES: l'elenco separato da virgole di una o più zone in cui GKE crea il pool di nodi.MACHINE_TYPE: il tipo di macchina da utilizzare per i nodi. Per ulteriori informazioni sui tipi di macchina compatibili con le TPU, utilizza la tabella in Scegliere la versione di TPU.Ad esempio, il comando di creazione del pool di nodi può includere i seguenti parametri:
... --machine-type=ct6e-standard-4t \ --tpu-topology=4x4 \ --enable-autoscaling \ --num-nodes=0 \ --max-nodes=4 \Questo comando imposta il campo
--max-nodessu4perché una topologia4x4è composta da 16 chip e ogni VMct6e-standard-4tha 4 chip.Il gestore della scalabilità automatica dei cluster aumenta il numero di nodi in base a quanto richiesto dal tuo workload. Al termine del carico di lavoro, il gestore della scalabilità automatica dei cluster esegue lo scale down a zero nodi.
--reservation-affinity=none: l'avvio flessibile non utilizza né richiede prenotazioni.
Crea un pool di nodi TPU slice multi-host
I passaggi per creare un pool di nodi TPU slice multi-host variano a seconda che utilizzi Ironwood (TPU7x) o una versione precedente della TPU.Ironwood (TPU7x)
Puoi creare un node pool slice TPU multi-host nella versione Ironwood (TPU7x) utilizzando Google Cloud CLI o Terraform:
gcloud
Per creare un pool di nodi TPU slice multi-host con Ironwood (TPU7x), devi prima creare una policy del carico di lavoro.
Crea una policy del workload:
gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \ --type=HIGH_THROUGHPUT \ --accelerator-topology=TPU_TOPOLOGY \ --project=PROJECT_ID \ --region=REGIONSostituisci quanto segue:
WORKLOAD_POLICY_NAME: un nome per la policy del workload.TPU_TOPOLOGY: la topologia TPU Ironwood (TPU7x). Ad esempio,2x2x2. Per visualizzare tutte le topologie Ironwood (TPU7x) supportate, consulta la sezione relativa alla topologia.PROJECT_ID: il tuo ID progetto Google Cloud .REGION: la regione della policy del workload. Una policy del workload è una risorsa di regione e può essere riutilizzata in pool di nodi che condividono la stessa topologia.
Crea il pool di nodi con la policy del workload:
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=us-central1 \ --node-locations=us-central1-c \ --machine-type=tpu7x-standard-4t \ --reservation-affinity=none \ --enable-autoscaling \ --num-nodes=0 --min-nodes=0 --max-nodes=MAX_NODES \ --flex-start \ --placement-policy=WORKLOAD_POLICYSostituisci quanto segue:
NODE_POOL_NAME: il nome del nuovo pool di nodi.WORKLOAD_POLICY: il nome della policy del workload che hai creato.MAX_NODES: La dimensione massima del node pool. Il flag--max-nodesè obbligatorio se viene fornito--enable-autoscalinge deve essere uguale al prodotto dei valori definiti inTPU_TOPOLOGY({A}x{B}x{C}) diviso per il numero di chip in ogni VM. Ad esempio, seTPU_TOPOLOGYè2x2x2, il prodotto è 8. Poiché ogni VM intpu7x-standard-4tha 4 chip, il numero di nodi è 2.
Questo comando crea un pool di nodi denominato NODE_POOL_NAME con le seguenti caratteristiche:
--machine-type=tpu7x-standard-4tspecifica il tipo di macchina Ironwood (TPU7x).--flex-startconsente l'avvio flessibile.
Terraform
- Assicurati di utilizzare la versione 4.84.0 o successive del provider
google. Crea una policy del workload:
resource "google_compute_resource_policy" { name = "WORKLOAD_POLICY_NAME" region = CLUSTER_LOCATION workload_policy { type = "HIGH_THROUGHPUT" accelerator_topology = "TPU_TOPOLOGY" } }Sostituisci quanto segue:
WORKLOAD_POLICY_NAME: un nome per la policy del workload.CLUSTER_LOCATION: la località di computing per il cluster. Consigliamo di utilizzare un cluster regionale per una maggiore affidabilità del control plane Kubernetes. Puoi anche utilizzare un cluster zonale. Per maggiori informazioni, vedi Selezionare una versione e una topologia TPU.TPU_TOPOLOGY: la topologia TPU Ironwood (TPU7x). Ad esempio,2x2x2. Per visualizzare tutte le topologie Ironwood (TPU7x) supportate, consulta la sezione Pianificare le TPU.
Per saperne di più sul riferimento
google_compute_resource_policy, consulta Provider Terraform.Nella configurazione di Terraform, aggiungi il seguente blocco:
resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" { provider = google project = PROJECT_ID cluster = CLUSTER_NAME name = POOL_NAME location = CLUSTER_LOCATION node_locations = [NODE_ZONES] initial_node_count = NUM_NODES autoscaling { max_node_count = MAX_NODES location_policy = "ANY" } node_config { machine_type = MACHINE_TYPE reservation_affinity { consume_reservation_type = "SPECIFIC_RESERVATION" key = "compute.googleapis.com/reservation-name" values = [RESERVATION_LABEL_VALUES] } flex_start = true } placement_policy { policy_name = WORKLOAD_POLICY_NAME } }Sostituisci quanto segue:
NODE_POOL_RESOURCE_NAME: il nome della risorsa del node pool nel modello Terraform.PROJECT_ID: il tuo ID progetto.CLUSTER_NAME: il nome del cluster esistente a cui aggiungere il pool di nodi.POOL_NAME: il nome del pool di nodi da creare.NODE_ZONES: l'elenco separato da virgole di una o più zone in cui GKE crea il pool di nodi.NUM_NODES: il numero di nodi nel node pool. Deve essere zero o il prodotto del numero di chip TPU diviso per quattro, perché nelle sezioni TPU multihost ogni nodo della sezione TPU ha quattro chip. Ad esempio, seTPU_TOPOLOGYè4x8, allora ci sono 32 chip, il che significa cheNUM_NODESdeve essere 8. Per scoprire di più sulle topologie TPU, utilizza la tabella in Scegliere la versione della TPU.TPU_TOPOLOGY: indica la topologia fisica selezionata per la sezione TPU. Il formato della topologia dipende dalla versione della TPU che stai utilizzando. Per saperne di più sulle topologie TPU, utilizza la tabella in Scegliere una topologia.
Se vuoi, puoi utilizzare anche le seguenti variabili:
RESERVATION_NAME: se utilizzi una prenotazione TPU, fornisci un elenco di etichette delle risorse di prenotazione da utilizzare durante la creazione del pool di nodi. Per scoprire di più su come compilare ilRESERVATION_LABEL_VALUESnel camporeservation_affinity, consulta Provider Terraform.autoscaling: crea un pool di nodi con la scalabilità automatica abilitata. Quando GKE scala unpool di nodil di sezioni TPU multi-host, lo scala in modo atomico da zero alle dimensioni massime.MAX_NODES: la dimensione massima del node pool. Il valore deve essere uguale al prodotto dei valori definiti inTPU_TOPOLOGY({A}x{B}x{C}) diviso per il numero di chip in ogni VM. Ad esempio, seTPU_TOPOLOGYè2x2x2, il prodotto è 8. Poiché ogni VM intpu7x-standard-4tha 4 chip, il numero di nodi è 2.
spot: il pool di nodi che utilizzerà le VM spot per i nodi dello slice TPU. Questa impostazione non può essere modificata dopo la creazione del pool di nodi. Per saperne di più, consulta VM spot.flex_start: il pool di nodi che utilizzerà l'opzione di consumo avvio flessibile. Questa impostazione non può essere impostata sutruesespotè attivato.
Altre versioni di TPU
Puoi creare un pool di nodi slice TPU multihost nelle versioni v3, v4, v5p, v5e e Trillium (v6e) utilizzando Google Cloud CLI, Terraform o la console Google Cloud .
gcloud
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--node-locations=NODE_ZONES \
--machine-type=MACHINE_TYPE \
--tpu-topology=TPU_TOPOLOGY \
--reservation-affinity=none \
--enable-autoscaling \
--num-nodes=0 --min-nodes=0 --max-nodes=MAX_NODES \
--flex-start
Sostituisci quanto segue:
NODE_POOL_NAME: il nome del nuovo pool di nodi.CLUSTER_NAME: il nome del cluster.CONTROL_PLANE_LOCATION: il nome della zona in base alla versione della TPU che vuoi utilizzare. Per identificare una località disponibile, consulta Disponibilità di TPU in GKE.NODE_ZONES: l'elenco separato da virgole di una o più zone in cui GKE crea il pool di nodi.MACHINE_TYPE: il tipo di macchina da utilizzare per i nodi. Per ulteriori informazioni sui tipi di macchina compatibili con le TPU, utilizza la tabella in Scegliere la versione di TPU.TPU_TOPOLOGY: la topologia TPU. Ad esempio,2x2x2. Per visualizzare tutte le topologie TPU supportate, consulta la sezione Topologia.MAX_NODES: la dimensione massima del node pool. Il flag--max-nodesè obbligatorio se viene fornito--enable-autoscalinge deve essere uguale al prodotto dei valori definiti inTPU_TOPOLOGY({A}x{B}x{C}) diviso per il numero di chip in ogni VM.Questo comando crea un pool di nodi denominato NODE_POOL_NAME con l'avvio flessibile abilitato.
Terraform
- Assicurati di utilizzare la versione 4.84.0 o successive del provider
google. Aggiungi il seguente blocco alla configurazione Terraform:
resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" { provider = google project = PROJECT_ID cluster = CLUSTER_NAME name = POOL_NAME location = CLUSTER_LOCATION node_locations = [NODE_ZONES] initial_node_count = NUM_NODES autoscaling { max_node_count = MAX_NODES location_policy = "ANY" } node_config { machine_type = MACHINE_TYPE reservation_affinity { consume_reservation_type = "SPECIFIC_RESERVATION" key = "compute.googleapis.com/reservation-name" values = [RESERVATION_LABEL_VALUES] } flex_start = true } placement_policy { type = "COMPACT" tpu_topology = TPU_TOPOLOGY } }Sostituisci quanto segue:
NODE_POOL_RESOURCE_NAME: il nome della risorsa del node pool nel modello Terraform.PROJECT_ID: il tuo ID progetto.CLUSTER_NAME: il nome del cluster esistente a cui aggiungere il pool di nodi.POOL_NAME: il nome del pool di nodi da creare.CLUSTER_LOCATION: la località di computing del cluster. Consigliamo di utilizzare un cluster regionale per una maggiore affidabilità del control plane Kubernetes. Puoi anche utilizzare un cluster zonale. Per scoprire di più, consulta la sezione Selezionare una versione e una topologia TPU.NODE_ZONES: l'elenco separato da virgole di una o più zone in cui GKE crea il pool di nodi.NUM_NODES: il numero di nodi nel node pool. Deve essere zero o il prodotto del numero di chip TPU diviso per quattro, perché nelle sezioni TPU multihost ogni nodo della sezione TPU ha 4 chip. Ad esempio, seTPU_TOPOLOGYè4x8, allora ci sono 32 chip, il che significa cheNUM_NODESdeve essere 8. Per scoprire di più sulle topologie TPU, utilizza la tabella in Scegliere la versione della TPU.TPU_TOPOLOGY: indica la topologia fisica della sezione TPU. Il formato della topologia dipende dalla versione della TPU che stai utilizzando. Per saperne di più sulle topologie TPU, utilizza la tabella in Scegliere una topologia.
Se vuoi, puoi utilizzare anche le seguenti variabili:
RESERVATION_NAME: se utilizzi la prenotazione TPU, questo è l'elenco delle etichette delle risorse di prenotazione da utilizzare durante la creazione del pool di nodi. Per scoprire di più su come compilare ilRESERVATION_LABEL_VALUESnel camporeservation_affinity, consulta Provider Terraform.autoscaling: crea un pool di nodi con la scalabilità automatica abilitata. Quando GKE scala unpool di nodil di sezioni TPU multi-host, lo scala in modo atomico da zero alle dimensioni massime.MAX_NODES: è la dimensione massima del node pool. Deve essere uguale al prodotto dei valori definiti inTPU_TOPOLOGY({A}x{B}x{C}) diviso per il numero di chip in ogni VM.
spot: consente al pool di nodi di utilizzare le VM spot per i nodi della sezione TPU. Questo valore non può essere modificato dopo la creazione del pool di nodi. Per saperne di più, consulta VM spot.flex_start: imposta il pool di nodi in modo che utilizzi l'opzione di consumo avvio flessibile. Non può essere impostato sutruesespotè abilitato.
Console
Per creare un pool di nodi con TPU:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
Fai clic su add_box Aggiungi pool di nodi.
Nella sezione Dettagli del pool di nodi, seleziona la casella Specifica le località dei nodi.
Seleziona il nome della zona in base alla versione della TPU che vuoi utilizzare. Per identificare una località disponibile, consulta Disponibilità di TPU in GKE.
Nel riquadro di navigazione, fai clic su Nodi.
Nella sezione Configurazione macchina, seleziona TPU.
Nel menu a discesa Serie, seleziona una delle seguenti opzioni:
- CT3: TPU v3, dispositivo host singolo
- CT3P: TPU v3, sezione di pod multi-host
- CT4P: TPU v4
- CT5LP: TPU v5e
- CT5P: TPU v5p
- CT6E: TPU Trillium (v6e)
Nel menu a discesa Tipo di macchina, seleziona il nome della macchina da utilizzare per i nodi. Utilizza la tabella Scegli la versione della TPU per scoprire come definire il tipo di macchina e la topologia TPU che creano un pool di nodi della sezione TPU multi-host.
Nel menu a discesa Topologia TPU, seleziona la topologia fisica per la sezione TPU.
Nella finestra di dialogo Modifiche necessarie, fai clic su Apporta modifiche.
Assicurati che Tipo di disco di avvio sia Disco permanente standard o Disco permanente SSD.
(Facoltativo) Seleziona la casella di controllo Abilita nodi sulle VM Spot per utilizzare le VM spot per i nodi nel pool di nodi.
Fai clic su Crea.
Verifica lo stato dell'avvio flessibile nel pool di nodi
Esegui questo comando:
gcloud container node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location CONTROL_PLANE_LOCATION \
--format="get(config.flexStart)"
Se l'avvio flessibile è abilitato nel pool di nodi, il campo flexStart è impostato su True.
Esegui un carico di lavoro batch
In questa sezione crei un job che pianifica un nodo TPU con VM Flex-start. Un controller Job in Kubernetes crea uno o più pod e garantisce che eseguano correttamente un'attività specifica.Nella Google Cloud console, avvia una sessione di Cloud Shell facendo clic su
Attiva Cloud Shell. Si apre una sessione nel riquadro inferiore della console Google Cloud .
Crea un file denominato
dws-flex-start.yaml:Host singolo
Utilizza il seguente manifest per il file
dws-flex-start.yaml:apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY containers: - name: container-1 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["3600s"] # Sleep for 1 hour resources: requests: google.com/tpu: NUM_CHIPS limits: google.com/tpu: NUM_CHIPS restartPolicy: OnFailureMulti-host
Utilizza il seguente manifest per il file
dws-flex-start.yaml:apiVersion: v1 kind: Service metadata: name: headless-svc spec: clusterIP: None selector: job-name: job-1 --- apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: backoffLimit: 0 completions: 2 parallelism: 2 completionMode: Indexed template: spec: subdomain: headless-svc restartPolicy: Never nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY containers: - name: tpu-job image: us-docker.pkg.dev/cloud-tpu-images/jax-ai-image/tpu:latest ports: - containerPort: 8471 # Default port using which TPU VMs communicate - containerPort: 8431 # Port to export TPU runtime metrics, if supported. securityContext: privileged: true command: - bash - -c - | python -c 'import jax; print("TPU cores:", jax.device_count())' resources: requests: google.com/tpu: NUM_CHIPS limits: google.com/tpu: NUM_CHIPSSostituisci quanto segue:
ACCELERATOR_TYPE: il tipo di acceleratore TPU che hai utilizzato durante la creazione dei node pool. Ad esempio,tpu-v4-podsliceotpu-v5-lite-podslice.TPU_TOPOLOGY: la topologia fisica per lo slice TPU. Ad esempio, il valore potrebbe essere4x4x4o2x2, a seconda della versione della TPU.NUM_CHIPS: il numero di chip TPU in ogni VM è uno, quattro o otto. Per saperne di più, consulta la sezione Versioni TPU.
Applica il manifest
dws-flex-start.yaml:kubectl apply -f dws-flex-start.yamlVerifica che i job siano in esecuzione sullo stesso nodo:
kubectl get podsL'output è simile al seguente:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES job-1 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none>
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimina la singola risorsa
Elimina i job:
kubectl delete job -l "job-name in (job-1,job-2)"Elimina il pool di nodi:
gcloud container node-pools delete NODE_POOL_NAME \ --location CONTROL_PLANE_LOCATIONElimina il cluster:
gcloud container clusters delete CLUSTER_NAME
Passaggi successivi
- Scopri di più sulle TPU in GKE.
- Scopri di più sul provisioning automatico dei nodi.
- Scopri di più sulle best practice per l'esecuzione di workload batch su GKE.