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 meilleure flexibilité 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 afin de les 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 périphériques GPU. Nous vous recommandons d'utiliser l'opérateur GPU NVIDIA pour bénéficier des avantages et de la flexibilité suivants :

  • Choix du type de GPU : Google Distributed Cloud Software-Only est compatible avec un large éventail de types de GPU pris en charge par le dernier opérateur de GPU NVIDIA.

  • Choix d'un système d'exploitation compatible : les nœuds de calcul du cluster peuvent utiliser n'importe quel système d'exploitation compatible avec les GPU NVIDIA. Vous avez la possibilité d'utiliser des pilotes de GPU préinstallés ou l'installation dynamique de pilotes 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 Rôles utilisateur et tâches courantes de GKE.

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 calcul 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 du pilote NVIDIA compatible : la version du pilote NVIDIA que vous utilisez doit être compatible avec votre GPU, votre système d'exploitation et la version CUDA utilisée par vos applications. Vous disposez des options d'installation suivantes pour les pilotes NVIDIA :

    • Utilisez l'opérateur GPU NVIDIA pour installer la version appropriée du pilote 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 pour l'installation du pilote 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 packages 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 valider l'opérateur GPU NVIDIA

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

  1. Pour les GPU connectés via Peripheral Component Interconnect Express (PCIe), exécutez la commande suivante pour obtenir la liste des bus PCI du système dont le nom contient "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 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 la station de travail de l'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, il existe trois variantes de commandes de base :

    • 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 séparées par des virgules afin de spécifier les 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 la liste détaillée des options de configuration, consultez Common Chart Customization Options dans la documentation NVIDIA. Pour en savoir plus sur la logistique de l'utilisation de l'indicateur --set, consultez 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 pilote GPU le plus récent ou spécifié sur tous les nœuds de calcul GPU du cluster. Pour utiliser le conteneur de pilote de GPU NVIDIA, tous les nœuds de calcul avec GPU doivent exécuter la même version du système d'exploitation. Pour contourner ce problème, vous pouvez installer manuellement les 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 de GPU NVIDIA de déployer les 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 Scénarios de déploiement courants dans 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 fonctionnant correctement, vous devriez constater 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 du 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. Consultez les journaux pour voir le résultat de l'exemple de job :

    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 LTS 1.6 de containerd, qui n'active pas Container Device Interface (CDI). Si vous suivez les instructions de la section Support for Container Device Interface de la documentation NVIDIA, il est possible que le runtime nvidia-cdi ne fonctionne pas. Le cluster devrait toujours fonctionner comme prévu, mais il est possible que certaines fonctionnalités CDI ne soient pas disponibles.

  • Les pools de nœuds de l'équilibreur de charge exécutent automatiquement un job de mise à jour tous les sept jours. Ce job écrase les configurations containerd, 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 d'éventuels conflits ou problèmes avec la configuration containerd, n'utilisez pas les 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 Cloud Customer Care.

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, l'assistance NVIDIA directement.

Vos commentaires nous sont utiles.