Questa pagina mostra come ottimizzare l'ottenibilità delle GPU per i workload batch e di AI su larga scala con GPU che utilizzano l'avvio flessibile con il provisioning in coda basato su Dynamic Workload Scheduler.
Prima di leggere questa pagina, assicurati di conoscere quanto segue:
Questa guida è rivolta a data engineer, amministratori e operatori della piattaforma e a specialisti di dati e IA interessati a utilizzare le funzionalità di orchestrazione dei container Kubernetes per l'esecuzione di carichi di lavoro batch. Per ulteriori informazioni sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei Google Cloud contenuti, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.
Come funziona l'avvio flessibile con il provisioning in coda
Con l'avvio flessibile con provisioning in coda, GKE alloca tutte le risorse richieste contemporaneamente. L'avvio flessibile con provisioning in coda utilizza i seguenti strumenti:
- L'avvio flessibile con il provisioning in coda si basa su Dynamic Workload Scheduler combinato con la definizione della risorsa personalizzata (CRD) della richiesta di provisioning. Questi strumenti gestiscono la capacità allocata in base alle risorse disponibili e ai requisiti del carico di lavoro.
- (Facoltativo) Kueue automatizza il ciclo di vita dell'avvio flessibile con richieste di provisioning in coda. Kueue implementa la coda dei job e gestisce automaticamente il ciclo di vita della richiesta di provisioning.
Per utilizzare l'avvio flessibile con il provisioning in coda, devi aggiungere i flag --flex-start
e --enable-queued-provisioning
quando crei il pool di nodi.
Utilizza l'avvio flessibile con provisioning in coda per i carichi di lavoro batch e di IA su larga scala quando soddisfano i seguenti criteri:
- I carichi di lavoro hanno orari di inizio flessibili.
- I carichi di lavoro devono essere eseguiti su più nodi contemporaneamente.
Per carichi di lavoro più piccoli che possono essere eseguiti su un singolo nodo, utilizza la modalità di provisioning con avvio flessibile. Per ulteriori informazioni sul provisioning delle GPU in GKE, consulta Ottenere acceleratori per i workload AI.
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à,
installa e poi
inizializza gcloud CLI. Se hai già installato l'interfaccia a riga di comando gcloud, ottieni la versione più recente eseguendo
gcloud components update
.
- Assicurati di avere:
- un cluster standard esistente nella versione 1.28.3-gke.1098000 o successive.
- un cluster Autopilot esistente nella versione 1.30.3-gke.1451000 o successive.
- Per utilizzare flex-start, assicurati che il control plane del cluster esegua la versione 1.32.2-gke.1652000 o successive.
- Assicurati di gestire le interruzioni nei workload che utilizzano Dynamic Workload Scheduler per evitare interruzioni del workload.
- Assicurati di conoscere le limitazioni dell'avvio flessibile con il provisioning in coda.
- Quando utilizzi un cluster standard, assicurati di mantenere almeno un pool di nodi senza avvio flessibile con il provisioning in coda abilitato affinché il cluster funzioni correttamente.
Utilizzare i pool di nodi con avvio flessibile con provisioning in coda
Questa sezione si applica solo ai cluster standard.
Puoi utilizzare uno dei seguenti metodi per indicare che l'avvio flessibile con il provisioning in coda può funzionare con pool di nodi specifici nel tuo cluster:
- Crea un pool di nodi.
- Configura il provisioning automatico dei nodi per creare pool di nodi con avvio flessibile e provisioning in coda abilitato.
Crea un node pool
Crea un pool di nodi con avvio flessibile e provisioning in coda abilitato utilizzando gcloud CLI:
gcloud container node-pools create NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--enable-queued-provisioning \
--accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \
--machine-type=MACHINE_TYPE \
--flex-start \
--enable-autoscaling \
--num-nodes=0 \
--total-max-nodes TOTAL_MAX_NODES \
--location-policy=ANY \
--reservation-affinity=none \
--no-enable-autorepair
Sostituisci quanto segue:
NODEPOOL_NAME
: il nome scelto per il node pool.CLUSTER_NAME
: il nome del cluster.LOCATION
: la regione Compute Engine del cluster, ad esempious-central1
.GPU_TYPE
: il tipo di GPU.AMOUNT
: il numero di GPU da collegare ai nodi nel node pool.DRIVER_VERSION
: la versione del driver NVIDIA da installare. Può essere uno dei seguenti:default
: installa la versione predefinita del driver per la versione GKE.latest
: installa la versione più recente del driver disponibile per la tua versione GKE. Disponibile solo per i nodi che utilizzano Container-Optimized OS.
TOTAL_MAX_NODES
: il numero massimo di nodi da scalare automaticamente per l'intero pool di nodi.MACHINE_TYPE
: il tipo di macchina Compute Engine per i tuoi nodi.Best practice: Utilizza un tipo di macchina ottimizzato per l'acceleratore per migliorare le prestazioni e l'efficienza per i carichi di lavoro di AI/ML.
Se vuoi, puoi utilizzare i seguenti flag:
--node-locations=COMPUTE_ZONES
: l'elenco separato da virgole di una o più zone in cui GKE crea i nodi GPU. Le zone devono trovarsi nella stessa regione del cluster. Scegli le zone con GPU disponibili.--enable-gvnic
: questo flag attiva gVNIC nei pool di nodi GPU per aumentare la velocità del traffico di rete.
Questo comando crea un pool di nodi con la seguente configurazione:
- Il flag
--flex-start
combinato con il flag--enable-queued-provisioning
incarica GKE di creare un node pool con avvio flessibile con provisioning in coda attivo e di aggiungere l'attributocloud.google.com/gke-queued
al node pool. - GKE consente il provisioning in coda e la scalabilità automatica dei cluster.
- Il pool di nodi inizialmente non ha nodi.
- Il flag
--no-enable-autorepair
disattiva le riparazioni automatiche, il che potrebbe interrompere i carichi di lavoro in esecuzione sui nodi riparati.
Abilita il provisioning automatico dei nodi per creare pool di nodi per l'avvio flessibile con il provisioning in coda
Puoi utilizzare il provisioning automatico dei nodi per gestire i pool di nodi per l'avvio flessibile con il provisioning in coda per i cluster che eseguono la versione 1.29.2-gke.1553000 o successiva. Quando attivi il provisioning automatico dei nodi, GKE crea i pool di nodi con le risorse richieste per il carico di lavoro associato.
Per attivare il provisioning automatico dei nodi, prendi in considerazione le seguenti impostazioni e completa i passaggi descritti in Configurare i limiti GPU:
- Specifica le risorse necessarie per l'avvio flessibile con il provisioning in coda quando attivi la funzionalità. Per elencare i
resourceTypes
disponibili, esegui il comandogcloud compute accelerator-types list
. - Utilizza il flag
--no-enable-autoprovisioning-autorepair
per disattivare la riparazione automatica dei nodi. - Consenti a GKE di installare automaticamente i driver GPU nei nodi GPU con provisioning automatico. Per ulteriori informazioni, consulta Installare i driver utilizzando il provisioning automatico dei nodi con le GPU.
Esegui i carichi di lavoro batch e di IA con avvio flessibile e provisioning in coda
Per eseguire carichi di lavoro batch con avvio flessibile con provisioning in coda, utilizza una delle seguenti configurazioni:
Avvio flessibile con provisioning in coda per i job con Kueue: puoi utilizzare l'avvio flessibile con provisioning in coda con Kueue per automatizzare il ciclo di vita delle richieste di Provisioning Request. Kueue implementa la coda dei job e osserva lo stato dell'avvio flessibile con il provisioning in coda. Kueue decide quando i job devono attendere e quando devono iniziare, in base a quote e a una gerarchia per condividere equamente le risorse tra i team.
Avvio flessibile con provisioning in coda per i job senza Kueue: puoi utilizzare l'avvio flessibile con provisioning in coda senza Kueue se utilizzi la tua piattaforma o i tuoi strumenti di pianificazione batch interni. Devi creare e annullare manualmente la richiesta di provisioning.
Utilizza Kueue per eseguire i carichi di lavoro batch e di IA con avvio flessibile con provisioning in coda.
Avvio flessibile con provisioning in coda per i job con Kueue
Le sezioni seguenti mostrano come configurare l'avvio flessibile con il provisioning in coda per i job con Kueue:
- Avvio flessibile con configurazione del pool di nodi di provisioning in coda.
- Prenotazione e avvio flessibile con configurazione del pool di nodi di provisioning in coda.
Questa sezione utilizza gli esempi nella directory dws-examples
del repository ai-on-gke
. Abbiamo pubblicato gli esempi nella directory dws-examples
in base alla licenza Apache2.
Per installare Kueue devi disporre delle autorizzazioni di amministratore. Per ottenerli, assicurati di disporre del ruolo IAM roles/container.admin
. Per scoprire di più sui ruoli IAM di GKE, consulta la guida alla creazione di criteri di autorizzazione IAM.
prepara l'ambiente
In Cloud Shell, esegui questo comando:
git clone https://github.com/GoogleCloudPlatform/ai-on-gke cd ai-on-gke/tutorials-and-examples/workflow-orchestration/dws-examples
Installa la versione più recente di Kueue nel cluster:
VERSION=KUEUE_VERSION kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/$VERSION/manifests.yaml
Sostituisci KUEUE_VERSION con la versione più recente di Kueue.
Se utilizzi Kueue in una versione precedente a 0.7.0
, modifica la configurazione del gate delle funzionalità di Kueue impostando il gate delle funzionalità ProvisioningACC
su true
. Per una spiegazione più dettagliata e i valori predefiniti dei cancelli, consulta la sezione Cancelli delle funzionalità di Kueue. Per ulteriori informazioni sull'installazione di Kueue, consulta Installazione.
Crea le risorse Kueue per la configurazione solo del pool di nodi Dynamic Workload Scheduler
Con il seguente manifest, crei una coda a livello di cluster denominata
dws-cluster-queue
e lo
spazio dei nomi LocalQueue
denominato dws-local-queue
. I job che fanno riferimento alla coda dws-cluster-queue
in questo
spazio dei nomi utilizzano flex-start con il provisioning in coda per ottenere le risorse GPU.
La coda di questo cluster ha limiti di quota elevati ed è abilitata solo l'integrazione del provisioning in coda con inizio flessibile. Per ulteriori informazioni sulle API Kueue e su come impostare i limiti, consulta Concetti di Kueue.
Esegui il deployment di LocalQueue:
kubectl create -f ./dws-queues.yaml
L'output è simile al seguente:
resourceflavor.kueue.x-k8s.io/default-flavor created
admissioncheck.kueue.x-k8s.io/dws-prov created
provisioningrequestconfig.kueue.x-k8s.io/dws-config created
clusterqueue.kueue.x-k8s.io/dws-cluster-queue created
localqueue.kueue.x-k8s.io/dws-local-queue created
Se vuoi eseguire job che utilizzano l'avvio flessibile con il provisioning in coda in altri spazi dei nomi,
puoi creare altri LocalQueues
utilizzando il modello precedente.
Esegui il job
Nel manifest seguente, il job di esempio utilizza l'avvio flessibile con il provisioning in coda:
Questo manifest include i seguenti campi pertinenti per la configurazione del provisioning in coda con inizio flessibile:
- L'etichetta
kueue.x-k8s.io/queue-name: dws-local-queue
indica a GKE che Kueue è responsabile dell'orchestrazione del job. Questa etichetta definisce anche la coda in cui è in coda il job. - Il flag
suspend: true
indica a GKE di creare la risorsa Job, ma di non pianificare ancora i pod. Kueue modifica questo flag infalse
quando i nodi sono pronti per l'esecuzione del job. nodeSelector
indica a GKE di pianificare il compito solo nel pool di nodi specificato. Il valore deve corrispondere aNODEPOOL_NAME
, il nome del pool di nodi con il provisioning in coda abilitato.
Esegui il job:
kubectl create -f ./job.yaml
L'output è simile al seguente:
job.batch/sample-job created
Controlla lo stato del tuo job:
kubectl describe job sample-job
L'output è simile al seguente:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Suspended 5m17s job-controller Job suspended Normal CreatedWorkload 5m17s batch/job-kueue-controller Created Workload: default/job-sample-job-7f173 Normal Started 3m27s batch/job-kueue-controller Admitted by clusterQueue dws-cluster-queue Normal SuccessfulCreate 3m27s job-controller Created pod: sample-job-9qsfd Normal Resumed 3m27s job-controller Job resumed Normal Completed 12s job-controller Job completed
L'avvio flessibile con il provisioning in coda con l'integrazione di Kueue supporta anche altri tipi di carichi di lavoro disponibili nell'ecosistema open source, ad esempio:
- RayJob
- JobSet versione 0.5.2 o successive
- Kubeflow MPIJob, TFJob, PyTorchJob.
- Pod Kubernetes utilizzati di frequente dagli orchestratori dei flussi di lavoro
- Mini cluster Flux
Per ulteriori informazioni su questo supporto, consulta Utente batch di Kueue.
Crea le risorse Kueue per la configurazione del pool di nodi di prenotazione e Dynamic Workload Scheduler
Con il seguente manifest, crei due ResourceFlavors
associati a due diversi node pool: reservation-nodepool
e dws-nodepool
. I nomi di questi pool di nodi sono solo esempi. Modifica questi nomi in base alla configurazione del pool di nodi.
Inoltre, con la configurazione ClusterQueue
, i job in arrivo tentano di utilizzare reservation-nodepool
e, se non è presente alcuna capacità, questi job utilizzano Dynamic Workload Scheduler per ottenere le risorse GPU.
La coda di questo cluster ha limiti di quota elevati ed è abilitata solo l'integrazione del provisioning in coda con inizio flessibile. Per ulteriori informazioni sulle API Kueue e su come impostare i limiti, consulta Concetti di Kueue.
Esegui il deployment del manifest utilizzando il seguente comando:
kubectl create -f ./dws_and_reservation.yaml
L'output è simile al seguente:
resourceflavor.kueue.x-k8s.io/reservation created
resourceflavor.kueue.x-k8s.io/dws created
clusterqueue.kueue.x-k8s.io/cluster-queue created
localqueue.kueue.x-k8s.io/user-queue created
admissioncheck.kueue.x-k8s.io/dws-prov created
provisioningrequestconfig.kueue.x-k8s.io/dws-config created
Esegui il job
A differenza della configurazione precedente, questo manifest non include il campo nodeSelector
perché viene compilato da Kueue, a seconda della capacità libera nel ClusterQueue
.
Esegui il job:
kubectl create -f ./job-without-node-selector.yaml
L'output è simile al seguente:
job.batch/sample-job-v8xwm created
Per identificare il pool di nodi utilizzato dal tuo job, devi scoprire quale ResourceFlavor utilizza il tuo job.
Risoluzione dei problemi
Per ulteriori informazioni sulla risoluzione dei problemi di Kueue, consulta Risoluzione dei problemi relativi alla richiesta di provisioning in Kueue.
Avvio flessibile con provisioning in coda per i job senza coda
Definisci un oggetto ProvisioningRequest
Crea una richiesta tramite la Richiesta di provisioning per ogni job. L'avvio flessibile con provisioning in coda non avvia i pod, ma esegue solo il provisioning dei nodi.
Crea il seguente manifest
provisioning-request.yaml
:Standard
apiVersion: v1 kind: PodTemplate metadata: name: POD_TEMPLATE_NAME namespace: NAMESPACE_NAME labels: cloud.google.com/apply-warden-policies: "true" template: spec: nodeSelector: cloud.google.com/gke-nodepool: NODEPOOL_NAME cloud.google.com/gke-flex-start: "true" tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule" containers: - name: pi image: perl command: ["/bin/sh"] resources: limits: cpu: "700m" nvidia.com/gpu: 1 requests: cpu: "700m" nvidia.com/gpu: 1 restartPolicy: Never --- apiVersion: autoscaling.x-k8s.io/API_VERSION kind: ProvisioningRequest metadata: name: PROVISIONING_REQUEST_NAME namespace: NAMESPACE_NAME spec: provisioningClassName: queued-provisioning.gke.io parameters: maxRunDurationSeconds: "MAX_RUN_DURATION_SECONDS" podSets: - count: COUNT podTemplateRef: name: POD_TEMPLATE_NAME
Sostituisci quanto segue:
API_VERSION
: la versione dell'API,v1
ov1beta1
. Per la versione GKE 1.31.1-gke.1678000 e quelle successive, consigliamo di utilizzarev1
per la stabilità e l'accesso alle funzionalità più recenti.NAMESPACE_NAME
: il nome dello spazio dei nomi Kubernetes. Lo spazio dei nomi deve essere lo stesso dello spazio dei nomi dei pod.PROVISIONING_REQUEST_NAME
: il nome delProvisioningRequest
. Farai riferimento a questo nome nell'annotazione del pod.MAX_RUN_DURATION_SECONDS
: facoltativo, il tempo di esecuzione massimo di un nodo in secondi, fino al valore predefinito di sette giorni. Per scoprire di più, consulta Come funziona il provisioning in coda con inizio flessibile. Non puoi modificare questo valore dopo la creazione della richiesta. Questo campo è disponibile in GKE versione 1.28.5-gke.1355000 o successive.COUNT
: numero di pod richiesti. I nodi vengono pianificati in modo atomico in una zona.POD_TEMPLATE_NAME
: il nome delPodTemplate
.NODEPOOL_NAME
: il nome scelto per il node pool. Rimuovi se vuoi utilizzare un node pool con provisioning automatico.
GKE potrebbe applicare convalide e mutazioni ai pod durante la loro creazione. L'etichetta
cloud.google.com/apply-warden-policies
consente a GKE di applicare le stesse convalide e mutazioni agli oggetti PodTemplate. Questa etichetta è necessaria per consentire a GKE di calcolare i requisiti delle risorse dei nodi per i pod. L'integrazione dell'avvio flessibile con il provisioning in coda supporta una sola specificaPodSet
. Se vuoi combinare diversi modelli di pod, utilizza quello che richiede più risorse. La combinazione di diversi tipi di macchine, ad esempio VM con diversi tipi di GPU, non è supportata.Provisioning automatico dei nodi
apiVersion: v1 kind: PodTemplate metadata: name: POD_TEMPLATE_NAME namespace: NAMESPACE_NAME labels: cloud.google.com/apply-warden-policies: "true" template: spec: nodeSelector: cloud.google.com/gke-accelerator: GPU_TYPE cloud.google.com/gke-flex-start: "true" tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule" containers: - name: pi image: perl command: ["/bin/sh"] resources: limits: cpu: "700m" nvidia.com/gpu: 1 requests: cpu: "700m" nvidia.com/gpu: 1 restartPolicy: Never --- apiVersion: autoscaling.x-k8s.io/API_VERSION kind: ProvisioningRequest metadata: name: PROVISIONING_REQUEST_NAME namespace: NAMESPACE_NAME spec: provisioningClassName: queued-provisioning.gke.io parameters: maxRunDurationSeconds: "MAX_RUN_DURATION_SECONDS" podSets: - count: COUNT podTemplateRef: name: POD_TEMPLATE_NAME
Sostituisci quanto segue:
API_VERSION
: la versione dell'API,v1
ov1beta1
. Per la versione GKE 1.31.1-gke.1678000 e quelle successive, consigliamo di utilizzarev1
per la stabilità e l'accesso alle funzionalità più recenti.NAMESPACE_NAME
: il nome dello spazio dei nomi Kubernetes. Lo spazio dei nomi deve essere lo stesso dello spazio dei nomi dei pod.PROVISIONING_REQUEST_NAME
: il nome delProvisioningRequest
. Farai riferimento a questo nome nell'annotazione del pod.MAX_RUN_DURATION_SECONDS
: facoltativo, il tempo di esecuzione massimo di un nodo in secondi, fino al valore predefinito di sette giorni. Per scoprire di più, consulta Come funziona il provisioning in coda con inizio flessibile. Non puoi modificare questo valore dopo la creazione della richiesta. Questo campo è disponibile in GKE versione 1.28.5-gke.1355000 o successive.COUNT
: numero di pod richiesti. I nodi vengono pianificati in modo atomico in una zona.POD_TEMPLATE_NAME
: il nome delPodTemplate
.GPU_TYPE
: il tipo di hardware della GPU.
GKE potrebbe applicare convalide e mutazioni ai pod durante la loro creazione. L'etichetta
cloud.google.com/apply-warden-policies
consente a GKE di applicare le stesse convalide e mutazioni agli oggetti PodTemplate. Questa etichetta è necessaria per consentire a GKE di calcolare i requisiti delle risorse dei nodi per i pod.Applica il manifest:
kubectl apply -f provisioning-request.yaml
Configura i pod
Questa sezione utilizza
Kubernetes Jobs per
configurare i pod. Tuttavia, puoi anche utilizzare un JobSet
Kubernetes o qualsiasi altro framework come Kubeflow, Ray o controller personalizzati. Nella specifica del job, collega i pod a ProvisioningRequest
utilizzando le seguenti annotazioni:
apiVersion: batch/v1
kind: Job
spec:
template:
metadata:
annotations:
autoscaling.x-k8s.io/consume-provisioning-request: PROVISIONING_REQUEST_NAME
autoscaling.x-k8s.io/provisioning-class-name: "queued-provisioning.gke.io"
spec:
...
Prima della versione GKE 1.30.3-gke.1854000, devi utilizzare le seguenti annotazioni legacy:
annotations:
cluster-autoscaler.kubernetes.io/consume-provisioning-request: PROVISIONING_REQUEST_NAME
cluster-autoscaler.kubernetes.io/provisioning-class-name: "queued-provisioning.gke.io"
Tieni presente che, a partire dalla versione GKE 1.31.1-gke.1678000, le annotazioni cluster-autoscaler.kubernetes.io/consume-provisioning-request
e cluster-autoscaler.kubernetes.io/provisioning-class-name
sono ritirate.
La chiave di annotazione del pod consume-provisioning-request
definisce quale ProvisioningRequest
consumare. GKE utilizza le annotazioni consume-provisioning-request
e provisioning-class-name
per eseguire quanto segue:
- Per pianificare i pod solo nei nodi di cui è stato eseguito il provisioning con avvio flessibile con provisioning in coda.
- Per evitare il conteggio doppio delle richieste di risorse tra i pod e il provisioning in coda con inizio flessibile nel gestore della scalabilità automatica del cluster.
- Per iniettare l'annotazione
safe-to-evict: false
, per impedire al gestore della scalabilità automatica del cluster di spostare i pod tra i nodi e interrompere i calcoli batch. Puoi modificare questo comportamento specificandosafe-to-evict: true
nelle annotazione del podcast.
Controllare lo stato di una richiesta di provisioning
Lo stato di una richiesta di provisioning definisce se un pod può essere pianificato o meno. Puoi utilizzare Kubernetes Watches per osservare le modifiche in modo efficiente o altri strumenti che utilizzi già per monitorare gli stati degli oggetti Kubernetes. La tabella seguente descrive il possibile stato di una richiesta di provisioning e ogni possibile esito:
Stato della richiesta di provisioning | Descrizione | Possibile esito |
---|---|---|
In attesa | La richiesta non è stata ancora visualizzata ed elaborata. | Dopo l'elaborazione, la richiesta passa allo stato Accepted o Failed . |
Accepted=true |
La richiesta è accettata e attende che le risorse siano disponibili. | La richiesta deve passare allo stato Provisioned se sono state trovate risorse e sono stati eseguiti il provisioning dei nodi oppure allo stato Failed se non è stato possibile. |
Provisioned=true |
I nodi sono pronti. | Hai 10 minuti di tempo per avviare i pod in modo da consumare le risorse di cui è stato eseguito il provisioning. Dopo questo periodo di tempo, il gestore della scalabilità automatica del cluster considera i nodi come non necessari e li rimuove. |
Failed=true |
Non è possibile eseguire il provisioning dei nodi a causa di errori. Failed=true è uno stato terminale. |
Risolvi i problemi relativi alla condizione in base alle informazioni nei campi Reason e Message della condizione.
Crea e riprova una nuova richiesta di provisioning. |
Provisioned=false |
Il provisioning dei nodi non è ancora stato eseguito. |
Se Se Se |
Avvia i pod
Quando la richiesta di provisioning raggiunge lo stato Provisioned=true
, puoi
eseguire il tuo job
per avviare i pod. In questo modo si evita la proliferazione di pod non pianificabili per richieste in attesa o non riuscite, che possono influire sul rendimento di kube-scheduler e del gestore della scalabilità automatica dei cluster.
In alternativa, se non ti interessa avere pod non pianificabili, puoi creare i pod in parallelo con la richiesta di provisioning.
Annullare la richiesta di Provisioning Request
Per annullare la richiesta prima del provisioning, puoi eliminare
ProvisioningRequest
:
kubectl delete provreq PROVISIONING_REQUEST_NAME -n NAMESPACE
Nella maggior parte dei casi, l'eliminazione di ProvisioningRequest
impedisce la creazione di nodi.
Tuttavia, a seconda dei tempi, ad esempio se il provisioning dei nodi è già in corso, i nodi potrebbero comunque essere creati. In questi casi, il gestore della scalabilità automatica del cluster rimuove i nodi dopo 10 minuti se non vengono creati pod.
Risolvere i problemi relativi alle quote
Tutte le VM di cui viene eseguito il provisioning tramite le richieste di provisioning utilizzano quote preassegnate.
Il numero di ProvisioningRequests
in stato Accepted
è limitato da una quota dedicata. Configura la quota per ogni progetto, una configurazione della quota per regione.
Controllare la quota nella Google Cloud console
Per controllare il nome del limite di quota e l'utilizzo corrente nella Google Cloud console, segui questi passaggi:
Vai alla pagina Quote nella Google Cloud console:
Nella casella
Filtro, seleziona la proprietà Metrica, inserisciactive_resize_requests
e premi Invio.
Il valore predefinito è 100. Per aumentare la quota, segui i passaggi elencati in Richiedere un aggiustamento della quota.
Verificare se la richiesta di provisioning è limitata dalla quota
Se la richiesta di provisioning richiede più tempo del previsto per essere completata, controlla che la richiesta non sia limitata dalla quota. Potresti dover richiedere un aumento della quota.
Per i cluster che eseguono la versione 1.29.2-gke.1181000 o successive, controlla se limitazioni specifiche delle quote impediscono l'accettazione della tua richiesta:
kubectl describe provreq PROVISIONING_REQUEST_NAME \
--namespace NAMESPACE
L'output è simile al seguente:
…
Last Transition Time: 2024-01-03T13:56:08Z
Message: Quota 'NVIDIA_P4_GPUS' exceeded. Limit: 1.0 in region europe-west4.
Observed Generation: 1
Reason: QuotaExceeded
Status: False
Type: Provisioned
…
In questo esempio, GKE non può eseguire il deployment dei nodi perché la quota nella regione europe-west4
non è sufficiente.
Esegui la migrazione dei pool di nodi dal provisioning in coda alla modalità di provisioning con avvio flessibile
Per i pool di nodi esistenti creati utilizzando il flag --enable-queued-provisioning
, esegui il seguente comando per eseguirne la migrazione alla nuova modalità di provisioning flex-start:
gcloud container node-pools update NODEPOOL_NAME \
--cluster=CLUSTER_NAME --flex-start
Questa operazione esegue quanto segue:
- Aggiorna il node pool a un node pool con modalità di provisioning con avvio flessibile.
- Applica i prezzi dei nodi con modalità di provisioning con avvio flessibile.
Tutti i nodi dei cluster in esecuzione su 1.32.2-gke.1652000 o versioni successive, la versione minima per i nodi in modalità di provisioning flex-start, utilizzano gli upgrade di breve durata.
Passaggi successivi
- Scopri di più sulle GPU in GKE.
- Scopri come eseguire il deployment dei carichi di lavoro GPU in Autopilot.