Configurer et utiliser des GPU NVIDIA

L'aspect apportez votre propre nœud de Google Distributed Cloud (logiciel uniquement) sur Bare Metal vous permet de tirer parti de votre matériel avancé, y compris des machines avec GPU, pour obtenir les meilleures performances et la flexibilité optimale pour vos clusters.

Ce document explique comment installer et utiliser l'opérateur GPU NVIDIA pour configurer des clusters Bare Metal créés avec Google Distributed Cloud à utiliser avec des GPU NVIDIA.

L'opérateur GPU NVIDIA utilise le framework d'opérateur pour gérer les composants logiciels NVIDIA nécessaires au provisionnement et à la gestion des appareils GPU. Nous vous recommandons d'utiliser l'opérateur de GPU NVIDIA pour bénéficier des avantages et de la flexibilité suivants:

  • Choix du type de GPU: Google Distributed Cloud logiciel uniquement est compatible avec un large éventail de types de GPU compatibles avec le dernier opérateur GPU NVIDIA.

  • Choix du système d'exploitation compatible: les nœuds de calcul du cluster peuvent utiliser n'importe quel système d'exploitation (OS) compatible avec les GPU NVIDIA. Vous pouvez utiliser des pilotes de GPU préinstallés ou une installation de pilote dynamique avec l'opérateur de GPU NVIDIA.

  • Choix des modèles de déploiement: vous pouvez utiliser des GPU NVIDIA sur n'importe quel type de cluster avec des nœuds de calcul: clusters utilisateur, clusters autonomes ou clusters hybrides.

Cette page s'adresse aux administrateurs et opérateurs informatiques qui gèrent le cycle de vie de l'infrastructure technologique sous-jacente. Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans le contenu Google Cloud , consultez la section Rôles utilisateur et tâches courantes de l'utilisateur dans GKE Enterprise.

Avant de commencer

Avant de suivre les étapes des sections suivantes, assurez-vous de disposer des éléments suivants:

  • Cluster opérationnel: assurez-vous d'avoir créé un cluster bare metal fonctionnel avec Google Distributed Cloud.

  • GPU NVIDIA: assurez-vous que les GPU NVIDIA sont installés sur les nœuds de travail de votre cluster. La section suivante sur l'installation de l'opérateur GPU NVIDIA inclut des étapes permettant de vérifier que les GPU sont correctement installés et reconnus par votre système d'exploitation.

  • Version de pilote NVIDIA compatible: la version de pilote NVIDIA que vous utilisez doit être compatible avec votre GPU, votre système d'exploitation et la version de CUDA utilisée par vos applications. Vous avez les options d'installation des pilotes NVIDIA suivantes:

    • Utilisez l'opérateur de GPU NVIDIA pour installer la version appropriée du pilote de GPU NVIDIA, comme décrit dans les sections suivantes.

    • Utilisez le pilote NVIDIA préinstallé dans l'image de votre système d'exploitation.

    • Suivez les instructions du guide de démarrage rapide de l'installation des pilotes NVIDIA pour installer manuellement le pilote NVIDIA.

  • Helm version 3.0.0 ou ultérieure: installez l'interface de ligne de commande Helm pour la gestion des paquets sur votre poste de travail administrateur. Vous utilisez Helm pour installer l'opérateur GPU NVIDIA. Vous pouvez exécuter les commandes suivantes pour télécharger et installer l'outil de ligne de commande Helm:

    curl -fsSL -o get_helm.sh \
        https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
    chmod 700 get_helm.sh \
        ./get_helm.sh
    

Installer et vérifier l'opérateur GPU NVIDIA

