Con l'allocazione dinamica delle risorse, Kubernetes pianifica i pod in base alla configurazione del dispositivo a cui viene fatto riferimento. Gli operatori delle app non devono selezionare nodi specifici nei loro workload e non devono assicurarsi che ogni pod richieda esattamente il numero di dispositivi collegati a questi nodi. Questa procedura è simile all'allocazione dei volumi per lo spazio di archiviazione.
Questa funzionalità ti aiuta a eseguire i workload di AI allocando in modo dinamico e preciso le risorse GPU all'interno dei cluster Bare Metal, migliorando l'utilizzo delle risorse e le prestazioni per i workload impegnativi.
Questa pagina è rivolta ad amministratori, architetti e operatori che gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei Google Cloud contenuti, consulta Ruoli e attività utente GKE comuni.
Prima di iniziare
Prima di configurare i workload GPU per utilizzare l'allocazione dinamica delle risorse, verifica che siano soddisfatti i seguenti prerequisiti:
- Il cluster Bare Metal è alla versione 1.33.0 o successive.
- Il sistema operativo è Ubuntu 22.04 o Red Hat Enterprise Linux (RHEL) 9.4.
- Hai aggiornato il cluster per abilitare l'allocazione dinamica delle risorse come descritto in Abilitare l'allocazione dinamica delle risorse.
- Hai almeno una macchina nodo con una GPU collegata e il driver GPU NVIDIA installato. Per ulteriori informazioni, vedi Installare o disinstallare l' operatore GPU NVIDIA in bundle.
- Se utilizzi l'operatore GPU NVIDIA in bundle, la versione 1.33.0 o successive abilita l'interfaccia Container Device Interface (CDI) per impostazione predefinita.
Se utilizzi un operatore GPU installato manualmente, assicurati che CDI sia abilitato in
ClusterPolicy. - Hai seguito le istruzioni riportate in Driver NVIDIA DRA per GPU per installare il driver NVIDIA DRA su tutti i nodi con GPU.
Creare workload GPU che utilizzano l'allocazione dinamica delle risorse
Affinché i workload GPU possano sfruttare l'allocazione dinamica delle risorse per richiedere le GPU, devono trovarsi in uno spazio dei nomi condiviso con un ResourceClaim che descriva la richiesta di allocazione del dispositivo GPU. I workload devono fare riferimento a ResourceClaim affinché Kubernetes assegni le risorse GPU.
I seguenti passaggi configurano un ambiente in cui i workload utilizzano l'allocazione dinamica delle risorse per richiedere le risorse GPU:
Per creare risorse correlate all'allocazione dinamica delle risorse, crea un nuovo
Namespacenel cluster:cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Namespace metadata: name: NAMESPACE_NAME EOFSostituisci quanto segue:
CLUSTER_KUBECONFIG: il percorso del file kubeconfig del cluster utente.NAMESPACE_NAMEcon il nome dello spazio dei nomi di allocazione dinamica delle risorse.
Crea un
ResourceClaimper descrivere la richiesta di accesso alla GPU:cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: resource.k8s.io/v1beta1 kind: ResourceClaim metadata: namespace: NAMESPACE_NAME name: RESOURCE_CLAIM_NAME spec: devices: requests: - name: gpu deviceClassName: gpu.nvidia.com EOFSostituisci
RESOURCE_CLAIM_NAMEcon il nome della richiesta di risorse per le richieste GPU.Crea workload che fanno riferimento a
ResourceClaimcreato nel passaggio precedente.I seguenti esempi di workload mostrano come fare riferimento a un
ResourceClaimdenominatogpu-claimnello spazio dei nomidra-test. I container nelpod1Pod sono esempi di NVIDIA Compute Unified Device Architecture (CUDA) progettati per eseguire workload CUDA sulle GPU. Quando il podpod1viene completato correttamente, indica che la funzionalità di allocazione dinamica delle risorse funziona correttamente e che l'allocazione dinamica delle risorse è pronta per gestire le risorse GPU nel cluster.Ubuntu
Utilizza il seguente comando per applicare il manifest al cluster:
cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Pod metadata: name: pod1 namespace: dra-test spec: restartPolicy: OnFailure resourceClaims: - name: gpu resourceClaimName: gpu-claim containers: - name: ctr0 image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0 resources: claims: - name: gpu - name: ctr1 image: nvcr.io/nvidia/k8s/cuda-sample:devicequery resources: claims: - name: gpu EOF
RHEL
Utilizza il seguente comando per applicare il manifest al cluster:
cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Pod metadata: name: pod1 namespace: dra-test spec: restartPolicy: OnFailure resourceClaims: - name: gpu resourceClaimName: gpu-claim containers: - name: ctr0 image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0 resources: claims: - name: gpu - name: ctr1 image: nvcr.io/nvidia/k8s/cuda-sample:devicequery resources: claims: - name: gpu EOF
Limitazioni
Tieni presenti le seguenti limitazioni quando utilizzi l'allocazione dinamica delle risorse:
Quando utilizzi il sistema operativo RHEL con una versione supportata dell'operatore GPU NVIDIA, l'interfaccia Container Device Interface (CDI) gestisce automaticamente l'inserimento del dispositivo e l'etichettatura SELinux. Non è necessario utilizzare la configurazione manuale delle policy SELinux o impostare
securityContextdel pod.Questa funzionalità utilizza il gruppo di API
resource.k8s.io/v1beta1, che è diverso dal gruppo di API Kubernetes open source per questa funzionalità,resource.k8s.io/v1. Il gruppo di API open sourcev1offre più funzionalità e una migliore stabilità rispetto al gruppo di APIv1beta1.
Passaggi successivi
- Per ulteriori informazioni sull'allocazione dinamica delle risorse, consulta la documentazione di Kubernetes .
- Scopri come erogare LLM di terze parti su Bare Metal.