Gérer les charges de travail GPU

Cette page explique comment gérer les charges de travail des unités de traitement graphique (GPU) sur Google Distributed Cloud connected. Pour profiter de cette fonctionnalité, vous devez disposer d'une configuration matérielle Distributed Cloud connectée contenant des GPU. Pour en savoir plus, consultez Planifier la configuration matérielle.

Les charges de travail connectées Distributed Cloud peuvent s'exécuter dans des conteneurs et sur des machines virtuelles :

  • Charges de travail GPU exécutées dans des conteneurs. Toutes les ressources GPU de votre cluster connecté Distributed Cloud sont initialement allouées aux charges de travail s'exécutant dans des conteneurs. Le pilote de GPU permettant d'exécuter des charges de travail conteneurisées basées sur le GPU est inclus dans Distributed Cloud connecté. Dans chaque conteneur, les bibliothèques GPU sont montées sur /opt/nvidia.

  • Charges de travail GPU exécutées sur des machines virtuelles. Pour exécuter une charge de travail basée sur un GPU sur une machine virtuelle, vous devez allouer des ressources de GPU sur le nœud connecté Distributed Cloud cible aux machines virtuelles, comme décrit plus loin sur cette page. Cela permet de contourner le pilote de GPU intégré et de transmettre directement les GPU aux machines virtuelles. Vous devez installer manuellement un pilote de GPU compatible sur le système d'exploitation invité de chaque machine virtuelle. Vous devez également obtenir toutes les licences nécessaires pour exécuter des pilotes GPU spécialisés sur vos machines virtuelles.

Pour vérifier que des GPU sont présents sur un nœud Distributed Cloud connecté, assurez-vous que le nœud comporte le libellé vm.cluster.gke.io.gpu=true. Si le libellé n'est pas présent sur le nœud, cela signifie qu'aucun GPU n'est installé sur la machine physique Distributed Cloud connectée correspondante.

Allouer des ressources de GPU

Par défaut, toutes les ressources GPU de chaque nœud du cluster sont allouées aux charges de travail conteneurisées. Pour personnaliser l'allocation des ressources GPU sur chaque nœud, suivez les étapes de cette section.

Configurer l'allocation des ressources GPU

  1. Pour allouer des ressources GPU sur un nœud Distributed Cloud connecté, utilisez la commande suivante pour modifier la ressource personnalisée GPUAllocation sur le nœud cible :

    kubectl edit gpuallocation NODE_NAME --namespace vm-system

    Remplacez NODE_NAME par le nom du nœud Distributed Cloud cible.

    Dans l'exemple suivant, le résultat de la commande affiche l'allocation des ressources GPU par défaut. Par défaut, toutes les ressources GPU sont allouées aux charges de travail conteneurisées (pod), et aucune ressource GPU n'est allouée aux charges de travail de machine virtuelle (vm) :

    ...
    spec:
      pod:   2  # Number of GPUs allocated for container workloads
      vm:    0  # Number of GPUs allocated for VM workloads
    
  2. Définissez vos allocations de ressources GPU comme suit :

    • Pour allouer une ressource de GPU à des charges de travail conteneurisées, augmentez la valeur du champ pod et diminuez celle du champ vm du même montant.
    • Pour allouer une ressource de GPU aux charges de travail des machines virtuelles, augmentez la valeur du champ vm et diminuez la valeur du champ pod du même montant.

    Le nombre total de ressources GPU allouées ne doit pas dépasser le nombre de GPU installés sur la machine physique Distributed Cloud connectée sur laquelle le nœud s'exécute. Sinon, le nœud rejette l'allocation non valide.

    Dans l'exemple suivant, deux ressources de GPU ont été réaffectées des charges de travail conteneurisées (pod) aux charges de travail de machine virtuelle (vm) :

    ...
    spec:
      pod:   0  # Number of GPUs allocated for container workloads
      vm:    2  # Number of GPUs allocated for VM workloads
    

    Lorsque vous avez terminé, appliquez la ressource GPUAllocation modifiée à votre cluster et attendez que son état passe à AllocationFulfilled.

Vérifier l'allocation des ressources GPU

  • Pour vérifier l'allocation de vos ressources GPU, utilisez la commande suivante :

    kubectl describe gpuallocations NODE_NAME --namespace vm-system

    Remplacez NODE_NAME par le nom du nœud connecté Distributed Cloud cible.

    La commande renvoie un résultat semblable à l'exemple suivant :

     Name:         mynode1
     ...
     spec:
       node:  mynode1
       pod:   2  # Number of GPUs allocated for container workloads
       vm:    0  # Number of GPUs allocated for VM workloads
     Status:
       Allocated:  true
       Conditions:
         Last Transition Time:  2022-09-23T03:14:10Z
         Message:
         Observed Generation:   1
         Reason:                AllocationFulfilled
         Status:                True
         Type:                  AllocationStatus
         Last Transition Time:  2022-09-23T03:14:16Z
         Message:
         Observed Generation:   1
         Reason:                DeviceStateUpdated
         Status:                True
         Type:                  DeviceStateUpdated
       Consumption:
         pod:         0/2   # Number of GPUs currently consumed by container workloads
         vm:          0/0   # Number of GPUs currently consumed by VM workloads
       Device Model:  NVIDIA L4
     Events:          <none>
    

Configurer un conteneur pour qu'il utilise des ressources de GPU

Pour configurer un conteneur s'exécutant sur Distributed Cloud connecté afin d'utiliser des ressources GPU, configurez sa spécification comme indiqué dans l'exemple suivant, puis appliquez-la à votre cluster :

  apiVersion: v1
  kind: Pod
  metadata:
    name: my-gpu-pod
  spec:
    containers:
    - name: my-gpu-container
      image: CUDA_TOOLKIT_IMAGE
      command: ["/bin/bash", "-c", "--"]
      args: ["while true; do sleep 600; done;"]
      env:
      resources:
        requests:
        GPU_MODEL: 2
        limits:
        GPU_MODEL: 2
    nodeSelector:
      kubernetes.io/hostname: NODE_NAME

Remplacez les éléments suivants :

  • CUDA_TOOLKIT_IMAGE : chemin d'accès complet et nom de l'image NVIDIA CUDA Toolkit. La version de CUDA Toolkit doit correspondre à la version du pilote NVIDIA exécutée sur votre cluster connecté Distributed Cloud. Pour déterminer la version de votre pilote NVIDIA, consultez les notes de version de Distributed Cloud. Pour trouver la version correspondante de CUDA Toolkit, consultez Compatibilité avec CUDA.
  • NODE_NAME : nom du nœud Distributed Cloud connecté cible.
  • GPU_MODEL : modèle de GPU NVIDIA installé dans la machine Distributed Cloud connectée cible. À partir de cette version, la seule valeur acceptée est nvidia.com/gpu-pod-NVIDIA_L4 pour le GPU NVIDIA L4.

Configurer une machine virtuelle pour utiliser des ressources GPU

Pour configurer une machine virtuelle exécutée sur Distributed Cloud Connected afin d'utiliser des ressources GPU, configurez sa spécification de ressources VirtualMachine comme indiqué dans l'exemple suivant, puis appliquez-la à votre cluster :

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
...
spec:
  ...
  gpu:
    model: GPU_MODEL
    quantity: 2

Remplacez les éléments suivants :

  • GPU_MODEL : modèle de GPU NVIDIA installé dans la machine Distributed Cloud connectée cible. À partir de cette version, la seule valeur acceptée est nvidia.com/gpu-pod-NVIDIA_L4 pour le GPU NVIDIA L4.

Étapes suivantes