Questa pagina mostra come ottimizzare l'ottenibilità della GPU per carichi di lavoro batch su larga scala con GPU Pianificazione dei carichi di lavoro dinamici e ProvisioningRequest.
Consigliamo Dynamic Workload Scheduler per i carichi di lavoro batch su larga scala che possono essere eseguiti al di fuori delle ore di punta con condizioni di gestione della capacità della GPU definite. Questi carichi di lavoro come l'addestramento del modello di deep learning o una simulazione che richiede grandi quantità di GPU con un modello di provisioning atomico, il che significa che tutte le risorse vengono creati contemporaneamente.
Per eseguire carichi di lavoro GPU in Google Kubernetes Engine (GKE) senza Dynamic Workload Scheduler, consulta Esegui GPU in pool di nodi GKE Standard.
Quando utilizzare Dynamic Workload Scheduler
Ti consigliamo di utilizzare Dynamic Workload Scheduler se i carichi di lavoro soddisfano tutte le le seguenti condizioni:
- Le GPU devono essere richieste per eseguire i carichi di lavoro.
- Hai limitato o nessun GPU prenotata e vuoi migliorare la ottenimento delle risorse GPU.
- Il carico di lavoro è flessibile in termini di tempo e il caso d'uso può permettersi di aspettare tutta la capacità richiesta, ad esempio quando GKE alloca delle risorse GPU al di fuori delle ore di traffico più intenso.
- Il carico di lavoro richiede più nodi e non può essere eseguito finché non viene eseguito il provisioning di tutti i nodi GPU e sono pronti contemporaneamente (ad esempio, per l'addestramento distribuito di machine learning).
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
.
- Assicurati di avere un modello esistente Cluster standard in versione 1.28.3-gke.1098000 o successiva.
- Assicurati di configurare le impostazioni di interruzione per i pool di nodi con carichi di lavoro utilizzando Dynamic Workload Scheduler per evitare l'interruzione del carico di lavoro. Quando utilizzi Dynamic Workload Scheduler, ti consigliamo di disabilitare definitivamente gli upgrade automatici dei nodi.
- Assicurati di aver compreso le limitazioni dello strumento di pianificazione dei carichi di lavoro dinamici.
- Assicurati di mantenere almeno un pool di nodi senza che sia abilitato Dynamic Workload Scheduler affinché il cluster funzioni correttamente.
Usa i pool di nodi con Dynamic Workload Scheduler
Puoi utilizzare uno qualsiasi dei tre metodi seguenti per designare Lo scheduler dinamico dei carichi di lavoro può funzionare con pool di nodi specifici nel tuo cluster:
- Crea un pool di nodi.
- Aggiorna un pool di nodi esistente.
- Configura il provisioning automatico dei nodi per creare pool di nodi con Dynamic Workload Scheduler abilitato.
Crea un pool di nodi
Crea un pool di nodi con Dynamic Workload Scheduler abilitato utilizzando il comando gcloud CLI:
gcloud beta 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 \
--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 che scegli per il pool di nodi.CLUSTER_NAME
: il nome del cluster.LOCATION
: la regione Compute Engine del cluster, ad esempio comeus-central1
.GPU_TYPE
: il tipo di GPU.AMOUNT
: il numero di GPU da collegare ai nodi in pool di nodi.DRIVER_VERSION
: la versione del driver NVIDIA da installare. Può essere uno dei seguenti:default
: installa la versione del driver predefinita per GKE completamente gestita.latest
: installa la versione del driver più recente disponibile per il tuo Versione GKE. Disponibile solo per i nodi che utilizzano Container-Optimized OS.
TOTAL_MAX_NODES
: il numero massimo di nodi da la scalabilità automatica per l'intero pool di nodi.MACHINE_TYPE
: il tipo di macchina Compute Engine per dai nodi. Ti consigliamo di selezionare un tipo di macchina ottimizzato per l'acceleratore.
Facoltativamente, puoi utilizzare i seguenti flag:
--no-enable-autoupgrade
: opzione consigliata. Disabilita gli upgrade automatici dei nodi. Supportato solo in cluster GKE non registrati in un canale di rilascio. Per saperne di più, consulta Disabilitare gli upgrade automatici dei nodi per un pool di nodi esistente.--node-locations=COMPUTE_ZONES
: i valori separati da virgole elenco di una o più zone in cui GKE crea i nodi GPU. La devono trovarsi nella stessa regione del cluster. Scegli zone con GPU disponibili.--enable-gvnic
: questo flag consente a gVNIC sui pool di nodi GPU di aumentare la velocità del traffico di rete.
Questo comando crea un pool di nodi con la seguente configurazione:
- GKE abilita il provisioning in coda e la scalabilità automatica del cluster.
- Il pool di nodi inizialmente ha zero nodi.
- Il flag
--enable-queued-provisioning
abilita Dynamic Workload Scheduler e aggiunge l'incompatibilitàcloud.google.com/gke-queued
rispetto al pool di nodi. - I flag
--no-enable-autorepair
e--no-enable-autoupgrade
sono disattivati la riparazione e l'upgrade automatici dei nodi, il che potrebbe interrompere i carichi di lavoro in esecuzione sui nodi riparati o con upgrade eseguito. Puoi disabilitare solo l'upgrade automatico dei nodi sui cluster che non sono registrati in un canale di rilascio.
Aggiorna il pool di nodi esistente e abilita Dynamic Workload Scheduler
Abilita Dynamic Workload Scheduler per un pool di nodi esistente. Rivedi i prerequisiti per configurare correttamente il pool di nodi.
Prerequisiti
Assicurati di creare un pool di nodi con
--reservation-affinity=none
flag. Questo flag è obbligatorio per abilitare Dynamic Workload Scheduler in un secondo momento, non puoi modificare l'affinità di prenotazione dopo la creazione del pool di nodi.Assicurati di mantenere almeno un pool di nodi senza Dynamic Workload Scheduler sia abilitato per il corretto funzionamento del cluster.
Assicurati che il pool di nodi sia vuoto. Puoi ridimensiona il pool di nodi in modo che abbia zero nodi.
Assicurati che la scalabilità automatica sia abilitata e configurata correttamente.
Assicurati che le riparazioni automatiche siano disattivate.
Abilita Dynamic Workload Scheduler per il pool di nodi esistente
Puoi abilitare Dynamic Workload Scheduler per un pool di nodi esistente utilizzando gcloud CLI:
gcloud beta container node-pools update NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--enable-queued-provisioning
Sostituisci quanto segue:
NODEPOOL_NAME
: nome del pool di nodi scelto.CLUSTER_NAME
: nome del cluster.LOCATION
: la regione di Compute Engine del cluster, ad esempio comeus-central1
.
Questo comando di aggiornamento del pool di nodi determina le seguenti modifiche alla configurazione:
- Il flag
--enable-queued-provisioning
abilita Dynamic Workload Scheduler e aggiunge l'incompatibilitàcloud.google.com/gke-queued
rispetto al pool di nodi.
Facoltativamente, puoi anche aggiornare le seguenti impostazioni del pool di nodi:
- Disabilita gli upgrade automatici dei nodi: Ti consigliamo di disabilitare gli upgrade automatici dei nodi poiché gli upgrade del pool di nodi non supportato quando si utilizza Dynamic Workload Scheduler. a disabilitare il nodo assicurati che il cluster GKE non sia registrato in un canale di rilascio.
- Attiva gVNIC nei pool di nodi GPU: NIC virtuale Google (gVNIC) aumenta la velocità del traffico di rete per i nodi GPU.
Abilita il provisioning automatico dei nodi per creare pool di nodi per Dynamic Workload Scheduler
Puoi utilizzare il provisioning automatico dei nodi per gestire i pool di nodi per Dynamic Workload Scheduler per i cluster che eseguono la versione 1.29.2-gke.1553000 o versioni successive. Quando abiliti il nodo il provisioning automatico e l'abilitazione del programma di pianificazione dei carichi di lavoro dinamici, GKE crea pool di nodi con le risorse richieste per il carico di lavoro associato.
Per abilitare il provisioning automatico dei nodi, considera le impostazioni seguenti e completa la configurazione segui i passaggi descritti in Configurare i limiti di GPU:
- Specifica le risorse richieste per Dynamic Workload Scheduler durante l'abilitazione
la caratteristica. Per elencare i
resourceTypes
disponibili, eseguigcloud compute accelerator-types list
. - Ti consigliamo di utilizzare
--no-enable-autoprovisioning-autoupgrade
e--no-enable-autoprovisioning-autorepair
flag per disabilitare il nodo gli upgrade automatici e la riparazione automatica dei nodi. Per saperne di più, vedi Configura le impostazioni di interruzione per i pool di nodi con carichi di lavoro utilizzando Dynamic Workload Scheduler. - Ti consigliamo di consentire a GKE di installare automaticamente Driver GPU nei nodi GPU di cui è stato eseguito il provisioning automatico. Per saperne di più, vedi Installazione dei driver utilizzando il provisioning automatico dei nodi con GPU.
Esegui carichi di lavoro batch con Dynamic Workload Scheduler
Per usare Dynamic Workload Scheduler, ti consigliamo di usare Cuore. Kueue implementa l'accodamento dei job, decidendo quando i job devono attendere e quando devono avviarsi, in base alle quote e per condividere le risorse in modo equo tra i team. Questo semplifica la configurazione necessarie per utilizzare le VM in coda.
Puoi utilizzare Dynamic Workload Scheduler senza Kueue quando usi i tuoi server strumenti o piattaforma di pianificazione batch. Configurazione del programma di pianificazione dei carichi di lavoro dinamici per i job senza Kueue, vedi Dynamic Workload Scheduler per i job senza Kueue.
Scheduler dinamico di carichi di lavoro per job con Kueue
La sezione seguente mostra come configurare il Dynamic Workload Scheduler per
Offerte di lavoro con Kueue. Questa sezione utilizza gli esempi presenti nella directory dws-examples
dal repository ai-on-gke
. Abbiamo pubblicato gli esempi nella directory dws-examples
con licenza Apache2.
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 tuo cluster:
VERSION=v0.7.0 kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/$VERSION/manifests.yaml
Per scoprire di più sull'installazione di Kueue, consulta Installazione.
crea le risorse Kueue
Con il manifest seguente, crei una coda a livello di cluster denominata
dws-cluster-queue
e
Spazio dei nomi LocalQueue
denominato dws-local-queue
. Job che fanno riferimento alla coda dws-cluster-queue
in questo
utilizza Dynamic Workload Scheduler per ottenere le risorse GPU.
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 Dynamic Workload Scheduler in altri spazi dei nomi,
puoi creare altri LocalQueues
utilizzando il modello precedente.
Esegui il job
Nel manifest seguente, il job di esempio utilizza Dynamic Workload Scheduler:
Il file manifest include i seguenti campi pertinenti per Configurazione dello scheduler dinamico dei carichi di lavoro:
- L'etichetta
kueue.x-k8s.io/queue-name: dws-local-queue
indica a GKE che Kueue è responsabile dell'orchestrazione di quel job. Questo l'etichetta definisce anche la coda in cui il job è in coda. - Il flag
suspend: true
indica a GKE di creare la risorsa Job ma non per pianificare ancora i pod. Kueue cambia il flag infalse
quando i nodi sono pronti per l'esecuzione del job. nodeSelector
indica a GKE di pianificare Job solo sul pool di nodi specificato. Il valore deve corrispondereNODEPOOL_NAME
, il nome del pool di nodi con 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 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
Lo Scheduler di carichi di lavoro dinamici con l'integrazione Kueue supporta anche altri carichi di lavoro disponibili nell'ecosistema open source, come i seguenti:
- RayJob
- JobSet v0.5.2 o versioni successive
- Kubeflow MPIJob, TFJob, PyTorchJob.
- Pod Kubernetes utilizzati di frequente dagli orchestratori del flusso di lavoro
- Mini cluster di flusso
Per scoprire di più su questo tipo di assistenza, vedi Utente batch di Kueue.
Per scoprire di più sulla risoluzione dei problemi di Kueue, consulta Risoluzione dei problemi relativi alla richiesta di provisioning in Kueue
Pianificazione di carichi di lavoro dinamico per job senza Kueue
Crea una richiesta tramite l'API ProvisioningRequest per ogni job. Dynamic Workload Scheduler non avvia i pod, ma esegue solo il provisioning dei nodi.
Crea il seguente manifest
provisioning-request.yaml
:apiVersion: v1 kind: PodTemplate metadata: name: POD_TEMPLATE_NAME namespace: NAMESPACE_NAME template: spec: nodeSelector: cloud.google.com/gke-nodepool: NODEPOOL_NAME 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/v1beta1 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:
NAMESPACE_NAME
: il nome dello spazio dei nomi Kubernetes. Lo spazio dei nomi deve essere uguale a quello dei pod.PROVISIONING_REQUEST_NAME
: il nome dell'elementoProvisioningRequest
. Farai riferimento a questo nome nell'annotazione del pod.MAX_RUN_DURATION_SECONDS
: facoltativamente, il numero massimo di un nodo in pochi secondi, fino al valore predefinito di sette giorni. Per ulteriori informazioni vedi Come funziona Dynamic Workload Scheduler. Non puoi modificare questo valore dopo la creazione della richiesta. Questo campo è disponibile in Anteprima nella versione GKE 1.28.5-gke.1355000 o versioni successive.COUNT
: numero di pod richiesti. I nodi sono pianificati atomicamente in una zona.POD_TEMPLATE_NAME
: un'infrastruttura il nome standard. GKE fa riferimento a questo valore nel PodSet della richiesta di provisioning.NODEPOOL_NAME
: il nome che scegli per il pool di nodi.
Applica il manifest:
kubectl apply -f provisioning-request.yaml
configura i pod
Nella specifica Job, collega i pod
ProvisioningRequest
utilizzando le seguenti annotazioni:
apiVersion: batch/v1
kind: Job
spec:
template:
metadata:
annotations:
cluster-autoscaler.kubernetes.io/consume-provisioning-request: PROVISIONING_REQUEST_NAME
cluster-autoscaler.kubernetes.io/provisioning-class-name: "queued-provisioning.gke.io"
spec:
...
Chiave di annotazione dei pod
cluster-autoscaler.kubernetes.io/consume-provisioning-request
stabilisce quale
ProvisioningRequest
da utilizzare. GKE utilizza
Annotazioni consume-provisioning-request
e provisioning-class-name
da fare
le seguenti:
- Pianificare i pod solo nei nodi di cui è stato eseguito il provisioning da Dynamic Workload Scheduler.
- Per evitare il doppio conteggio delle richieste di risorse tra i pod Dynamic Workload Scheduler nel gestore della scalabilità automatica dei cluster.
- Per inserire l'annotazione
safe-to-evict: false
, in modo da impedire al gestore della scalabilità automatica dei cluster dallo spostamento dei pod tra nodi e dall'interruzione dei calcoli in batch. Puoi modifica questo comportamento specificandosafe-to-evict: true
nel pod annotazioni.
Osserva lo stato del Dynamic Workload Scheduler
Lo stato di un Dynamic Workload Scheduler definisce se un pod può essere pianificato o meno. Puoi utilizzare la modalità Smartwatch Kubernetes per osservare le modifiche in modo efficiente o altri strumenti che già utilizzi per il monitoraggio degli oggetti Kubernetes. Nella tabella seguente viene descritto il possibile stato uno scheduler di carichi di lavoro dinamici e ogni possibile risultato:
Stato dello scheduler di carichi di lavoro dinamici | Descrizione | Possibile risultato |
---|---|---|
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 è stata accettata ed è in attesa di risorse disponibili. | La richiesta deve passare allo stato Provisioned , se le risorse sono state
ed è stato eseguito il provisioning dei nodi oppure nello stato Failed se non era possibile. |
Provisioned=true |
I nodi sono pronti. | Tu Avere 10 minuti per avviare i pod di cui è stato eseguito il provisioning Google Cloud. Dopodiché, il gestore della scalabilità automatica dei cluster considera i nodi come necessari e li rimuove. |
Failed=true |
Non è possibile eseguire il provisioning dei nodi a causa
errori. Failed=true è uno stato terminale. |
Risolvere i problemi
la condizione in base alle informazioni contenute in Reason e
Message campi della condizione.
Crea e riprova una nuova richiesta di Dynamic Workload Scheduler. |
Provisioned=false |
Non è stato ancora eseguito il provisioning dei nodi. | Se Se |
Avvia i pod
Quando la richiesta dello strumento di pianificazione dei carichi di lavoro dinamici raggiunge lo stato Provisioned=true
, puoi
eseguire il job
per avviare i pod. Ciò evita la proliferazione dei pod non pianificabili per i pod in attesa
o non riuscite, il che può influire
kube-scheduler
e del cluster per le prestazioni
del gestore della scalabilità automatica.
In alternativa, se non ti interessa avere pod non pianificabili, creare pod in parallelo con Dynamic Workload Scheduler.
Annulla richiesta di Dynamic Workload Scheduler
Per annullare la richiesta prima che ne venga eseguito il provisioning, puoi eliminare
ProvisioningRequest
:
kubectl delete provreq PROVISIONING_REQUEST_NAME -n NAMESPACE
Nella maggior parte dei casi, l'eliminazione di ProvisioningRequest
interrompe la creazione dei nodi.
Tuttavia, a seconda delle tempistiche, ad esempio se i nodi erano già
di cui viene eseguito il provisioning, i nodi potrebbero comunque essere creati. In questi casi,
il gestore della scalabilità automatica dei cluster rimuove i nodi dopo 10 minuti se non viene creato alcun pod.
Come funziona Dynamic Workload Scheduler
Con ProvisioningRequest API
, Dynamic Workload Scheduler esegue le seguenti operazioni:
- Devi dire a GKE che il carico di lavoro può attendere, indeterminato, finché tutti i nodi richiesti non saranno pronti per l'uso contemporaneamente.
- Il gestore della scalabilità automatica dei cluster accetta la richiesta e calcola il numero nodi necessari, trattandoli come una singola unità.
- La richiesta attende che tutte le risorse necessarie siano disponibili in una singola zona. Per i cluster che eseguono la versione 1.29.1-gke.1708000 e versioni successive, questa zona viene scelta utilizzando informazioni sulla capacità disponibile per garantire tempi di attesa più bassi. Per che eseguono versioni precedenti, la zona è stata scelta senza informazioni, il che può comportare la coda nelle zone in cui i tempi di attesa molto più a lungo.
- Il gestore della scalabilità automatica dei cluster esegue il provisioning dei nodi necessari, se disponibili, una volta sola.
- Tutti i pod del carico di lavoro possono essere eseguiti insieme su nuovi pod di cui è stato eseguito il provisioning nodi.
- I nodi di cui è stato eseguito il provisioning sono limitati a sette giorni di runtime o prima, se
imposti il parametro
maxRunDurationSeconds
su indicano che i carichi di lavoro richiedono meno tempo per l'esecuzione. Per ulteriori informazioni vedi Limitare il runtime di un VM (anteprima). Questa funzionalità è disponibile con GKE versione 1.28.5-gke.1355000 o successive. Trascorso questo periodo, i nodi e i pod in esecuzione al loro interno vengono prerilasciata. Se i pod vengono terminati prima e i nodi non vengono utilizzati, il cluster il gestore della scalabilità automatica li rimuove in base alla scalabilità automatica profilo. - I nodi non vengono riutilizzati nel Dynamic Workload Scheduler. Ciascuna
ProvisioningRequest
ordina la creazione di nuovi nodi con i nuovi sette giorni runtime.
Quota
Tutte le VM di cui è stato eseguito il provisioning dalle richieste dello strumento di pianificazione dei carichi di lavoro dinamici utilizzano quote prerilasciabili.
Il numero di ProvisioningRequests
in stato Accepted
è limitato da
una quota dedicata. Configuri la quota per ogni progetto, una
configurazione per regione.
Controlla la quota nella console Google Cloud
Per verificare il nome del limite della quota e l'utilizzo attuale nella nella console Google Cloud, segui questi passaggi:
Vai alla pagina Quote nella console Google Cloud:
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 Richiedi una guida per un limite di quota più elevato.
Controlla se Dynamic Workload Scheduler è limitato dalla quota
Se la tua richiesta Dynamic Workload Scheduler sta richiedendo più tempo del previsto completata, verifica che la richiesta non sia limitata dalla quota. Potresti dover e richiedere una quota maggiore.
Per i cluster che eseguono la versione 1.29.2-gke.1181000 o successiva, controlla se Le limitazioni della quota impediscono il completamento 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é
di quota sufficiente nella regione europe-west4
.
Configura le impostazioni di interruzione per i pool di nodi con carichi di lavoro utilizzando Dynamic Workload Scheduler
Carichi di lavoro che richiedono la disponibilità di tutti i nodi, o della maggior parte dei nodi, in un pool di nodi
sensibili agli espulsioni. È stato eseguito il provisioning della riparazione o dell'upgrade automatico di un nodo
l'utilizzo di ProvisioningRequest API
non è supportato perché queste operazioni rimuovono
tutti i carichi di lavoro in esecuzione su quel nodo e
rende i carichi di lavoro non pianificabili.
Per ridurre al minimo le interruzioni dell'esecuzione dei carichi di lavoro utilizzando Dynamic Workload Scheduler, consigliamo di adottare le seguenti misure:
- A seconda del canale di rilascio del cluster
registrazione,
utilizza le seguenti best practice per impedire gli upgrade automatici dei nodi
che interrompono i carichi di lavoro:
- Se il cluster non è registrato in un canale di rilascio, disabilita il nodo upgrade automatici.
- Se il cluster è registrato in un canale di rilascio, utilizza la manutenzione Windows e esclusioni per impedire a GKE di eseguire l'upgrade automatico dei nodi mentre il carico di lavoro è in esecuzione.
- Disabilita nodo riparazione automatica.
- Utilizza periodi di manutenzione ed esclusioni per ridurre al minimo le interruzioni dell'esecuzione carichi di lavoro, garantendo al contempo che ci sia una finestra temporale GKE può interrompere il pool di nodi per la manutenzione automatica. Se utilizzi questi strumenti di manutenzione, devi impostare una finestra temporale specifica in cui GKE può interrompere il pool di nodi, quindi ti consigliamo imposta questa finestra quando non ci sono carichi di lavoro in esecuzione.
- Per assicurarti che il pool di nodi sia sempre aggiornato, ti consigliamo di eseguire l'upgrade manuale del nodo pool quando non ci sono richieste attive dello strumento di pianificazione dei carichi di lavoro dinamici e il pool di nodi è vuoto.
Limitazioni
- Anti-affinità tra i pod non è supportato. Il gestore della scalabilità automatica dei cluster non considera le regole di anti-affinità tra i pod durante il provisioning dei nodi, il che potrebbe portare a carichi di lavoro non pianificabili. Questo può accadere quando è stato eseguito il provisioning dei nodi per due o più oggetti Dynamic Workload Scheduler nello stesso pool di nodi.
- Sono supportati solo i nodi GPU.
- Le prenotazioni non sono supportate con Dynamic Workload Scheduler. Devi specificare
--reservation-affinity=none
durante la creazione del pool di nodi. Lo scheduler dinamico dei carichi di lavoro richiede e supporta solo il criterio di localitàANY
per la scalabilità automatica del cluster. - Una singola richiesta dello strumento di pianificazione dei carichi di lavoro dinamici può creare fino a 1000 VM, ovvero il numero massimo di nodi per zona per un singolo pool di nodi.
- GKE usa la quota
ACTIVE_RESIZE_REQUESTS
di Compute Engine per controlla il numero di richieste di Dynamic Workload Scheduler in attesa in una coda. Per impostazione predefinita, questa quota ha un limite di 100 a livello di progetto Google Cloud. Se tenti di creare un Richiesta di Dynamic Workload Scheduler superiore a questa quota, la nuova richiesta non va a buon fine. - I pool di nodi che utilizzano Dynamic Workload Scheduler sono sensibili alle interruzioni perché i nodi il provisioning viene eseguito contemporaneamente. Per saperne di più, consulta Configurare le impostazioni di interruzione per i pool di nodi con carichi di lavoro utilizzando Dynamic Workload Scheduler.
- Potresti vedere altre VM a breve durata elencate nella console Google Cloud. Questo comportamento è previsto perché Compute Engine potrebbe creare e rimuovere tempestivamente le VM finché non sarà disponibile la capacità di eseguire il provisioning di tutte le macchine richieste.
- L'integrazione dello strumento di pianificazione dei carichi di lavoro dinamici supporta un solo PodSet. Se vuoi combinare diversi modelli di pod, usare quello con la maggior parte delle risorse richieste. La combinazione di tipi di macchine diversi, ad esempio VM con tipi di GPU diversi, non è supportata.
Passaggi successivi
- Scopri di più sulle GPU in GKE.
- Scopri come eseguire il deployment di carichi di lavoro GPU in Autopilot.