Se il tuo workload richiede l'elaborazione distribuita su più nodi, valuta la possibilità di utilizzare l'avvio flessibile con provisioning in coda. Per saperne di più, consulta Esegui un carico di lavoro su larga scala con l'avvio flessibile con provisioning in coda.
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 saperne di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti, consulta Ruoli utente e attività comuni di GKE. Google Cloud
Prezzi con avvio flessibile
L'avvio flessibile è consigliato se il tuo workload richiede risorse di cui viene eseguito il provisioning 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 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 conoscere le limitazioni dell'orario 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 di una quota per le GPU preemptible nelle posizioni dei nodi.
Se non hai un cluster o il tuo cluster non soddisfa i requisiti, puoi creare un cluster regionale Standard utilizzando gcloud CLI. Aggiungi i seguenti flag per scoprire di più sull'avvio flessibile:
--location=us-central1 \
--node-locations=us-central1-a,us-central1-b \
--machine-type=g2-standard-8
Quando crei un node pool con avvio flessibile, utilizza i flag menzionati in precedenza e --accelerator type=nvidia-l4,count=1.
Se hai un cluster Standard che soddisfa i requisiti, le sezioni successive ti guidano nella selezione di un tipo di acceleratore GPU e di un tipo di macchina per il tuo cluster.
Scegli un tipo di acceleratore GPU
Se utilizzi un cluster in modalità Autopilot, salta questa sezione e vai alla sezione Esegui un carico di lavoro batch.
La disponibilità delle GPU è specifica per ogni zona. Devi trovare un tipo di acceleratore GPU disponibile in una zona in cui si trova il cluster Standard. Se hai un cluster Standard regionale, la zona in cui è disponibile il tipo di acceleratore GPU deve trovarsi nella regione in cui si trova il cluster. Quando crei il node pool, specifica il tipo di acceleratore e le zone per i nodi. Se specifichi un tipo di acceleratore non disponibile nella località del cluster, la creazione del pool di nodi non va a buon fine.
Esegui questi comandi per ottenere la posizione del cluster e un tipo di acceleratore GPU supportato.
Recupera la posizione in cui si trova il cluster:
gcloud container clusters listL'output è simile al seguente:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS STACK_TYPE example-cluster-1 us-west2 1.33.2-gke.1111000 34.102.3.122 e2-medium 1.33.2-gke.1111000 9 RUNNING IPV4Elenca i tipi di acceleratori GPU disponibili, escluse le workstation virtuali nella località:
gcloud compute accelerator-types list | grep CONTROL_PLANE_LOCATION | grep -v "Workstation"Sostituisci
CONTROL_PLANE_LOCATIONcon la località del cluster.Ad esempio, per ottenere un elenco dei tipi di acceleratori GPU nella regione
us-west2, esegui il comando seguente:gcloud compute accelerator-types list | grep us-west2 | grep -v "Workstation"L'output è simile al seguente:
nvidia-b200 us-west2-c NVIDIA B200 180GB nvidia-tesla-p4 us-west2-c NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-c NVIDIA T4 nvidia-tesla-p4 us-west2-b NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-b NVIDIA T4
Scegli un tipo di macchina compatibile
Se utilizzi un cluster in modalità Autopilot, salta questa sezione e vai alla sezione Esegui un carico di lavoro batch.
Dopo aver scoperto quali GPU sono disponibili nella località del cluster, puoi determinare i tipi di macchine compatibili. Google Cloud limita le GPU a serie di macchine specifiche. Per trovare un tipo di macchina:
- Consulta la tabella Modelli di GPU disponibili.
- Individua la riga relativa al tipo di acceleratore GPU che hai scelto.
- Esamina la colonna "Serie di macchine" della stessa riga. Questa colonna indica quale serie di macchine devi utilizzare.
- Per visualizzare i nomi tipo di macchina che puoi specificare, fai clic sul link nella serie di macchine.
L'unica eccezione è la serie di macchine N1, che fornisce ulteriori indicazioni sui tipi di macchine N1 che puoi utilizzare con il tipo di acceleratore scelto.
Prima di utilizzare una macchina ottimizzata per l'acceleratore, assicurati che sia supportata con la modalità di provisioning con avvio flessibile, come mostrato in Disponibilità dell'opzione di consumo per tipo di macchina.
Determinare il conteggio degli acceleratori
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, devi determinare il numero di acceleratori da
collegare a ogni nodo delpool di nodil. I valori validi dipendono dal tipo di acceleratore e dal tipo di macchina. Ogni tipo di macchina ha un limite al numero di GPU che può
supportare. Per determinare quale valore utilizzare (oltre a quello predefinito di 1):
- Consulta la sezione Tipi di macchina GPU.
- Nella tabella, cerca il tipo di acceleratore per il tipo di serie di macchine.
- Utilizza il valore nella colonna "Conteggio GPU".
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 avvio flessibile abilitato in un cluster Standard esistente, puoi utilizzare gcloud CLI o Terraform.
gcloud
Crea un pool di nodi con avvio flessibile:
gcloud container node-pools create NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION \ --project PROJECT_ID \ --accelerator type=ACCELERATOR_TYPE,count=COUNT \ --machine-type MACHINE_TYPE \ --max-run-duration MAX_RUN_DURATION \ --flex-start \ --node-locations NODE_ZONES \ --num-nodes 0 \ --enable-autoscaling \ --total-min-nodes 0 \ --total-max-nodes 5 \ --location-policy ANY \ --reservation-affinity none \ --no-enable-autorepairSostituisci quanto segue:
NODE_POOL_NAME: il nome che scegli per il tuo pool di nodi.CLUSTER_NAME: il nome del cluster Standard che vuoi modificare.CONTROL_PLANE_LOCATION: la regione di calcolo per il control plane del cluster.PROJECT_ID: il tuo ID progetto.ACCELERATOR_TYPE: il tipo specifico di acceleratore (ad esempio,nvidia-tesla-t4per NVIDIA T4) da collegare alle istanze.COUNT: il numero di acceleratori da collegare alle istanze. Il valore predefinito è1.MACHINE_TYPE: il tipo di macchina da utilizzare per i nodi.MAX_RUN_DURATION: facoltativo. Il runtime massimo di un nodo in secondi, fino al valore predefinito di sette giorni. Il numero che inserisci deve terminare cons. Ad esempio, per specificare un giorno, inserisci86400s.NODE_ZONES: un elenco separato da virgole di una o più zone in cui GKE crea il pool di nodi.
In questo comando, il flag
--flex-startindica agclouddi creare un pool di nodi con VM con avvio flessibile.GKE crea un pool di nodi con nodi che contengono due istanze del tipo di acceleratore specificato. Il pool di nodi inizialmente ha zero nodi e la scalabilità automatica è abilitata
Verifica lo stato dell'avvio flessibile nel pool di nodi:
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 suTrue.
Terraform
Puoi utilizzare l'avvio flessibile con le GPU utilizzando un modulo Terraform.
- Aggiungi il seguente blocco alla configurazione Terraform:
resource "google_container_node_pool" " "gpu_dws_pool" {
name = "gpu-dws-pool"
queued_provisioning {
enabled = false
}
}
node_config {
machine_type = "MACHINE_TYPE"
accelerator_type = "ACCELERATOR_TYPE"
accelerator_count = COUNT
node_locations = ["NODE_ZONES"]
flex_start = true
}
Sostituisci quanto segue:
MACHINE_TYPE: il tipo di macchina da utilizzare per i nodi.ACCELERATOR_TYPE: il tipo specifico di acceleratore (ad esempionvidia-tesla-t4per NVIDIA T4) da collegare alle istanze.COUNT: il numero di acceleratori da collegare alle istanze. Il valore predefinito è1.NODE_ZONES: l'elenco separato da virgole di una o più zone in cui GKE crea il pool di nodi.
Terraform chiama le API Google Cloud per creare un cluster con un node pool che utilizza VM Flex-start con GPU. Il pool di nodi inizialmente ha zero
nodi e la scalabilità automatica è abilitata. Per scoprire di più su Terraform, consulta la
specifica della risorsa google_container_node_pool su terraform.io.
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, creerai due job Kubernetes che richiedono una GPU ciascuno. Un controller Job in Kubernetes crea uno o più pod e contribuisce a garantire 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:apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: container-1 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure --- apiVersion: batch/v1 kind: Job metadata: name: job-2 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: container-2 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailureApplica il manifest
dws-flex-start.yaml:kubectl apply -f dws-flex-start.yamlVerifica che i job siano in esecuzione sullo stesso nodo:
kubectl get pods -l "job-name in (job-1,job-2)" -o wideL'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> job-2 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
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona quello che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
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 GPU in GKE.
- Scopri di più sul provisioning automatico dei nodi.
- Scopri di più sulle best practice per l'esecuzione di workload batch su GKE.