Exécuter des instances avec des accélérateurs de GPU

Cette page décrit comment utiliser les accélérateurs matériels de processeurs graphiques (GPU) NVIDIA dans les instances de machines virtuelles (VM) Container-Optimized OS.

Présentation

Compute Engine vous permet de créer des instances de VM exécutant Container-Optimized OS et associées à des GPU. Lorsque vous exécutez des GPU sur Compute Engine, vous ne pouvez utiliser que deux familles de machines: celles optimisées pour les accélérateurs et celles à usage général N1.

  • Pour les types de machines optimisés pour les accélérateurs, chaque type de machine est associé à un modèle spécifique de GPU NVIDIA.

    • Des GPU NVIDIA H100 de 80 Go sont associés aux types de machines optimisés pour les accélérateurs A3.
    • Des GPU NVIDIA A100 sont associés aux types de machines optimisés pour les accélérateurs A2. Elles sont disponibles dans les options A100 40 Go et A100 80 Go.
    • Des GPU NVIDIA L4 sont associés aux types de machines optimisés pour les accélérateurs G2.
  • Pour les types de machines à usage général N1, vous pouvez associer les GPU suivants:

Les GPU fournissent une puissance de calcul permettant d'effectuer des tâches de deep learning, telles que la reconnaissance d'images et le traitement du langage naturel, ainsi que d'autres tâches gourmandes en ressources de calcul, comme le transcodage de vidéos et le traitement d'images.

Google Cloud vous offre une expérience fluide afin d'exécuter vos charges de travail GPU dans des conteneurs sur des instances de VM Container-Optimized OS. Vous pouvez ainsi bénéficier d'autres fonctionnalités de Container-Optimized OS, telles que la sécurité et la fiabilité.

Pour en savoir plus sur les cas d'utilisation des GPU, consultez la page GPU sur Google Cloud.

Pour en savoir plus sur l'utilisation de GPU sur Google Kubernetes Engine (GKE), consultez la page Exécuter des GPU sur GKE.

Conditions requises

Pour exécuter des GPU sur des instances de VM Container-Optimized OS, vous devez répondre aux exigences suivantes :

  • Images x86 de Container-Optimized OS:seules les images x86 basées sur Container-Optimized OS sont compatibles avec l'exécution de GPU. Les images Container-Optimized OS basées sur ARM ne sont pas compatibles avec cette fonctionnalité.

  • Version de Container-Optimized OS : pour exécuter des GPU sur des instances de VM Container-Optimized OS, le jalon de version de Container-Optimized OS doit être un jalon LTS et le numéro du jalon doit être 85 ou plus.

  • Quota de GPU:vous devez disposer d'un quota de GPU Compute Engine dans la zone que vous avez choisie pour pouvoir créer des instances de VM Container-Optimized OS avec des GPU. Pour vous assurer que vous disposez d'un quota de GPU suffisant dans votre projet, consultez la section Quotas dans la console Google Cloud.

    Si vous avez besoin d'un quota de GPU supplémentaire, vous devez demander un quota de GPU dans la console Google Cloud. Si vous disposez d'un compte de facturation établi, ce quota est automatiquement attribué à votre projet après l'envoi de la demande de quota.

  • Pilotes de GPU NVIDIA : vous devez installer les pilotes de GPU NVIDIA sur vos instances de VM Container-Optimized OS. Cette section décrit comment installer les pilotes sur des instances de VM Container-Optimized OS.

Créer une VM

Les sections suivantes expliquent comment exécuter des GPU sur des VM Container-Optimized OS.

Tout d'abord, vous devez disposer d'une instance de VM Container-Optimized OS avec des GPU. La méthode utilisée pour créer une VM dépend du modèle de GPU sélectionné.

Vous pouvez également ajouter des GPU à des instances de VM Container-Optimized OS existantes.

