GPU

Vous trouverez sur cette page la procédure à suivre pour utiliser les accélérateurs matériels GPU NVIDIA® dans les nœuds des clusters Google Kubernetes Engine (GKE).

Aperçu

GKE vous permet de créer des pools de nœuds équipés de GPU NVIDIA Tesla® K80, P100, P4, V100 ou 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.

Vous pouvez également utiliser des GPU avec des VM préemptives si vos charges de travail peuvent tolérer les perturbations fréquentes des nœuds. L'utilisation de VM préemptives réduit le coût de l'exécution des GPU. Pour en savoir plus, consultez la page GPU sur des instances préemptives.

Exigences

Les exigences des GPU sur GKE sont les suivantes :

Version de Kubernetes
Pour les pools de nœuds utilisant l'image de nœud Container-Optimized OS, les nœuds GPU sont disponibles à partir de la version 1.9 de GKE. Pour les pools de nœuds utilisant l'image de nœud Ubuntu, les nœuds GPU sont disponibles à partir de GKE version 1.11.3.
Quota de GPU

Pour créer des nœuds GPU, vous devez disposer d'un quota de GPU Compute Engine dans la zone souhaitée. Pour vérifier que votre projet possède un quota suffisant de GPU, consultez la page Quotas de la console Google Cloud Platform.

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

Pilotes de GPU NVIDIA

Vous devez installer manuellement des pilotes de GPU NVIDIA sur les nœuds. Cette procédure est présentée à la section Installer des pilotes d'appareils GPU NVIDIA sur cette même page.

Limites

Avant d'utiliser des GPU sur GKE, gardez à l'esprit les limites suivantes :

  • Vous ne pouvez pas ajouter de GPU à des pools de nœuds existants.
  • Les nœuds GPU ne peuvent pas être migrés à chaud lors d'événements de maintenance.

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 les clusters.

Pour obtenir la liste complète des régions et des zones concernées, consultez la page GPU sur Compute Engine.

Vous pouvez également afficher les GPU disponibles dans votre zone à l'aide de l'outil de ligne de commande gcloud.

gcloud

Pour afficher la liste de tous les types d'accélérateurs GPU acceptés dans chaque zone, exécutez la commande suivante :

gcloud compute accelerator-types list

Prix

Pour obtenir plus d'informations sur le prix des GPU, consultez la grille tarifaire sur la page "GPU" de GCP.

Quota de GPU

Votre quota de GPU est le nombre total de GPU exécutables dans votre projet GCP. Pour créer des clusters avec des GPU, votre projet doit posséder un quota suffisant de GPU.

Votre quota de GPU doit être au moins équivalent au nombre total de GPU que vous avez l'intention d'exécuter dans le cluster. Si vous activez l'autoscaling de cluster, vous devez demander un quota de GPU au moins équivalent au nombre maximal de nœuds du cluster, multiplié par le nombre de GPU par nœud.

Par exemple, si vous créez un cluster de trois nœuds exécutant chacun deux GPU, votre projet nécessite un quota minimal de six GPU.

Demander un quota de GPU

Pour demander un quota de GPU, accédez à la console GCP.

Console

Procédez comme suit :

  1. Accédez au menu "Quotas" de Cloud IAM dans la console GCP.

    Accéder au menu "Quotas"

  2. Dans le menu déroulant Metrics (Métriques), cliquez sur None (Aucune), puis saisissez "gpus" dans le champ de recherche.

  3. Dans les résultats de recherche, sélectionnez les GPU souhaités :

    Capture d'écran du menu déroulant Métriques affichant les métriques de GPU sélectionnées.

  4. Fermez le menu déroulant Metrics (Métriques).

Envoyer une demande de quota

Console

Procédez comme suit :

  1. Dans la liste des quotas de GPU, sélectionnez les quotas associés aux régions de votre choix (par exemple, us-central1).
  2. Cliquez sur Modifier les quotas. Un formulaire de demande s'ouvre sur le côté droit de la console GCP.
  3. Renseignez le champ Nouvelle limite de quota pour chaque demande de quota.
  4. Renseignez le champ Description de la demande en indiquant des informations sur votre demande.
  5. Cliquez sur OK.
  6. Cliquez sur Envoyer la requête.

Exécuter des GPU

