Questa pagina mostra come richiedere ed eseguire il deployment l'addestramento di modelli basati su intelligenza (AI) e machine learning (ML), ottimizzazione e inferenza dei carichi di lavoro tramite Cloud TPU acceleratori (TPU) nei cluster Google Kubernetes Engine (GKE) Standard.
Prima di configurare ed eseguire il deployment di carichi di lavoro TPU in GKE, Prendi familiarità con i seguenti concetti:
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Attiva l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
install e poi
inizializzare
con gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente
eseguendo
gcloud components update
.
Disponibilità di TPU in GKE
Utilizza GKE per creare e gestire i pool di nodi con TPU. Puoi utilizzare la modalità acceleratori appositamente progettati per eseguire l'addestramento di modelli AI su larga scala, ottimizzazione e inferenza.
Consulta un elenco delle versioni di TPU supportate in GKE.
Pianifica la configurazione di TPU
Pianifica la configurazione della TPU in base al tuo modello di machine learning e a quanto memoria necessaria. Di seguito sono riportate le i passaggi pertinenti per la pianificazione della configurazione di TPU:
Assicurati di avere una quota sufficiente per le VM on demand o spot
Se stai creando un pool di nodi della sezione TPU con VM on demand o spot, devi: disporre di una quota TPU sufficiente nella regione che vuoi utilizzare.La creazione di un pool di nodi della sezione TPU che utilizza una prenotazione TPU non una quota di TPU.1 Puoi saltare tranquillamente questa sezione per le TPU prenotate.
Creazione di un pool di nodi della sezione TPU on demand o spot in GKE richiede una quota per l'API Compute Engine. Quota dell'API Compute Engine (compute.googleapis.com) non corrisponde alla quota dell'API Cloud TPU (tpu.googleapis.com), necessaria durante la creazione di TPU con l'API Cloud TPU.
Per verificare il limite e l'utilizzo attuale della tua quota dell'API Compute Engine per le TPU, segui questi passaggi:
Vai alla pagina Quote nella console Google Cloud:
Nella casella Filtro di
, esegui le seguenti:Seleziona la proprietà Servizio, inserisci API Compute Engine e premi Invio.
Seleziona la proprietà Tipo e scegli Quota.
Seleziona la proprietà Nome e inserisci il nome della quota in base alla Versione TPU e tipo di macchina. Ad esempio, se prevedi di creare modelli I nodi TPU v5e il cui tipo di macchina inizia con
ct5lp-
, inserisciTPU v5 Lite PodSlice chips
.Versione TPU Il tipo di macchina inizia con Nome della quota per le istanze on demand Nome della quota per le istanze Spot2 TPU v4 ct4p-
TPU v4 PodSlice chips
Preemptible TPU v4 PodSlice chips
TPU v5e ct5l-
TPU v5 Lite Device chips
Preemptible TPU v5 Lite Device chips
TPU v5e ct5lp-
TPU v5 Lite PodSlice chips
Preemptible TPU v5 Lite PodSlice chips
TPU v5p ct5p-
TPU v5p chips
Preemptible TPU v5p chips
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, inserisciregion:us-west4
se prevedi di crea nodi della sezione TPU nella zonaus-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.
-
Quando crei un pool di nodi della sezione TPU, utilizza il metodo
--reservation
e--reservation-affinity=specific
flag a per creare istanza dedicata. Le prenotazioni TPU sono disponibili l'acquisto di un impegno. ↩ -
Quando crei un pool di nodi della sezione TPU, utilizza il metodo
--spot
per creare un'istanza Spot. ↩
Assicurati la disponibilità della prenotazione
La creazione di un pool di nodi della sezione TPU riservato, che utilizza una prenotazione, non richiedono una quota di TPU. Tuttavia, la prenotazione deve disporre di un numero sufficiente di chip TPU inutilizzati quando viene creato il pool di nodi.
Per vedere quali prenotazioni esistono all'interno di un progetto, visualizza un elenco prenotazioni.
Per visualizzare quanti chip TPU sono disponibili in una prenotazione TPU, visualizza il i dettagli di una prenotazione.
Crea un cluster
Crea un cluster GKE in modalità Standard in una regione con TPU disponibili. I nostri suggerimenti di utilizzare cluster a livello di regione, che offrono un'alta disponibilità dal piano di controllo Kubernetes. Puoi utilizzare Google Cloud CLI o nella console Google Cloud.
gcloud container clusters create CLUSTER_NAME \
--location LOCATION \
--cluster-version VERSION
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del nuovo cluster.LOCATION
: la regione con la capacità TPU disponibile.VERSION
: la versione GKE, che deve supportare il tipo di macchina che vuoi utilizzare. Tieni presente che la versione GKE predefinita potrebbe non avere disponibilità per la TPU di destinazione. Per sapere quali sono le versioni GKE minime disponibili per tipo di macchina TPU, consulta la disponibilità delle TPU in GKE
Crea un pool di nodi
Sezione TPU con host singolo
Puoi creare un pool di nodi della sezione TPU con host singolo utilizzando Google Cloud CLI, Terraform o la console Google Cloud.
gcloud
gcloud container node-pools create POOL_NAME \
--location=LOCATION \
--cluster=CLUSTER_NAME \
--node-locations=NODE_ZONES \
--machine-type=MACHINE_TYPE \
[--num-nodes=NUM_NODES \]
[--spot \]
[--enable-autoscaling \]
[--reservation-affinity=specific \
--reservation=RESERVATION_NAME \]
[--total-min-nodes TOTAL_MIN_NODES \]
[--total-max-nodes TOTAL_MAX_NODES \]
[--location-policy=ANY]
Sostituisci quanto segue:
POOL_NAME
: il nome del nuovo pool di nodi.LOCATION
: il nome della zona basato su la versione di TPU che vuoi utilizzare:- Per TPU v4, usa
us-central2-b
. - Per i tipi di macchine TPU v5e che iniziano con
ct5l-
, usaus-central1-a
oeurope-west4-b
. - Per i tipi di macchine TPU v5e che iniziano con
ct5lp-
, usaus-west1-c
,us-west4-a
,us-west4-b
,us-central1-a
,us-east1-c
,us-east5-b
oeurope-west4-a
. - Per TPU v5p, usa
us-east1-d
,us-east5-a
ous-east5-c
.
Per scoprire di più, consulta Disponibilità delle TPU in GKE.
- Per TPU v4, usa
CLUSTER_NAME
: il nome del cluster.NODE_ZONE
: 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 nodi. Per ulteriori informazioni sui tipi di macchine compatibili con TPU, utilizza il in Mappatura della configurazione di TPU.
Facoltativamente, puoi anche utilizzare i seguenti flag:
NUM_NODES
: il numero iniziale di nodi nel nodo pooling in ogni zona. Se ometti questo flag, il valore predefinito è3
. Se la scalabilità automatica sia abilitata per il pool di nodi utilizzando l'--enable-autoscaling
flag, ti consigliamo di impostareNUM_NODES
su0
, poiché il gestore della scalabilità automatica esegue il provisioning di nodi aggiuntivi non appena i carichi di lavoro li richiede.RESERVATION_NAME
: il nome del che GKE utilizza durante la creazione del pool di nodi. Se ometti questo flag, GKE utilizza le TPU disponibili. Per saperne di più sulle prenotazioni TPU, consulta la sezione Prenotazione TPU.--enable-autoscaling
: crea un pool di nodi con scalabilità automatica abilitata.TOTAL_MIN_NODES
: numero minimo di tutti di nodi nel pool di nodi. Ometti questo campo a meno che la scalabilità automatica viene specificato.TOTAL_MAX_NODES
: numero massimo di tutti di nodi nel pool di nodi. Ometti questo campo a meno che la scalabilità automatica viene specificato.
--spot
: imposta il pool di nodi in modo che utilizzi le VM spot per i nodi nel pool di nodi. Questo valore non può essere modificato dopo la creazione del pool di nodi.
Terraform
- Assicurati di utilizzare la versione 4.84.0 o successiva del
google
o il provider di servizi di terze parti. - Aggiungi il blocco seguente alla tua 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 {
total_min_node_count = TOTAL_MIN_NODES
total_max_node_count = TOTAL_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]
}
spot = true
}
}
Sostituisci quanto segue:
NODE_POOL_RESOURCE_NAME
: il nome del pool di nodi risorsa nel modello Terraform.PROJECT_ID
: l'ID progetto.CLUSTER_NAME
: il nome del cluster esistente.POOL_NAME
: il nome del pool di nodi da creare.CLUSTER_LOCATION
: le zona di computing in un cluster Kubernetes. Specifica la regione in cui è disponibile la versione di TPU. Per ulteriori informazioni consulta Selezionare una versione e una topologia di 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 iniziale di nodi nel nodo in ognuna delle zone del pool di nodi. Se omesso, il valore predefinito è3
. Se la scalabilità automatica sia abilitata per il pool di nodi utilizzando il modello di scalabilità automatica. ti consigliamo di impostareNUM_NODES
su0
, poiché GKE esegue il provisioning di nodi sezione TPU aggiuntivi da un carico di lavoro.MACHINE_TYPE
: il tipo di macchina TPU da utilizzare. A vedere i tipi di macchine compatibili con TPU, usa la tabella Mappatura della configurazione di TPU.
Facoltativamente, puoi anche utilizzare le seguenti variabili:
autoscaling
: crea un pool di nodi con scalabilità automatica abilitata. Per sezione TPU con host singolo, GKE scala tra Valori diTOTAL_MIN_NODES
eTOTAL_MAX_NODES
.TOTAL_MIN_NODES
: numero minimo di tutti i nodi nel pool di nodi. Questo campo è facoltativo, a meno che non sia impostata anche la scalabilità automatica specificato.TOTAL_MAX_NODES
: numero massimo di tutti i nodi nel pool di nodi. Questo campo è facoltativo, a meno che non sia impostata anche la scalabilità automatica specificato.
RESERVATION_NAME
: se utilizzi Prenotazione TPU, questo è l'elenco delle etichette delle risorse di prenotazione da utilizzare quando la creazione del pool di nodi. Per scoprire di più su come compilare ilRESERVATION_LABEL_VALUES
in Camporeservation_affinity
, vedi Fornitore Terraform.spot
: imposta il pool di nodi in modo che utilizzi le VM spot per la TPU nodi. Questo valore non può essere modificato dopo la creazione del pool di nodi. Per ulteriori informazioni le informazioni, vedi VM spot.
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 la zona in base alla versione della TPU che vuoi utilizzare:
- Per TPU v4, usa
us-central2-b
. - Per i tipi di macchine TPU v5e che iniziano con
ct5l-
, usaus-central1-a
oeurope-west4-b
. - Per i tipi di macchine TPU v5e che iniziano con
ct5lp-
, usaus-west1-c
,us-west4-a
,us-west4-b
,us-central1-a
,us-east1-c
,us-east5-b
oeurope-west4-a
. - Per TPU v5p, usa
us-east1-d
,us-east5-a
ous-east5-c
.
- Per TPU v4, usa
Nel riquadro di navigazione, fai clic su Nodi.
Nella sezione Configurazione macchina, seleziona TPU.
Nel menu a discesa Serie, seleziona una delle seguenti opzioni:
- CT4P: TPU v4
- CT5LP: TPU v5e
- CT5P: TPU v5p
Nel menu a discesa Tipo di macchina, seleziona il nome della macchina da utilizzare per nodi. Utilizza la Tabella Mappatura della configurazione di TPU per scoprire come definire il tipo di macchina e la topologia TPU che creano un pool di nodi della sezione TPU a host singolo.
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 il Tipo di disco di avvio sia Disco permanente standard o Disco permanente SSD.
(Facoltativo) Seleziona la casella di controllo Abilita i nodi sulle VM Spot per utilizzare Spot VM per i nodi nel pool di nodi.
Fai clic su Crea.
Sezione TPU multi-host
Puoi creare un Nodo sezione TPU multi-host utilizzando Google Cloud CLI, Terraform la console Google Cloud.
gcloud
gcloud container node-pools create POOL_NAME \
--location=LOCATION \
--cluster=CLUSTER_NAME \
--node-locations=NODE_ZONE \
--machine-type=MACHINE_TYPE \
--tpu-topology=TPU_TOPOLOGY \
--num-nodes=NUM_NODES \
[--spot \]
[--enable-autoscaling \
--max-nodes MAX_NODES]
[--reservation-affinity=specific \
--reservation=RESERVATION_NAME]
Sostituisci quanto segue:
POOL_NAME
: il nome del nuovo pool di nodi.LOCATION
: il nome della zona basato su la versione di TPU che vuoi utilizzare:- Per TPU v4, usa
us-central2-b
. - I tipi di macchine TPU v5e che iniziano con
ct5l-
non sono mai multi-host. - Per i tipi di macchine TPU v5e che iniziano con
ct5lp-
, usaus-west1-c
,us-west4-a
,us-west4-b
,us-central1-a
,us-east1-c
,us-east5-b
oeurope-west4-a
. - Per i tipi di macchine TPU v5p che iniziano con
ct5p-
, usaus-east1-d
,us-east5-a
ous-east5-c
.
Per scoprire di più, consulta Disponibilità delle TPU in GKE.
- Per TPU v4, usa
CLUSTER_NAME
: il nome del cluster.NODE_ZONE
: 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 nodi. Per saperne di più sui tipi di macchine disponibili, consulta Mappatura della configurazione di TPU.TPU_TOPOLOGY
: la posizione fisica per la sezione TPU. Il formato della topologia dipende dalla TPU dell'oggetto come segue:- TPU v4 o v5p: definisci la topologia in 3 tuple (
{A}x{B}x{C}
), ad esempio4x4x4
. - TPU v5e: definisci la topologia in due tuple (
{A}x{B}
), ad esempio2x2
.
Per scoprire di più, consulta Topologia.
- TPU v4 o v5p: definisci la topologia in 3 tuple (
NUM_NODES
: il numero di nodi nel pool di nodi. Deve essere zero o il prodotto dei valori definiti inTPU_TOPOLOGY
({A}x{B}x{C}
) diviso per il numero di chip in ogni VM. Per TPU v4 multi-host e TPU v5e, il numero di chip in ogni la VM è quattro. Pertanto, se il valoreTPU_TOPOLOGY
è2x4x4
(TPU v4 con quattro chip in ogni VM), quindiNUM_NODES
è 32/4, che equivale a 8.
Facoltativamente, puoi anche utilizzare i seguenti flag:
RESERVATION_NAME
: il nome del che GKE utilizza durante la creazione del pool di nodi. Se ometti questo flag, GKE utilizza i pool di nodi delle sezioni TPU disponibili. Per saperne di più sulle prenotazioni TPU, consulta la sezione Prenotazione TPU.--spot
: imposta il pool di nodi per l'utilizzo delle VM spot dei nodi della sezione TPU. Questo valore non può essere modificato dopo la creazione del pool di nodi. Per ulteriori informazioni le informazioni, vedi VM spot.--enable-autoscaling
: crea un pool di nodi con scalabilità automatica abilitata. Quando GKE scala un pool di nodi di sezioni TPU multi-host, fa lo scale up atomicamente del pool di nodi da zero alla dimensione massima.MAX_NODES
: la dimensione massima del nodo piscina. Il flag--max-nodes
è obbligatorio se viene fornito--enable-autoscaling
e deve essere uguale al prodotto dei valori definiti inTPU_TOPOLOGY
({A}x{B}x{C}
) diviso per il numero di chip in ogni VM.
Terraform
- Assicurati di utilizzare la versione 4.84.0 o successiva del
google
o il provider di servizi di terze parti. Aggiungi il blocco seguente alla tua 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] } spot = true } placement_policy { type = "COMPACT" tpu_topology = TPU_TOPOLOGY } }
Sostituisci quanto segue:
NODE_POOL_RESOURCE_NAME
: il nome del nodo risorsa del pool nel modello Terraform.PROJECT_ID
: l'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
: località di calcolo per in un cluster Kubernetes. Consigliamo di avere un cluster a livello di regione per una maggiore affidabilità il piano di controllo Kubernetes. Puoi anche usare un cluster a livello di zona. Per saperne di più, vedi Seleziona una versione e una topologia di 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 nodo piscina. Deve essere zero o il prodotto del numero di chip TPU diviso per quattro, poiché nelle sezioni TPU multi-host ogni nodo TPU ha 4 chip. Ad esempio, seTPU_TOPOLOGY
è4x8
, Ora ci sono 32 chip, il che significaNUM_NODES
deve essere 8. Per saperne di più sulle topologie TPU, utilizza la tabella in Mappatura della configurazione di TPU.TPU_TOPOLOGY
: indica lo stato desiderato topologia fisica per la sezione TPU. Il formato della topologia dipende dalla versione della TPU in uso:- Per TPU v4: definisci la topologia in 3 tuple (
{A}x{B}x{C}
), per esempio4x4x4
. - Per TPU v5e: definisci la topologia in 2 tuple (
{A}x{B}
), per esempio2x2
.
- Per TPU v4: definisci la topologia in 3 tuple (
Facoltativamente, puoi anche utilizzare le seguenti variabili:
RESERVATION_NAME
: se utilizzi TPU prenotazione, questo è l'elenco delle etichette delle risorse di prenotazione da utilizzare quando la creazione del pool di nodi. Per scoprire di più su come compilareRESERVATION_LABEL_VALUES
nel Camporeservation_affinity
, vedi Fornitore Terraform.autoscaling
: crea un pool di nodi con scalabilità automatica abilitata. Quando GKE scala un pool di nodi di sezioni TPU multi-host, fa lo scale up atomicamente del pool di nodi da zero alla dimensione massima.MAX_NODES
: è la dimensione massima del nodo piscina. 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 ulteriori informazioni, vedi VM spot.
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 la zona in base alla versione della TPU che vuoi utilizzare:
- Per TPU v4, usa
us-central2-b
. - I tipi di macchine TPU v5e che iniziano con
ct5l-
non sono mai multi-host. - Per i tipi di macchine TPU v5e che iniziano con
ct5lp-
, usaus-west1-c
,us-west4-a
,us-west4-b
,us-central1-a
,us-east1-c
,us-east5-b
oeurope-west4-a
. - Per i tipi di macchine TPU v5p che iniziano con
ct5p-
, usaus-east1-d
,us-east5-a
ous-east5-c
.
- Per TPU v4, usa
Nel riquadro di navigazione, fai clic su Nodi.
Nella sezione Configurazione macchina, seleziona TPU.
Nel menu a discesa Serie, seleziona una delle seguenti opzioni:
- CT4P: per TPU v4.
- CT5LP: per TPU v5e.
Nel menu a discesa Tipo di macchina, seleziona il nome della macchina da utilizzare per nodi. Utilizza la Tabella Mappatura della configurazione di TPU per scoprire come definire il tipo di macchina e la topologia TPU che creano un pool di nodi di sezioni 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 il Tipo di disco di avvio sia Disco permanente standard o Disco permanente SSD.
(Facoltativo) Seleziona la casella di controllo Abilita i nodi sulle VM Spot per utilizzare Spot VM per i nodi pool di nodi.
Fai clic su Crea.
Stato provisioning
Se GKE non può creare il pool di nodi della sezione TPU a causa di Capacità TPU disponibile insufficiente. GKE restituisce un messaggio di errore. che indica che non è possibile creare i nodi della sezione TPU per mancanza di capacità.
Se stai creando un pool di nodi della sezione TPU con host singolo, il messaggio di errore è simile a questo:
2 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.
Se stai creando un pool di nodi della sezione TPU multi-host, il messaggio di errore è simile a questo:
The nodes (managed by ...) cannot be created now due to lack of capacity. They
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.
La tua richiesta di provisioning della TPU potrebbe rimanere in coda per molto tempo rimane nella sezione "Provisioning" mentre è in coda.
Quando la capacità è disponibile, GKE crea i nodi rimanenti non sono stati creati.
Se hai bisogno di capacità prima, prova a VM spot, tieni presente che le VM spot consumano una quota diversa rispetto alle istanze on demand.
Puoi eliminare la richiesta TPU in coda eliminando il nodo della sezione TPU pool.
Esegui il carico di lavoro sui nodi sezione TPU
Preparazione del carico di lavoro
I carichi di lavoro TPU hanno i seguenti requisiti di preparazione.
- I framework come JAX, PyTorch e TensorFlow accedono alle VM TPU utilizzando
libtpu
libreria condivisa.libtpu
include il compilatore XLA, il software di runtime TPU e la TPU conducente. Ogni release di PyTorch e JAX richiede una determinata versione dilibtpu.so
. A per utilizzare le TPU in GKE, assicurati di utilizzare le seguenti versioni:Tipo di TPU libtpu.so
versioneTPU v5e
tpu-v5-lite-podslice
tpu-v5-lite-device
- Versione jax[tpu] consigliata: v0.4.9 o successiva
- Versione consigliata di torchxla[tpuvm]: v2.1.0 o successiva
TPU v5p
tpu-v5p-slice
- Versione jax[tpu] consigliata: 0.4.19 o successive.
- Versione torchxla[tpuvm] consigliata: l'utilizzo di una versione consigliata per la notte il 23 ottobre 2023.
TPU v4
tpu-v4-podslice
- jax[tpu]: v0.4.4 o successiva
- torchxla[tpuvm]: v2.0.0 o successiva
- Imposta le seguenti variabili di ambiente per il container che richiede le risorse TPU:
TPU_WORKER_ID
: un numero intero univoco per ogni pod. Questo ID indica un ID univoco worker-id nella sezione TPU. I valori supportati per questo campo vanno da zero a di pod meno uno.TPU_WORKER_HOSTNAMES
: un elenco separato da virgole di nomi host o IP delle VM TPU che devono comunicare tra loro all'interno della sezione. Deve essere presente un o un indirizzo IP per ogni VM TPU nella sezione. L'elenco di indirizzi IP o nomi host vengono ordinati e il valoreTPU_WORKER_ID
è indicizzato a zero.Nel manifest del carico di lavoro, aggiungi i selettori dei nodi Kubernetes per assicurarti che GKE pianifichi il carico di lavoro TPU sul tipo di macchina TPU. Topologia TPU che hai definito:
nodeSelector: cloud.google.com/gke-tpu-accelerator: TPU_ACCELERATOR cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY
Sostituisci quanto segue:
TPU_ACCELERATOR
: il nome dell'acceleratore TPU.- Per TPU v4, usa
tpu-v4-podslice
- Per i tipi di macchine TPU v5e che iniziano con
ct5l-
, usatpu-v5-lite-device
- Per i tipi di macchine TPU v5e che iniziano con
ct5lp-
, usatpu-v5-lite-podslice
- Per TPU v5p, usa
tpu-v5p-slice
- Per TPU v4, usa
TPU_TOPOLOGY
: la posizione fisica per la sezione TPU. Il formato della topologia dipende dalla TPU dell'oggetto come segue:- TPU v4: definisci la topologia in 3 tuple (
{A}x{B}x{C}
), ad esempio4x4x4
. - TPU v5e: definisci la topologia in due tuple (
{A}x{B}
), ad esempio2x2
. - TPU v5p: definisci la topologia in 3 tuple (
{A}x{B}x{C}
), ad esempio4x4x4
.
- TPU v4: definisci la topologia in 3 tuple (
GKE inserisce automaticamente queste variabili di ambiente utilizzando un modello webhook quando viene creato un job con
Quando esegui il deployment di risorse multi-host TPU con Kuberay, GKE offre una di cui è possibile eseguire il deployment webhook nell'ambito della Modelli Terraform per l'esecuzione di Ray su GKE. Istruzioni per eseguire Ray su GKE con TPU disponibile nel Guida dell'utente di TPU. Il webhook mutante inserirà queste variabili di ambiente nei cluster Ray richiedendocompletionMode: Indexed
,subdomain
,parallelism > 1
e richiestagoogle.com/tpu
proprietà. GKE aggiunge un servizio headless vengono aggiunti i record DNS Pod che supportano il servizio.google.com/tpu
proprietà e un multi-host Selettore di nodicloud.google.com/gke-tpu-topology
.
Dopo aver completato la preparazione del carico di lavoro, puoi eseguire un job che utilizza le TPU.
Le sezioni seguenti mostrano esempi su come eseguire un job che esegue il semplice calcolo con le TPU.
Esempio 1: eseguire un carico di lavoro che visualizza il numero di chip TPU disponibili in un pool di nodi della sezione TPU
Il carico di lavoro seguente restituisce il numero di chip TPU in tutti i nodi in un host multi-host Sezione TPU. Per creare una sezione con più host, il carico di lavoro prevede i seguenti parametri:
- Versione TPU: TPU v4
- Topologia: 2 x 2 x 4
Questa versione e selezione della topologia generano una sezione con più host.
- Salva il seguente manifest come
available-chips-multihost.yaml
:apiVersion: v1 kind: Service metadata: name: headless-svc spec: clusterIP: None selector: job-name: tpu-available-chips --- apiVersion: batch/v1 kind: Job metadata: name: tpu-available-chips spec: backoffLimit: 0 completions: 4 parallelism: 4 completionMode: Indexed template: spec: subdomain: headless-svc restartPolicy: Never nodeSelector: cloud.google.com/gke-tpu-accelerator: tpu-v4-podslice cloud.google.com/gke-tpu-topology: 2x2x4 containers: - name: tpu-job image: python:3.10 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 - | pip install 'jax[tpu]' -f https://storage.googleapis.com/jax-releases/libtpu_releases.html python -c 'import jax; print("TPU cores:", jax.device_count())' resources: requests: cpu: 10 memory: 500Gi google.com/tpu: 4 limits: cpu: 10 memory: 500Gi google.com/tpu: 4
- Esegui il deployment del manifest:
kubectl create -f available-chips-multihost.yaml
GKE esegue una sezione TPU v4 con quattro VM (sezione TPU multi-host). La sezione ha 16 chip TPU interconnessi.
- Verifica che il job abbia creato quattro pod:
kubectl get pods
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE tpu-job-podslice-0-5cd8r 0/1 Completed 0 97s tpu-job-podslice-1-lqqxt 0/1 Completed 0 97s tpu-job-podslice-2-f6kwh 0/1 Completed 0 97s tpu-job-podslice-3-m8b5c 0/1 Completed 0 97s
- Recupera i log di uno dei pod:
kubectl logs POD_NAME
Sostituisci
POD_NAME
con il nome di uno dei di pod. Ad esempio,tpu-job-podslice-0-5cd8r
.L'output è simile al seguente:
TPU cores: 16
Esempio 2: eseguire un carico di lavoro che visualizza il numero di chip TPU disponibili nella sezione TPU
Il seguente carico di lavoro è un pod statico che mostra il numero di chip TPU collegati a un nodo specifico. Per creare un nodo host singolo, il carico di lavoro prevede i seguenti parametri:
- Versione TPU: TPU v5e
- Topologia: 2 x 4
Questa versione e selezione della topologia generano una sezione con host singolo.
- Salva il seguente manifest come
available-chips-singlehost.yaml
:apiVersion: v1 kind: Pod metadata: name: tpu-job-jax-v5 spec: restartPolicy: Never nodeSelector: cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice cloud.google.com/gke-tpu-topology: 2x4 containers: - name: tpu-job image: python:3.10 ports: - containerPort: 8431 # Port to export TPU runtime metrics, if supported. securityContext: privileged: true command: - bash - -c - | pip install 'jax[tpu]' -f https://storage.googleapis.com/jax-releases/libtpu_releases.html python -c 'import jax; print("Total TPU chips:", jax.device_count())' resources: requests: google.com/tpu: 8 limits: google.com/tpu: 8
- Esegui il deployment del manifest:
kubectl create -f available-chips-singlehost.yaml
GKE esegue il provisioning dei nodi con otto sezioni TPU a host singolo che utilizzano TPU v5e. Ogni nodo TPU ha otto chip TPU (sezione TPU con host singolo).
- Recupera i log del pod:
kubectl logs tpu-job-jax-v5
L'output è simile al seguente:
Total TPU chips: 8
Esegui l'upgrade dei pool di nodi utilizzando acceleratori (GPU e TPU)
GKE upgrade automatico Cluster standard, inclusi i pool di nodi. Puoi anche manualmente esegui l'upgrade del nodo se vuoi che i tuoi nodi usino una versione successiva prima. Per controllare in che modo gli upgrade per il tuo cluster, utilizza canali, manutenzione Windows e esclusioni, e l'implementazione sequenza.
Puoi anche configurare un upgrade dei nodi per del pool di nodi, come surge upgrade o blu-verde upgrade. Configurando queste strategie, puoi assicurarti che venga eseguito l'upgrade dei pool di nodi in modo da raggiungere l'equilibrio ottimale tra velocità e interruzione completamente gestito di Google Cloud. Per nodo della sezione TPU multi-host pool, invece di utilizzare di upgrade del nodo configurato, GKE ricrea a livello atomico l'intero pool di nodi in un solo passaggio. Per saperne di più, consulta la definizione di atomicità in Terminologia relativa alla TPU in con GKE.
L'utilizzo di una strategia di upgrade dei nodi richiede temporaneamente GKE a seconda della configurazione. Se Google Cloud ha una capacità limitata per le risorse del tuo pool di nodi, ad esempio, stai riscontrando disponibilità delle risorse durante il tentativo di creare più nodi con GPU o TPU. Consulta Eseguire l'upgrade in un con risorse limitate dell'ambiente di rete.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse
utilizzati in questa guida, valuta la possibilità di eliminare i pool di nodi delle sezioni TPU che non sono più
per carichi di lavoro pianificati. Se i carichi di lavoro in esecuzione devono essere
terminato, utilizza kubectl drain
per pulire i carichi di lavoro prima di eliminare il nodo.
Elimina un pool di nodi della sezione TPU:
gcloud container node-pools delete POOL_NAME \ --location=LOCATION \ --cluster=CLUSTER_NAME
Sostituisci quanto segue:
POOL_NAME
: il nome del pool di nodi.CLUSTER_NAME
: il nome del cluster.LOCATION
: la località di computing del cluster.
Configurazioni aggiuntive
Le seguenti sezioni descrivono le configurazioni aggiuntive che puoi applicare ai carichi di lavoro TPU.
Multislice
Puoi aggregare le sezioni più piccole in una multisezione per gestire carichi di lavoro di addestramento più grandi. Per ulteriori informazioni, vedi TPU multisezione in GKE.
Esegui la migrazione della prenotazione TPU
Se hai prenotazioni TPU esistenti, devi prima eseguire la migrazione la prenotazione TPU a un nuovo sistema di prenotazione basato su Compute Engine. Puoi anche creare un sistema di prenotazione basato su Compute Engine in cui non è necessaria alcuna migrazione. A per scoprire come eseguire la migrazione delle prenotazioni TPU, consulta Prenotazione TPU.
Logging
Log emessi dai container in esecuzione su nodi GKE, tra cui TPU Le VM, vengono raccolte dell'agente Logging GKE, inviato a Logging visibile in Logging.
Usa il provisioning automatico dei nodi GKE
Puoi configurare GKE in modo da creare ed eliminare automaticamente il nodo per soddisfare le esigenze in base alle esigenze di risorse dei carichi di lavoro TPU. Per ulteriori informazioni, vedi Configurazione delle Cloud TPU.
Riparazione automatica dei nodi della sezione TPU
Se un nodo della sezione TPU in un pool di nodi della sezione TPU multi-host non è integro, l'intero viene ricreato il pool di nodi. Mentre in un pool di nodi della sezione TPU con un host singolo, solo il nodo TPU non integro viene riparato automaticamente.
Le condizioni che comportano nodi della sezione TPU non integro includono seguenti:
- Qualsiasi nodo della sezione TPU con condizioni comuni dei nodi.
- Qualsiasi nodo della sezione TPU con un numero di TPU non allocabili maggiore di zero.
- Qualsiasi istanza VM in una sezione TPU che è stata arrestata (a causa del prerilascio) o terminata.
- Manutenzione dei nodi: se un nodo TPU è presente all'interno di un nodo della sezione TPU multi-host per la manutenzione dell'host, GKE ricrea l'intero pool Pool di nodi della sezione TPU.
Puoi visualizzare lo stato della riparazione (incluso il motivo dell'errore) nei cronologia delle operazioni, Se l'errore è causato da una quota insufficiente, contatta il tuo del rappresentante dell'account Google Cloud per aumentare la quota corrispondente.
Configura la terminazione controllata del nodo della sezione TPU
Nei cluster GKE con il piano di controllo in esecuzione 1.29.1-gke.1425000
o versioni successive, i nodi delle sezioni TPU supportano gli indicatori SIGTERM
che avvisano il nodo di un
arrestato. La notifica di spegnimento imminente è configurabile fino a cinque
minuti nei nodi delle sezioni TPU.
Puoi configurare
GKE per terminare i tuoi carichi di lavoro ML in modo controllato
periodo di notifica. Durante la terminazione controllata, i carichi di lavoro possono
Eseguire processi di pulizia, ad esempio l'archiviazione dei dati dei carichi di lavoro per ridurne la perdita.
Per ottenere il tempo di notifica massimo, imposta il valore nel manifest del pod
campo spec.terminationGracePeriodSeconds
a 300
secondi (cinque minuti) come
che segue:
spec:
terminationGracePeriodSeconds: 300
GKE fa il possibile per terminare questi pod in modo controllato eseguire l'azione di chiusura da te definita, ad esempio, salvando una formazione stato.
Esegui container senza modalità con privilegi
Se il nodo della sezione TPU esegue versioni precedenti alla 1.28, leggi la sezione seguente:
Un container in esecuzione su una VM in una sezione TPU richiede l'accesso a limiti più elevati
in modo che il driver possa comunicare con i chip TPU tramite memoria diretta
per l'accesso (DMA). Per abilitare questa funzionalità, devi configurare una
ulimit
Se vuoi
Per ridurre l'ambito delle autorizzazioni sul container, completa i seguenti passaggi:
Modifica
securityContext
in modo da includere i seguenti campi:securityContext: capabilities: add: ["SYS_RESOURCE"]
Aumenta
ulimit
eseguendo questo comando all'interno del container prima di configurare i carichi di lavoro per l'utilizzo delle risorse TPU:ulimit -l 68719476736
Nota: per TPU v5e, è disponibile l'esecuzione di container senza modalità con privilegi nei cluster nella versione 1.27.4-gke.900 e successive.
Osservabilità e metriche
Dashboard
Nella pagina Cluster Kubernetes della Console Google Cloud, la scheda Osservabilità mostra l'osservabilità della TPU metriche di valutazione. Per ulteriori informazioni, consulta Metriche di osservabilità di GKE.
La dashboard TPU viene compilata solo se metriche di sistema abilitate nel tuo cluster GKE.
Metriche di runtime
In GKE versione 1.27.4-gke.900 o successive, i carichi di lavoro TPU
che usano la versione JAX
0.4.14
o una versione successiva e specifica containerPort: 8431
per l'esportazione delle metriche di utilizzo TPU come GKE
metriche di sistema.
Le seguenti metriche sono disponibili in Cloud Monitoring
per monitorare le prestazioni di runtime del carico di lavoro TPU:
- Ciclo di servizio: percentuale di tempo nell'ultimo periodo di campionamento (60 secondi) durante che i TensorCore elaboravano attivamente su un chip TPU. Una percentuale maggiore significa un migliore utilizzo della TPU.
- Memoria utilizzata: quantità di memoria dell'acceleratore allocata in byte. Campionamento eseguito ogni 60 secondi.
- Memoria totale: memoria dell'acceleratore totale in byte. Campionamento eseguito ogni 60 secondi.
Queste metriche si trovano nel nodo Kubernetes (k8s_node
) e in Kubernetes
del container (k8s_container
).
Container Kubernetes:
kubernetes.io/container/accelerator/duty_cycle
kubernetes.io/container/accelerator/memory_used
kubernetes.io/container/accelerator/memory_total
Nodo Kubernetes:
kubernetes.io/node/accelerator/duty_cycle
kubernetes.io/node/accelerator/memory_used
kubernetes.io/node/accelerator/memory_total
Metriche host
In GKE versione 1.28.1-gke.1066000 o successive, VM in una sezione TPU esporta le metriche di utilizzo delle TPU come GKE metriche di sistema. Le seguenti metriche sono disponibili in Cloud Monitoring per monitorare le prestazioni dell'host TPU:
- Utilizzo TensorCore: percentuale attuale del TensorCore utilizzato. Il valore TensorCore equivale alla somma delle unità di moltiplicazione matriciale (MXU) più l'unità vettoriale. Il valore di utilizzo TensorCore è la divisione delle operazioni TensorCore che sono state eseguita nell'ultimo periodo campione (60 secondi) per il numero supportato di le operazioni di TensorCore nello stesso periodo. Un valore maggiore corrisponde a un utilizzo migliore.
- Utilizzo larghezza di banda memoria: percentuale attuale dell'acceleratore per la larghezza di banda della memoria in uso. Viene calcolato dividendo la larghezza di banda della memoria utilizzata in un periodo campione (60 secondi) dalla larghezza di banda massima supportata su nello stesso periodo campione.
Queste metriche si trovano nel nodo Kubernetes (k8s_node
) e in Kubernetes
del container (k8s_container
).
Container Kubernetes:
kubernetes.io/container/accelerator/tensorcore_utilization
kubernetes.io/container/accelerator/memory_bandwidth_utilization
Nodo Kubernetes:
kubernetes.io/container/node/tensorcore_utilization
kubernetes.io/container/node/memory_bandwidth_utilization
Per ulteriori informazioni, vedi Metriche Kubernetes e le metriche di sistema di GKE.
Problemi noti
- Il gestore della scalabilità automatica dei cluster potrebbe calcolare erroneamente la capacità per i nuovi nodi della sezione TPU prima quei nodi segnalano le TPU disponibili. Il gestore della scalabilità automatica dei cluster fare ulteriore scale up e di conseguenza creare più nodi del necessario. Gruppo il gestore della scalabilità automatica fa lo scale down di nodi aggiuntivi, se non necessari, dopo la normale operazione di fare lo scale down.
- Il gestore della scalabilità automatica dei cluster annulla lo scale up dei pool di nodi delle sezioni TPU che rimangono in attesa per più di 10 ore. Il gestore della scalabilità automatica del cluster riprova a fare lo scale up operazioni in seguito. Questo comportamento potrebbe ridurre l'ottenimento di TPU per i clienti che non usano le prenotazioni.
- I carichi di lavoro non TPU che hanno una tolleranza per l'incompatibilità della TPU possono impedire lo fare lo scale down pool di nodi se vengono ricreati durante lo svuotamento del pool di nodi della sezione TPU.
- La metrica di utilizzo della larghezza di banda della memoria non è disponibile per le TPU v5e.
Passaggi successivi
- Gestione di modelli linguistici di grandi dimensioni (LLM) con Saxml sulle TPU
- Scopri di più sulla configurazione di Ray su GKE con TPU
- Crea machine learning su larga scala sulle Cloud TPU con GKE
- Gestione di modelli linguistici di grandi dimensioni (LLM) con KubeRay su TPU
- Risolvere i problemi delle TPU in GKE