Lorsque vous créez des VM, n'oubliez pas de choisir des images ou des familles d'images à partir du projet d'images cos-cloud.

Pour vérifier tous les GPU dirigés vers vos instances de VM Container-Optimized OS actuelles, exécutez la commande suivante :

gcloud compute instances describe INSTANCE_NAME \
    --project=PROJECT_ID \
    --zone ZONE \
    --format="value(guestAccelerators)"

Remplacez les éléments suivants :

Installer des pilotes d'appareils GPU NVIDIA

Une fois que vous avez créé une instance avec un ou plusieurs GPU, votre système requiert des pilotes de périphérique pour que vos applications puissent accéder au périphérique. Ce guide explique comment installer des pilotes propriétaires NVIDIA sur des instances de VM Container-Optimized OS.

Container-Optimized OS fournit un utilitaire intégré cos-extensions pour simplifier le processus d'installation du pilote NVIDIA. En exécutant l'utilitaire, les utilisateurs consentent à accepter le contrat de licence NVIDIA.

Identifier les versions du pilote de GPU

Par défaut, chaque version de l'image Container-Optimized OS possède une version compatible du pilote de GPU NVIDIA. Consultez les notes de version des principaux jalons LTS de Container-Optimized OS pour la version par défaut compatible.

Vous pouvez également vérifier toutes les versions de pilotes de GPU compatibles en exécutant la commande suivante sur votre instance de VM Container-Optimized OS :

sudo cos-extensions list

Compatibilité du GPU K80

Les pilotes NVIDIA R470 constituent la dernière famille de pilotes à prendre en charge les GPU K80. Si une version supérieure doit être installée dans une instance avec un GPU K80, cos-gpu-installer:v2 (à partir de la version 2.0.26) appelé par cos-extensions revient automatiquement à une version R470 disponible.

Identifier la version requise du CUDA Toolkit

Si vos applications utilisent CUDA, installez le kit d'outils CUDA de NVIDIA dans vos conteneurs. Chaque version de CUDA exige une version minimale du pilote de GPU ou une version ultérieure. Pour vérifier la version minimale du pilote de GPU requise pour votre version de CUDA, consultez les versions de pilote compatibles avec CUDA Toolkit. Assurez-vous que la version de Container-Optimized OS que vous utilisez dispose de la version du pilote de GPU appropriée pour la version de CUDA utilisée.

Installer le pilote

Vous pouvez installer des GPU à l'aide de commandes shell, de scripts de démarrage ou de cloud-init. Les trois méthodes utilisent la commande sudo cos-extensions install gpu pour installer le pilote de GPU par défaut pour votre version LTS de Container-Optimized OS.

Shell

Après vous être connecté à vos instances de VM Container-Optimized OS, vous pouvez exécuter la commande suivante manuellement pour installer les pilotes :

sudo cos-extensions install gpu

Scripts de démarrage

Vous pouvez également installer des pilotes de GPU avec des scripts de démarrage. Vous pouvez fournir le script de démarrage lorsque vous créez des instances de VM ou appliquer le script à des instances de VM en cours d'exécution, puis redémarrer les VM. Cela vous permet d'installer des pilotes sans vous connecter aux VM. Cette opération garantit également la configuration des pilotes de GPU à chaque redémarrage des VM.

Voici un exemple de script de démarrage permettant d'installer des pilotes :

#! /bin/bash

sudo cos-extensions install gpu

Cloud-init

cloud-init est semblable aux scripts de démarrage, mais plus puissant. L'exemple suivant montre comment installer le pilote de GPU à l'aide de cloud-init :

#cloud-config

runcmd:
  - cos-extensions install gpu

L'utilisation de cloud-init vous permet de spécifier les dépendances afin que vos applications GPU ne s'exécutent qu'après l'installation du pilote. Pour en savoir plus, consultez la section Exemple de bout en bout : Exécuter une application GPU sur Container-Optimized OS.

