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 Container-Optimized OS auquel sont associés des GPU. Vous ne pouvez en utiliser que deux familles de machines lors de l'exécution de GPU sur Compute Engine: optimisées pour les accélérateurs et N1 à usage général.

  • Pour les types de machines optimisés pour les accélérateurs, chaque type de machine possède une de GPU NVIDIA associé.

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

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

Google Cloud vous offre une expérience fluide pour exécuter vos charges de travail de GPU dans des conteneurs sur des instances de VM Container-Optimized OS, afin que vous puissiez 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.

Exigences

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 Container-Optimized OS basées sur x86 sont compatibles avec l'exécution de GPU. Les images Container-Optimized OS basées sur l'architecture ARM ne sont 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 choisie avant de pouvoir créer une VM Container-Optimized OS Compute Engine avec GPU. Pour vous assurer que vous disposez d'un quota de GPU suffisant dans votre projet, consultez la page Quotas dans la console Google Cloud.

    En cas de besoin, vous devez demander un quota de GPU supplémentaire 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 décrivent 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 le projet d'image 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 des pilotes de GPU

Chaque version de l'image Container-Optimized OS contient une liste des versions de pilotes de GPU NVIDIA compatibles pour chaque type de GPU, ainsi qu'un pilote par défaut pour chaque type. Pour obtenir la liste complète des versions compatibles, consultez les notes de version les principaux jalons LTS de Container-Optimized OS.

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

sudo cos-extensions list

Identifier la version requise du CUDA Toolkit

Si vos applications utilisent CUDA, installer le kit 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 "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 vers les 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

Cloud-init vous permet de spécifier les dépendances afin que votre GPU applications ne s’exécuteront 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 inclus dans Container-Optimized OS ne répond pas aux exigences minimales de pilote de votre kit CUDA ou de votre modèle de GPU. Consultez la page Versions de pilote NVIDIA requises pour connaître les exigences de version pour des types de GPU spécifiques.

Pour installer une version spécifique du pilote de GPU, exécutez la commande suivante:

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

Remplacez DRIVER_VERSION par l'une des options suivantes :

  • default: installe le pilote par défaut désigné par version de Container-Optimized OS. Cette version reçoit des corrections de bugs et mises à jour de sécurité.
  • latest : installe le dernier pilote disponible dans la version de Container-Optimized OS. Sachez que cela peut introduire modifications de compatibilité dues à de potentielles mises à jour de versions majeures dans COS versions.
  • Version complète : utilisez cette option pour épingler une version spécifique pour les charges de travail sensibles aux modifications de pilotes. Par exemple, spécifiez la version 535.183.01.
  • NVIDIA driver branch (Branche du pilote NVIDIA) : installe le pilote stable le plus récent dans un Branche NVIDIA pour rester informé des mises à jour de sécurité et corrections de bugs qui y sont associées ou une autre branche. Par exemple, spécifiez la branche R535. Cette option est disponible à partir du de cos-gpu-installer:v2.2.1.

Pour afficher les versions disponibles pour chacune de ces options, exécutez la commande pour Identifiez les versions des pilotes de GPU.

Vérifiez 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 qu'ils utilisent des GPU

Une fois les pilotes de GPU installés, vous pouvez configurer les conteneurs pour utilisent des GPU. L'exemple suivant vous montre comment exécuter un 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. consultez les De bout en bout: exécuter une application GPU sur Container-Optimized OS pour en savoir plus.

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 data science, 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

Tarifs

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 la chronologie de qualification n'est pas garantie.

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.

Étape suivante