Questa pagina descrive come configurare i carichi di lavoro GPU per utilizzare l'allocazione dinamica delle risorse nei cluster Google Distributed Cloud bare metal. L'allocazione dinamica delle risorse è un'API Kubernetes che ti consente di richiedere e condividere risorse generiche, come GPU, tra pod e container. I driver di terze parti gestiscono queste risorse.
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 carichi di lavoro 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 l'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 e le prestazioni delle risorse per i workload più 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 contenuti, consulta Ruoli e attività comuni degli utenti di GKE Enterprise. Google Cloud
Prima di iniziare
Prima di configurare i tuoi 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 attivare l'allocazione dinamica delle risorse, come descritto in Attivare l'allocazione dinamica delle risorse.
- Hai almeno una macchina nodo con una GPU collegata e il driver GPU NVIDIA installato. Per ulteriori informazioni, consulta Installare o disinstallare l'operatore GPU NVIDIA in bundle.
- 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 carichi di lavoro GPU sfruttino l'allocazione dinamica delle risorse per richiedere GPU, devono
trovarsi in uno spazio dei nomi condiviso con un ResourceClaim
che descriva la richiesta di
allocazione dei dispositivi GPU. I tuoi workload devono fare riferimento a ResourceClaim
affinché
Kubernetes possa assegnare risorse GPU.
I seguenti passaggi configurano un ambiente in cui i tuoi workload utilizzano l'allocazione dinamica delle risorse per richiedere risorse GPU:
Per creare risorse correlate all'allocazione dinamica delle risorse, crea un nuovo
Namespace
nel cluster:cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Namespace metadata: name: NAMESPACE_NAME EOF
Sostituisci quanto segue:
CLUSTER_KUBECONFIG
: il percorso del file kubeconfig del cluster utente.NAMESPACE_NAME
con il nome dello spazio dei nomi per l'allocazione dinamica delle risorse.
Crea un
ResourceClaim
per 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 EOF
Sostituisci
RESOURCE_CLAIM_NAME
con il nome della richiesta di rivendicazione di risorse per le richieste di GPU.Crea workload che fanno riferimento a
ResourceClaim
creato nel passaggio precedente.I seguenti esempi di workload mostrano come fare riferimento a un
ResourceClaim
denominatogpu-claim
nello spazio dei nomidra-test
. I container nel podpod1
sono esempi di architettura di calcolo unificata (CUDA) NVIDIA progettati per eseguire carichi di lavoro CUDA sulle GPU. Quando il podpod1
viene completato correttamente, indica che la funzionalità di allocazione dinamica delle risorse funziona correttamente ed è pronta a 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
Scarica e installa il modulo di policy SELinux
nvidia_container_t
, necessario per accedere alle GPU.Per ulteriori informazioni, consulta il repository dgx-selinux di NVIDIA.
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 securityContext: seLinuxOptions: type: nvidia_container_t 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, la policy SELinux può interferire con i container che tentano di accedere alle GPU. Per ulteriori informazioni, consulta Come utilizzare le GPU nei container su RHEL 8 bare metal.
Questa funzionalità utilizza il gruppo API
resource.k8s.io/v1beta1
, che differisce dal gruppo API Kubernetes open source per questa funzionalità,resource.k8s.io/v1
. Il gruppo di API open sourcev1
offre 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 pubblicare LLM di terze parti su bare metal.