Pour en savoir plus sur l'utilisation de cloud-init sur des instances de VM Container-Optimized OS, consultez la page Créer et configurer des instances.

Dans certains cas, le pilote par défaut ne répond pas aux exigences minimales de pilote de votre kit CUDA ou de votre modèle de GPU. Pour installer une version spécifique du pilote de GPU, ajoutez l'indicateur de version. Remplacez DRIVER_VERSION par la version minimale du pilote de GPU requise pour votre modèle de GPU et compatible avec Container-Optimized OS. Container-Optimized OS n'est compatible qu'avec certains pilotes NVIDIA.

sudo cos-extensions install gpu -- -version=DRIVER_VERSION

Vérifier l'installation

Vous pouvez exécuter les commandes suivantes sur vos instances de VM Container-Optimized OS pour vérifier manuellement l'installation des pilotes de GPU. Le résultat de la commande affiche des informations sur les appareils GPU, telles que l'état des appareils et la version du pilote.

# Make the driver installation path executable by re-mounting it.
sudo mount --bind /var/lib/nvidia /var/lib/nvidia
sudo mount -o remount,exec /var/lib/nvidia
/var/lib/nvidia/bin/nvidia-smi

Configurer des conteneurs pour utiliser des GPU

Une fois les pilotes de GPU installés, vous pouvez configurer les conteneurs pour qu'ils consomment des GPU. L'exemple suivant vous montre comment exécuter une application CUDA dans un conteneur Docker qui utilise /dev/nvidia0:

docker run \
  --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
  --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \
  --device /dev/nvidia0:/dev/nvidia0 \
  --device /dev/nvidia-uvm:/dev/nvidia-uvm \
  --device /dev/nvidiactl:/dev/nvidiactl \
  gcr.io/google_containers/cuda-vector-add:v0.1

Vous pouvez exécuter vos conteneurs via cloud-init pour spécifier la dépendance entre l'installation du pilote et vos conteneurs. Pour en savoir plus, consultez la section De bout en bout: exécuter une application GPU sur Container-Optimized OS.

Exemple de bout en bout : Exécuter une application GPU sur Container-Optimized OS

L'exemple de bout en bout suivant montre comment utiliser cloud-init pour configurer des instances de VM Container-Optimized OS qui provisionnent un conteneur d'application GPU myapp:latest après l'installation du pilote de GPU :

#cloud-config

users:
- name: myuser
  uid: 2000

write_files:
  - path: /etc/systemd/system/install-gpu.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Install GPU drivers
      Wants=gcr-online.target docker.socket
      After=gcr-online.target docker.socket

      [Service]
      User=root
      Type=oneshot
      ExecStart=cos-extensions install gpu
      StandardOutput=journal+console
      StandardError=journal+console
  - path: /etc/systemd/system/myapp.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Run a myapp GPU application container
      Requires=install-gpu.service
      After=install-gpu.service

      [Service]
      User=root
      Type=oneshot
      RemainAfterExit=true
      ExecStart=/usr/bin/docker run --rm -u 2000 --name=myapp --device /dev/nvidia0:/dev/nvidia0 myapp:latest
      StandardOutput=journal+console
      StandardError=journal+console

runcmd:
  - systemctl daemon-reload
  - systemctl start install-gpu.service
  - systemctl start myapp.service

À propos des bibliothèques NVIDIA CUDA-X