Les étapes suivantes vous guident lors de l'installation de l'opérateur de GPU NVIDIA sur votre cluster bare metal et vous aident à vérifier qu'il fonctionne avec vos GPU:

  1. Pour les appareils GPU connectés via PCIe (Peripheral Component Interconnect Express), exécutez la commande suivante afin d'obtenir la liste des bus PCI système contenant le nom "NVIDIA" :

    sudo lspci | grep NVIDIA
    

    Le résultat ressemble à ce qui suit :

    25:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1)
    
  2. Vous pouvez utiliser l'outil de ligne de commande NVIDIA System Management Interface (nvidia-smi) sur un nœud donné pour obtenir des informations plus détaillées sur les appareils GPU:

    nvidia-smi
    

    Le résultat ressemble à ce qui suit :

    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.183.01             Driver Version: 535.183.1    CUDA Veersion 12.2     |
    |-----------------------------------------+----------------------+----------------------|
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  NVIDIA A100 80GB PCIe          Off | 00000000:25:00.0 Off |                    0 |
    | N/A   30C    P0              44W / 300W |      0MiB / 81920MiB |      0%      Default |
    |                                         |                      |             Disabled |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+
    
  3. Ajoutez le dépôt Helm NVIDIA sur le poste de travail administrateur:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  4. Installez l'opérateur GPU NVIDIA.

    Lorsque vous installez l'opérateur GPU NVIDIA, trois variantes de commande de base sont disponibles:

    • Installez l'opérateur GPU NVIDIA avec la configuration par défaut:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator
      
    • Utilisez l'indicateur --set pour transmettre un ensemble de paires clé-valeur délimitées par une virgule afin de spécifier des options de configuration:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set OPTION_1_NAME=OPTION_1_VALUE,OPTION_2_NAME=OPTION_2_VALUE
      

      Pour obtenir une liste détaillée des options de configuration, consultez la section Options de personnalisation courantes des graphiques de la documentation NVIDIA. Pour en savoir plus sur la logistique de l'utilisation de l'option --set, consultez la section Format et limites de --set dans la documentation Helm.

    • Désactivez l'installation du pilote si vous avez déjà installé le pilote de GPU NVIDIA sur vos nœuds:

      Par défaut, l'opérateur GPU NVIDIA déploie le dernier pilote de GPU ou celui spécifié sur tous les nœuds de calcul GPU du cluster. Pour utiliser le conteneur du pilote de GPU NVIDIA, tous les nœuds de travail avec GPU doivent exécuter la même version du système d'exploitation. Pour contourner ce problème, vous pouvez installer manuellement des pilotes de GPU sur les nœuds et exécuter la commande helm install avec --set driver.enabled=false pour empêcher l'opérateur GPU NVIDIA de déployer des pilotes.

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set driver.enabled=false
      

    Pour connaître les scénarios de déploiement courants et des exemples de commandes, consultez la section Scénarios de déploiement courants de la documentation NVIDIA.

  5. Vérifiez l'exportation des ressources GPU:

    Une fois l'opérateur de GPU NVIDIA installé avec un pilote de GPU et un plug-in d'appareil en cours d'exécution, vous devriez voir que le nombre de GPU est correctement configuré dans le champ Allocatable pour la ressource de nœud.

    kubectl describe node GPU_NODE_NAME | grep Allocatable -A7
    

    Remplacez GPU_NODE_NAME par le nom de la machine de nœud avec le GPU que vous testez.

    Le résultat ressemble à ce qui suit :

    Allocatable:
      cpu:                127130m
      ephemeral-storage:  858356868519
      hugepages-1Gi:      0
      hugepages-2Mi:      0
      memory:             509648288Ki
      nvidia.com/gpu:     1
      pods:               250
    
  6. Pour vérifier que les GPU fonctionnent, exécutez l'exemple de tâche GPU suivant, qui exécute la commande nvidia-smi:

    export NODE_NAME=GPU_NODE_NAME
    
    cat <<EOF | kubectl create --kubeconfig=CLUSTER_KUBECONFIG -f -
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test-job-gpu
    spec:
      template:
        spec:
          runtimeClassName: nvidia
          containers:
          - name: nvidia-test
            image: nvidia/cuda:12.0.0-base-ubuntu22.04
            command: ["nvidia-smi"]
            resources:
              limits:
                nvidia.com/gpu: 1
          nodeSelector:
            kubernetes.io/hostname: ${NODE_NAME}
          restartPolicy: Never
    EOF
    

    Remplacez CLUSTER_KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster.

  7. Vérifiez les journaux pour obtenir l'exemple de sortie de la tâche:

    kubectl logs job/test-job-gpu –kubeconfig=CLUSTER_KUBECONFIG
    

    Le résultat ressemble à ce qui suit :

    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.183.01             Driver Version: 535.183.1    CUDA Veersion 12.2     |
    |-----------------------------------------+----------------------+----------------------|
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  NVIDIA A100 80GB PCIe          Off | 00000000:25:00.0 Off |                    0 |
    | N/A   30C    P0              44W / 300W |      0MiB / 81920MiB |      0%      Default |
    |                                         |                      |             Disabled |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+
    

Limites

Les limites suivantes s'appliquent lorsque vous utilisez l'opérateur GPU NVIDIA avec des clusters créés avec Google Distributed Cloud:

  • Si vous installez une version récente de l'opérateur GPU NVIDIA, les configurations containerd appliquées par l'opérateur peuvent être écrasées lors des mises à jour ou des mises à niveau du cluster ou du pool de nœuds.

  • Les versions compatibles de Google Distributed Cloud installent la version 1.6 de containerd LTS, qui n'active pas l'interface de conteneur (CDI). Si vous suivez les instructions de la section Compatibilité avec l'interface de périphérique de conteneur de la documentation NVIDIA, l'environnement d'exécution nvidia-cdi risque de ne pas fonctionner. Le cluster devrait toujours fonctionner comme prévu, mais certaines fonctionnalités CDI peuvent ne pas être disponibles.

  • Les pools de nœuds d'équilibrage de charge exécutent automatiquement une tâche de mise à jour tous les sept jours. Cette tâche écrase les configurations conteneurisées, y compris celles ajoutées par l'opérateur GPU NVIDIA.

Bonnes pratiques

Pour minimiser les conflits et les problèmes liés à vos configurations NVIDIA, nous vous recommandons de prendre les précautions suivantes:

  • Sauvegardez le fichier de configuration containerd, /etc/containerd/config.toml, avant de mettre à niveau ou de mettre à jour le cluster ou les pools de nœuds. Ce fichier contient la configuration d'exécution nvidia. Restaurez le fichier config.toml une fois la mise à niveau ou la mise à jour terminée, puis redémarrez containerd pour que les modifications de configuration prennent effet.

  • Pour éviter les conflits ou les problèmes potentiels avec la configuration containerd, n'utilisez pas de nœuds GPU comme nœuds d'équilibreur de charge (loadBalancer.nodePoolSpec).

Obtenir de l'aide

Si vous avez besoin d'aide supplémentaire concernant l'utilisation de GPU avec Google Distributed Cloud, contactez l'assistance client Cloud.

Pour les problèmes liés à la configuration ou à l'utilisation du matériel GPU sur votre système d'exploitation, contactez votre fournisseur de matériel ou, le cas échéant, directement l'assistance NVIDIA.

Merci de vos commentaires.