L'allocazione dinamica delle risorse è un'API Kubernetes che ti consente di richiedere e condividere risorse, come le GPU, tra pod e container nei tuoi cluster Google Distributed Cloud bare metal. I driver di terze parti gestiscono questi dispositivi e Kubernetes li alloca dinamicamente, in modo simile ai volumi di archiviazione. I tuoi workload di AI non devono avere come target nodi specifici o richiedere il numero esatto di dispositivi collegati. Questo documento mostra come configurare i workload GPU in modo che utilizzino l'allocazione dinamica delle risorse.
Prima di iniziare
Prima di configurare i workload GPU in modo che utilizzino l'allocazione dinamica delle risorse, verifica che siano soddisfatti i seguenti prerequisiti:
- Il cluster bare metal è alla versione 1.33.0 o successiva.
- Il tuo sistema operativo è Ubuntu 22.04 o Red Hat Enterprise Linux (RHEL) 9.4.
- Hai aggiornato il cluster per attivare l'allocazione dinamica delle risorse come descritto in Attiva l'allocazione dinamica delle risorse.
- Hai almeno una macchina nodo con una GPU collegata e il driver GPU NVIDIA installato. Per ulteriori informazioni, consulta Installa o disinstalla l'operatore GPU NVIDIA in bundle.
- Se utilizzi l'operatore GPU NVIDIA integrato, la versione 1.33.0 o successive abilita Container Device Interface (CDI) per impostazione predefinita.
Se utilizzi un operatore GPU installato manualmente, assicurati che la CDI sia abilitata in
ClusterPolicy. - Hai seguito le istruzioni riportate in Driver NVIDIA DRA per GPU per installare il driver NVIDIA DRA su tutti i nodi collegati alla GPU.
Crea workload GPU che utilizzano l'allocazione dinamica delle risorse
Affinché i workload GPU possano sfruttare l'allocazione dinamica delle risorse per richiedere GPU, devono trovarsi in uno spazio dei nomi condiviso con un ResourceClaim che descrive la richiesta di allocazione dei dispositivi GPU. I tuoi workload devono fare riferimento alla ResourceClaim affinché Kubernetes possa assegnare le risorse GPU.
I passaggi seguenti configurano un ambiente in cui i workload utilizzano l'allocazione dinamica delle risorse per richiedere risorse GPU:
Per creare risorse correlate all'allocazione dinamica delle risorse, crea un nuovo
Namespacenel tuo 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 alle 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 tua richiesta di risorse per le richieste di GPU.Crea workload che fanno riferimento alla risorsa
ResourceClaimcreata nel passaggio precedente.I seguenti esempi di workload mostrano come fare riferimento a un
ResourceClaimdenominatogpu-claimnello spazio dei nomidra-test. I container nel podpod1sono esempi di Compute Unified Device Architecture (CUDA) di NVIDIA progettati per eseguire workload CUDA sulle GPU. Quando il podpod1viene completato correttamente, significa che la funzionalità di allocazione dinamica delle risorse funziona correttamente ed è pronta per gestire le risorse GPU nel cluster.Ubuntu
Utilizza il comando seguente 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 comando seguente 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, la Container Device Interface (CDI) gestisce automaticamente l'inserimento dei dispositivi e l'etichettatura SELinux. Non è necessario utilizzare la configurazione manuale della policy SELinux o impostare il pod
securityContext.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 maggiore stabilità rispetto al gruppo di APIv1beta1.
Passaggi successivi
- Per ulteriori informazioni sull'allocazione dinamica delle risorse, consulta la documentazione di Kubernetes.
- Scopri come eseguire il deployment di LLM di terze parti su bare metal.