CUDA® est la plate-forme informatique parallèle et le modèle de programmation NVIDIA pour les GPU. Pour utiliser des applications CUDA, les bibliothèques doivent être présentes dans l'image que vous utilisez. Vous pouvez effectuer l'une des opérations suivantes pour ajouter les bibliothèques NVIDIA CUDA-X :

  • Utilisez une image sur laquelle les bibliothèques NVIDIA CUDA-X sont préinstallées. Vous pouvez par exemple utiliser les conteneurs de deep learning de Google. Ces conteneurs préinstallent les principaux frameworks de science des données, les bibliothèques NVIDIA CUDA-X et les outils. L'image CUDA de NVIDIA contient également les bibliothèques NVIDIA CUDA-X seulement.

  • Créez et utilisez votre propre image. Dans ce cas, incluez /usr/local/cuda-XX.X/lib64, qui contient les bibliothèques NVIDIA CUDA-X, et /usr/local/nvidia/lib64, qui contient les pilotes d'appareils NVIDIA, dans la variable d'environnement LD_LIBRARY_PATH. Pour /usr/local/cuda-XX.X/lib64, le nom du répertoire dépend de la version de l'image que vous avez utilisée. Par exemple, les bibliothèques NVIDIA CUDA-X et les utilitaires de débogage dans les conteneurs Docker peuvent se trouver respectivement dans /usr/local/cuda-11.0/lib64 et /usr/local/nvidia/bin.

Sécurité

Comme les autres modules du noyau sur Container-Optimized OS, les pilotes de GPU sont signés de manière cryptographique et validés par des clés intégrées au noyau Container-Optimized OS. Contrairement à d'autres diffusions, Container-Optimized OS n'autorise pas les utilisateurs à inscrire leur clé MOK (Machine Owner Key, clé du propriétaire de la machine) ni à utiliser les clés pour signer des modules de noyau personnalisés. Cela permet de garantir l'intégrité du noyau Container-Optimized OS et de réduire la surface d'attaque.

Restrictions

Restrictions concernant la version de Container-Optimized OS

Seuls le jalon de version Container-Optimized OS LTS 85 et les jalons ultérieurs sont compatibles avec l'utilitaire cos-extensions mentionné dans la section Installer des pilotes d'appareils GPU NVIDIA. Pour les jalons antérieurs de Container-Optimized OS, utilisez l'outil Open Source cos-gpu-installer pour installer manuellement des pilotes de GPU.

Restrictions concernant les instances de VM

Les instances de VM avec GPU sont soumises à des restrictions spécifiques qui font qu'elles fonctionnent différemment des autres types d'instances. Pour en savoir plus, consultez la section Restrictions de la page "GPU sur Compute Engine".

Quota et disponibilité

Les GPU sont disponibles dans des régions et zones spécifiques. Lorsque vous demandez un quota de GPU, prenez en compte les régions dans lesquelles vous souhaitez exécuter vos instances de VM Container-Optimized OS.

Pour obtenir la liste complète des régions et des zones concernées, consultez la page GPU sur Compute Engine. Vous pouvez également consulter les GPU disponibles dans votre zone à l'aide de Google Cloud CLI.

gcloud compute accelerator-types list

Tarification

Pour en savoir plus sur les tarifs des GPU, consultez la page Tarifs de Compute Engine.

Assistance

Chaque version de Container-Optimized OS dispose au moins d'une version compatible du pilote de GPU NVIDIA. L'équipe Container-Optimized OS identifie les pilotes de GPU compatibles avec la version de Container-Optimized OS avant sa sortie afin de s'assurer qu'ils sont compatibles. De nouvelles versions des pilotes de GPU NVIDIA peuvent être disponibles occasionnellement. Certaines versions de pilotes de GPU ne sont pas éligibles pour Container-Optimized OS, et le calendrier de qualification n'est pas garanti.

Lorsque l'équipe Container-Optimized OS publie une nouvelle version dans un jalon de version, nous essayons de prendre en charge la dernière version du pilote de GPU sur la branche de pilote correspondante. Cela permet de corriger les CVE détectées dans les pilotes de GPU dès que possible.

Si un client de Container-Optimized OS identifie un problème lié aux pilotes de GPU NVIDIA, il doit contacter directement l'assistance NVIDIA. Si le problème n'est pas spécifique au pilote, les utilisateurs peuvent ouvrir une demande auprès du Cloud Customer Care.

Étapes suivantes