Dans les sections suivantes, nous expliquons comment exécuter des GPU dans des clusters GKE.

Créer un pool de nœuds GPU avec autoscaling

Pour tirer le meilleur parti possible des GPU sur GKE, ainsi que de l'autoscaling de cluster, nous vous recommandons de créer des pools de nœuds GPU distincts dans les clusters.

Lorsque vous ajoutez un pool de nœuds GPU à un cluster existant qui exécute déjà un pool de nœuds non GPU, GKE rejette automatiquement les nœuds GPU en leur attribuant le rejet de nœud suivant :

  • Clé : nvidia.com/gpu
  • Effet : NoSchedule

En outre, par l'exécution du contrôleur d'admission ExtendedResourceToleration, GKE applique automatiquement les tolérances correspondantes aux pods qui demandent des GPU.

Ainsi, seuls les pods qui demandent des GPU sont planifiés sur les nœuds GPU, ce qui permet un autoscaling plus efficace : les nœuds GPU peuvent évoluer rapidement à la baisse si le nombre de pods demandant des GPU est insuffisant.

Vous devez créer un pool de nœuds GPU dans un cluster existant à l'aide de la console GCP ou de l'outil de ligne de commande gcloud.

gcloud

Pour créer un pool de nœuds comportant des GPU, exécutez la commande suivante :

gcloud container node-pools create [POOL_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] --zone [COMPUTE_ZONE] \
--cluster [CLUSTER_NAME] [--num-nodes 3 --min-nodes 0 --max-nodes 5 \
--enable-autoscaling]

où :

  • [POOL_NAME] est le nom que vous avez choisi pour le pool de nœuds.
  • [GPU_TYPE] correspond au type de GPU : nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 ou nvidia-tesla-t4.
  • [AMOUNT] est le nombre de GPU à rattacher aux nœuds du pool de nœuds.
  • [COMPUTE_ZONE] est la zone de calcul dans laquelle créer le pool de nœuds (par exemple, us-central1-c). Le cluster doit déjà s'exécuter dans la zone spécifiée.
  • [CLUSTER_NAME] est le nom du cluster dans lequel créer le pool de nœuds.
  • --num-nodes spécifie le nombre initial de nœuds à créer.
  • --min-nodes spécifie le nombre minimal de nœuds à exécuter à un moment donné.
  • --max-nodes spécifie le nombre maximal de nœuds pouvant être exécutés.
  • --enable-autoscaling permet d'activer l'autoscaling du pool de nœuds selon l'évolution de la charge de travail.

Par exemple, la commande suivante crée dans le cluster p100-cluster un pool de nœuds p100 doté de la fonctionnalité d'autoscaling et de deux GPU P100 :

gcloud container node-pools create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c --cluster p100-cluster \
--num-nodes 3 --min-nodes 0 --max-nodes 5 --enable-autoscaling

Console

  1. Accédez au menu "Kubernetes Engine" dans la console GCP.

    Accéder au menu "Kubernetes Engine"

  2. Sélectionnez le cluster souhaité.

  3. Cliquez sur Modifier.

  4. Dans Pools de nœuds, cliquez sur Ajouter un pool de nœuds.

  5. (Facultatif) Dans le menu déroulant Autoscaling, sélectionnez Activé.

  6. Configurez le pool de nœuds comme vous le souhaitez. Ensuite, dans Type de machine, cliquez sur Personnaliser.

  7. Dans le menu déroulant Nombre de GPU, sélectionnez le nombre de GPU à exécuter par nœud.

  8. Dans le menu déroulant Type de GPU, sélectionnez le type de GPU souhaité.

  9. Acceptez l'avertissement en cochant la case Je comprends les restrictions.

  10. Cliquez sur Save.

Créer un cluster zonal comportant des GPU

Pour créer un cluster zonal exécutant des GPU, vous devez vous servir de la console GCP ou de l'outil de ligne de commande gcloud.

gcloud

Pour créer un cluster zonal comportant des GPU qui fonctionnent dans son pool de nœuds par défaut, exécutez la commande suivante :

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--zone [COMPUTE_ZONE]

