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

Sur Compute Engine, vous pouvez créer des instances de VM Container-Optimized OS dotées de GPU NVIDIA Tesla K80, P100, P4, V100 et T4. 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 offre aux utilisateurs une expérience fluide pour exécuter leurs charges de travail de GPU dans des conteneurs Docker sur des instances de VM Container-Optimized OS, afin qu'ils bénéficient d'autres fonctionnalités de Container-Optimized OS, telles que la sécurité et la fiabilité.

Exigences

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

  • 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 : pour pouvoir créer des instances de VM Container-Optimized OS avec des GPU, vous devez disposer d'un quota de GPU Compute Engine dans la zone souhaitée. Pour vérifier que vous disposez d'un quota de GPU suffisant dans votre projet, consultez la page Quotas de Google Cloud Console.

    En cas de besoin, vous devez demander un quota de GPU supplémentaire dans Cloud Console. 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.

Premiers pas : Exécuter des GPU sur Container-Optimized OS

Les sections suivantes décrivent comment exécuter des GPU sur des instances de VM Container-Optimized OS.

Tout d'abord, vous devez disposer d'une instance de VM Container-Optimized OS avec des GPU. Vous pouvez créer une instance de VM Container-Optimized OS avec un GPU ou ajouter des GPU sur une instance de VM Container-Optimized OS existante. Lorsque vous créez des instances de VM, veillez à sélectionner des images ou des familles d'images dans 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 l'élément suivant :

  • instance-name : nom de l'instance
  • project-id : ID de votre projet
  • zone : zone de l'instance.

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 la version 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. Le tableau suivant présente la version compatible par défaut des principaux jalons LTS de Container-Optimized OS.

Version d'OS Version du pilote par défaut
COS 85 LTS 450.51.06

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 :

cos-extensions list

Installer des pilotes à l'aide de commandes 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 :

cos-extensions install gpu

Installer des pilotes avec des 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 les 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

cos-extensions install gpu

Installer des pilotes à l'aide de 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.

Vérifier l'installation

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

# Make the driver installation path executable by remounting 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 Docker pour qu'ils utilisent des GPU

Une fois les pilotes de GPU installés, vous pouvez configurer des conteneurs Docker pour qu'ils utilisent des GPU. L'exemple suivant montre comment exécuter une application CUDA simple dans un conteneur Docker utilisant /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 Docker à l'aide de cloud-init pour spécifier la dépendance entre l'installation du pilote et vos conteneurs Docker. Pour en savoir plus, consultez la section Exemple 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 CUDA

Les pilotes d'appareils NVIDIA que vous installez sur vos instances de VM Container-Optimized OS incluent des bibliothèques CUDA.

L'exemple précédent montre également comment installer des bibliothèques CUDA et des utilitaires de débogage dans des conteneurs Docker sous /usr/local/nvidia/lib64 et /usr/local/nvidia/bin, respectivement.

Les applications CUDA exécutées dans des conteneurs Docker utilisant des GPU NVIDIA doivent détecter de manière dynamique les bibliothèques CUDA. Pour ce faire, vous devez inclure /usr/local/nvidia/lib64 dans la variable d'environnement LD_LIBRARY_PATH.

Vous devez utiliser des images de base CUDA Docker basées sur Ubuntu pour les applications CUDA exécutées sur Container-Optimized OS, où LD_LIBRARY_PATH est déjà défini correctement.

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 COS

Seuls le jalon de version COS 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 de version COS antérieurs, 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 l'outil de ligne de commande gcloud.

gcloud compute accelerator-types list

Tarifs

Pour obtenir plus d'informations sur les tarifs des GPU, consultez la grille tarifaire sur la page "Tarifs des GPU" de Google Cloud.

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 COS 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 requête auprès de l'assistance Cloud.

Étapes suivantes