Gérer les charges de travail des conteneurs GPU

Vous pouvez activer et gérer les ressources des unités de traitement 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. Pour exécuter des charges de travail de conteneurs GPU, vous devez disposer d'un cluster Kubernetes compatible avec les périphériques GPU. La prise en charge des GPU est activée par défaut pour les clusters Kubernetes pour lesquels des machines GPU ont été provisionnées.

Avant de commencer

Pour déployer des GPU dans vos conteneurs, vous devez disposer des éléments suivants :

  • Un cluster Kubernetes avec une classe de machine GPU. Consultez la section Cartes GPU compatibles pour connaître les options de configuration des machines de votre cluster.

  • Le rôle Lecteur de nœud de cluster utilisateur (user-cluster-node-viewer) pour vérifier les GPU et le rôle Administrateur d'espace de noms (namespace-admin) pour déployer des charges de travail GPU dans l'espace de noms de votre projet.

  • Chemin d'accès kubeconfig pour le serveur d'API de gestion zonal qui héberge votre cluster Kubernetes. Connectez-vous et générez le fichier kubeconfig si vous n'en avez pas.

  • Chemin d'accès kubeconfig pour le cluster d'infrastructure de l'organisation dans la zone destinée à héberger vos GPU. Connectez-vous et générez le fichier kubeconfig si vous n'en avez pas.

  • Nom du cluster Kubernetes. Si vous ne disposez pas de ces informations, demandez-les à votre administrateur de plate-forme.

  • Chemin d'accès kubeconfig du cluster Kubernetes. Connectez-vous et générez le fichier kubeconfig si vous n'en avez pas.

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

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

  1. Vérifiez que votre cluster Kubernetes comporte des pools de nœuds compatibles avec les GPU :

    kubectl describe nodepoolclaims -n KUBERNETES_CLUSTER_NAME \
        --kubeconfig ORG_INFRASTRUCTURE_CLUSTER
    

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

    Spec:
      Machine Class Name:  a2-ultragpu-1g-gdc
      Node Count:          2
    

    Pour obtenir la liste complète des types de machines GPU et des profils MIG (Multi-Instance GPU) compatibles, consultez Types de machines des nœuds de cluster.

  2. Ajoutez les champs .containers.resources.requests et .containers.resources.limits à la spécification de votre conteneur. Chaque nom de ressource est différent selon votre classe de machine. Vérifiez l'allocation de vos ressources GPU pour trouver les noms de vos ressources GPU.

    Par exemple, la spécification de conteneur suivante demande trois partitions d'un GPU à partir d'un nœud a2-ultragpu-1g-gdc :

     ...
     containers:
     - name: my-container
       image: "my-image"
       resources:
         requests:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
         limits:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
     ...
    
  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 KUBERNETES_CLUSTER_KUBECONFIG
    

Vérifier l'allocation des ressources GPU

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

    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/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    Allocatable:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    

Notez les noms de ressources de vos GPU. Vous devrez les spécifier lorsque vous configurerez un conteneur pour qu'il utilise des ressources GPU.