Gérer les charges de travail des conteneurs GPU

Vous pouvez activer et gérer les ressources de processeur graphique (GPU) sur vos conteneurs. Par exemple, vous pouvez préférer exécuter des notebooks d'intelligence artificielle (IA) et de machine learning (ML) dans un environnement GPU. La compatibilité avec les GPU est activée par défaut dans l'appliance Google Distributed Cloud (GDC) sous air gap.

Avant de commencer

Pour effectuer les tâches décrites dans ce document, vous devez demander les autorisations nécessaires et préparer votre environnement.

Demander des rôles IAM

Pour créer, supprimer, modifier ou afficher les ressources d'un cluster Kubernetes, demandez à votre administrateur IAM de l'organisation de vous attribuer le rôle Administrateur de l'espace de noms (namespace-admin) dans l'espace de noms de votre projet. Ce rôle vous permet de déployer des charges de travail GPU dans l'espace de noms de votre projet.

Préparer votre environnement

  • Connectez-vous et générez le fichier kubeconfig pour le cluster Kubernetes Bare Metal.

  • Utilisez le chemin d'accès kubeconfig du cluster Kubernetes pour remplacer CLUSTER_KUBECONFIG dans ces instructions.

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

Pour utiliser des GPU dans un conteneur, procédez comme suit :

  1. Vérifiez que les nœuds de votre cluster Kubernetes sont compatibles avec l'allocation de vos ressources GPU :

    kubectl describe nodes NODE_NAME
    

    Remplacez NODE_NAME par le nœud gérant les GPU que vous souhaitez inspecter.

    Le résultat pertinent ressemble à l'extrait suivant :

    Capacity:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    Allocatable:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    
  2. Ajoutez les champs .containers.resources.requests et .containers.resources.limits à la spécification de votre conteneur. Étant donné que votre cluster Kubernetes est préconfiguré avec des machines GPU, la configuration est la même pour toutes les charges de travail :

     ...
     containers:
     - name: CONTAINER_NAME
       image: CONTAINER_IMAGE
       resources:
         requests:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
         limits:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
     ...
    

    Remplacez les éléments suivants :

    • CONTAINER_NAME : nom du conteneur.
    • CONTAINER_IMAGE : image de conteneur permettant d'accéder aux machines GPU. Vous devez inclure le chemin d'accès au registre de conteneurs et la version de l'image, par exemple REGISTRY_PATH/hello-app:1.0.
  3. Les conteneurs nécessitent également des autorisations supplémentaires pour accéder aux GPU. Pour chaque conteneur qui demande des GPU, ajoutez les autorisations suivantes à la spécification de conteneur :

    ...
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    ...
    
  4. Appliquez votre fichier manifeste de conteneur :

    kubectl apply -f CONTAINER_MANIFEST_FILE \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

    Remplacez les éléments suivants :

    • CONTAINER_MANIFEST_FILE : fichier YAML de votre ressource personnalisée de charge de travail de conteneur.
    • NAMESPACE : espace de noms du projet dans lequel déployer les charges de travail du conteneur.
    • CLUSTER_KUBECONFIG : fichier kubeconfig du cluster Kubernetes bare metal sur lequel vous déployez des charges de travail de conteneur.
  5. Vérifiez que vos pods sont en cours d'exécution et qu'ils utilisent les GPU :

    kubectl get pods -A | grep CONTAINER_NAME \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

    Le résultat pertinent ressemble à l'extrait suivant :

    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
    Ready:          True
    Restart Count:  0
    Limits:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1
    Requests:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1