où :

  • [CLUSTER_NAME] est le nom que vous avez choisi pour le cluster.
  • [GPU_TYPE] correspond au type de GPU : nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 ou nvidia-tesla-t4.
  • [AMOUNT] correspond au nombre de GPU à exécuter dans le pool de nœuds par défaut.
  • [COMPUTE_ZONE] est la zone de calcul du cluster, telle que us-central1-c.

Par exemple, la commande suivante crée un cluster, p100, avec trois nœuds (par défaut en l'absence de --num-nodes) et deux GPU P100 par nœud :

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c

Console

  1. Accédez au menu "Kubernetes Engine" dans la console GCP.

    Accéder au menu Google Kubernetes Engine

  2. Cliquez sur Créer un cluster.

  3. Sélectionnez le modèle de cluster Calcul accéléré par GPU.

  4. Configurez le cluster selon vos besoins. Personnalisez ensuite le pool de nœuds GPU ou ajoutez des pools de nœuds GPU.

  5. Acceptez l'avertissement en cochant la case Je comprends les restrictions.

  6. Cliquez sur Créer.

Créer un cluster régional comportant des GPU

Par défaut, les clusters régionaux créent des nœuds dans trois zones d'une région. Cependant, aucune région GCP ne comporte de GPU dans les trois zones. Lorsque vous créez un cluster régional exécutant des GPU, vous devez spécifier manuellement les zones dans lesquelles ceux-ci sont disponibles. Pour identifier les zones qui possèdent des GPU, consultez la section Disponibilité.

Pour créer un cluster de GPU régional, vous devez vous servir de l'outil de ligne de commande gcloud.

gcloud

Pour créer un cluster régional comportant des GPU, exécutez la commande suivante :

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--region [REGION] --node-locations [ZONE],[ZONE]

où :

  • [CLUSTER_NAME] est le nom que vous avez choisi pour le cluster.
  • [GPU_TYPE] correspond au type de GPU : nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 ou nvidia-tesla-t4.
  • [AMOUNT] correspond au nombre de GPU à exécuter par nœud.
  • [REGION] est la région du cluster, telle que us-central1.
  • [ZONE] est une des zones de calcul de cette région, telle que us-central1-c. La ou les zones doivent être associées aux types de GPU que vous spécifiez.

Par exemple, la commande suivante crée un cluster, p100, avec trois nœuds (par défaut en l'absence de --num-nodes) et deux GPU P100 par nœud, dans deux zones de us-central1 :

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--region us-central1 \ --node-locations us-central1-a,us-central1-c

Console

  1. Accédez au menu "Kubernetes Engine" dans la console GCP.

    Accéder au menu Google Kubernetes Engine

  2. Cliquez sur Créer un cluster.

  3. Sélectionnez le modèle de cluster Calcul accéléré par GPU.

  4. Dans Type d'emplacement, sélectionnez Régional. Dans Région, sélectionnez la région souhaitée.

  5. Configurez le cluster selon vos besoins. Personnalisez ensuite le pool de nœuds GPU ou ajoutez des pools de nœuds GPU.

  6. Acceptez l'avertissement en cochant la case Je comprends les restrictions.

  7. Cliquez sur Créer.

Installer des pilotes d'appareils GPU NVIDIA

Après avoir ajouté des nœuds GPU au cluster, vous devez installer des pilotes d'appareils NVIDIA sur ces nœuds. Google fournit une interface DaemonSet qui installe automatiquement les pilotes.

Vous trouverez ci-dessous les instructions d'installation correspondant aux nœuds Container-Optimized OS (COS) ou aux nœuds Ubuntu.

COS

Pour déployer l'interface DaemonSet d'installation, exécutez la commande suivante :

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/stable/nvidia-driver-installer/cos/daemonset-preloaded.yaml

L'installation prend plusieurs minutes. Une fois installé, le plug-in d'appareils GPU NVIDIA indique la capacité des GPU NVIDIA via les API Kubernetes.

Le tableau suivant répertorie la version de GKE à partir de laquelle chaque version du pilote Nvidia est compatible :

Version de GKE Pilote Nvidia
1.11.5 et plus 410.79
1.10.5-gke.4 et plus 396.46
1.10.2-gke.3 et plus 390.46

Ubuntu

Notez que seules les versions 1.11.3 et ultérieures des nœuds Ubuntu sont compatibles avec les GPU.

Pour déployer l'interface DaemonSet d'installation, exécutez la commande suivante :

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml

L'installation prend quelques secondes. Une fois installé, le plug-in d'appareils GPU NVIDIA indique la capacité des GPU NVIDIA via les API Kubernetes.

Le tableau suivant répertorie la version de GKE à partir de laquelle chaque version du pilote Nvidia est compatible :

Version de GKE Pilote Nvidia
1.11.8-gke.4 et plus/1.12.6-gke.6 et plus 410.10
Autres versions 1.11/1.12 384.111

Configurer des pods pour qu'ils utilisent des GPU

Vous devez appliquer une limite de ressources pour configurer des pods afin qu'ils utilisent des GPU. Vous devez définir une limite de ressources dans une spécification de pod à l'aide de la paire clé/valeur suivante :

  • Clé : nvidia/gpu
  • Valeur : nombre de GPU à utiliser

Vous trouverez ci-dessous un exemple de spécification de pod utilisant des GPU :

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    resources:
      limits:
       nvidia.com/gpu: 2

Utiliser plusieurs types de GPU

Si vous souhaitez utiliser plusieurs types d'accélérateurs GPU par cluster, vous devez créer plusieurs pools de nœuds, chacun avec son propre type d'accélérateur. GKE associe un sélecteur unique aux nœuds GPU pour faciliter le placement des charges de travail GPU sur les nœuds ayant des types de GPU spécifiques :

  • Clé : cloud.google.com/gke-accelerator
  • Valeur : nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 ou nvidia-tesla-t4

Vous pouvez cibler certains types de GPU en ajoutant le sélecteur de nœud suivant à la spécification de pod de la charge de travail. Exemple :

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    resources:
      limits:
       nvidia.com/gpu: 2
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-tesla-k80 # or nvidia-tesla-p100 or nvidia-tesla-p4 or nvidia-tesla-v100 or nvidia-tesla-t4

À propos des bibliothèques CUDA

CUDA® est la plate-forme informatique parallèle et le modèle de programmation NVIDIA pour les GPU. Les pilotes d'appareils NVIDIA que vous installez dans le cluster incluent des bibliothèques CUDA.

Les bibliothèques CUDA et les utilitaires de débogage sont disponibles dans le conteneur sous /usr/local/nvidia/lib64 et /usr/local/nvidia/bin, respectivement.

Les applications CUDA exécutées dans des pods utilisant des GPU NVIDIA doivent détecter de manière dynamique les bibliothèques CUDA. Pour cela, /usr/local/nvidia/lib64 doit être inclus 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 dans GKE, où LD_LIBRARY_PATH est déjà défini correctement. La dernière version compatible de CUDA est 10.0 sur COS (1.11.5 et plus) et Ubuntu (1.11.8-gke.4 et plus, 1.12.6-gke.6 et plus).

Surveiller des nœuds GPU

GKE expose les métriques Stackdriver Monitoring suivantes pour les conteneurs utilisant des GPU. Vous pouvez surveiller les performances des charges de travail des GPU à l'aide de ces métriques :

  • Cycle d'utilisation (container/accelerator/duty_cycle) : durée exprimée en pourcentage de la dernière période d'échantillonnage (10 secondes) pendant laquelle l'accélérateur a été en mode de traitement actif. Entre 1 et 100.
  • Utilisation de la mémoire (container/accelerator/memory_used) : quantité de mémoire d'accélérateur allouée, en octets.
  • Capacité de mémoire (container/accelerator/memory_total) : mémoire totale de l'accélérateur, en octets.

Ces métriques sont disponibles dans Stackdriver.

Pour en savoir plus sur la surveillance des clusters et de leurs ressources, consultez la page Surveillance.

Afficher les métriques d'utilisation

Pour afficher les métriques d'utilisation des GPU des charges de travail, vous devez accéder au tableau de bord Charges de travail de la console GCP.

Console

Pour afficher l'utilisation des GPU des charges de travail, procédez comme suit :

  1. Accédez au menu Charges de travail dans la console GCP.

    Accéder au menu "Kubernetes Engine"

  2. Sélectionnez la charge de travail souhaitée.

Le tableau de bord "Charges de travail" affiche les graphiques sur l'utilisation et la capacité de la mémoire des GPU, ainsi que leur cycle de travail.

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Kubernetes Engine