Gestire i dispositivi GPU con l'allocazione dinamica delle risorse

Questa pagina descrive come configurare i workload GPU per utilizzare l'allocazione dinamica delle risorse nei cluster Google Distributed Cloud Bare Metal. L'allocazione dinamica delle risorse è un'API Kubernetes che consente di richiedere e condividere risorse generiche, come le 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 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:

  1. 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 di allocazione dinamica delle risorse.

  2. 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 risorse per le richieste GPU.

  3. Crea workload che fanno riferimento a ResourceClaim creato nel passaggio precedente.

    I seguenti esempi di workload mostrano come fare riferimento a un ResourceClaim denominato gpu-claim nello spazio dei nomi dra-test. I container nel pod1 Pod sono esempi di NVIDIA Compute Unified Device Architecture (CUDA) progettati per eseguire workload CUDA sulle GPU. Quando il pod pod1 viene 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

    1. 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

    1. 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 securityContext del 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 source v1 offre più funzionalità e una migliore stabilità rispetto al gruppo di API v1beta1.

Passaggi successivi