Déployer des charges de travail GPU dans Autopilot

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Cette page explique comment demander des accélérateurs matériels (GPU) dans vos charges de travail Autopilot Google Kubernetes Engine (GKE).

Tarifs

Pour obtenir des informations sur les tarifs du matériel GPU disponible sur Autopilot, consultez la page Tarifs de GKE. Vous pouvez demander des GPU dans des pods Spot.

Les GPU des pods Autopilot standards sont éligibles aux remises sur engagement d'utilisation.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Kubernetes Engine.
  • Activer l'API Google Kubernetes Engine
  • Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI.

Limites

  • Vous ne pouvez pas utiliser les GPU à temps partagé et les GPU multi-instances avec Autopilot.
  • La disponibilité des GPU dépend de la région Google Cloud de votre cluster Autopilot et de votre quota de GPU.
  • Si vous demandez explicitement un nœud GPU existant spécifique pour votre pod, ce dernier doit consommer toutes les ressources GPU sur le nœud. Par exemple, si le nœud existant comporte huit GPU et que les conteneurs de votre pod demandent un total de quatre GPU, Autopilot rejette le pod.

Demander des GPU dans vos conteneurs

Pour demander des ressources GPU pour vos conteneurs, ajoutez les champs suivants à la spécification de pod :

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: GPU_TYPE
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: GPU_QUANTITY

Remplacez les éléments suivants :

  • GPU_TYPE : type de matériel GPU. Les valeurs autorisées sont les suivantes :
    • nvidia-tesla-t4
    • nvidia-tesla-a100
  • GPU_QUANTITY : nombre de GPU à allouer au conteneur. Doit être une quantité de GPU compatible avec le type de GPU sélectionné.

Vous devez spécifier à la fois le type de GPU et la quantité de GPU dans la spécification du pod. Si vous omettez l'une de ces valeurs, Autopilot rejettera votre pod.

Demandes de ressources mémoire et de processeur pour les pods de GPU dans Autopilot

Lorsque vous définissez vos pods GPU, vous devez également demander des ressources de processeur et de mémoire afin que vos conteneurs fonctionnent comme prévu. Autopilot applique des valeurs de processeur et de mémoire minimales, maximales, et par défaut en fonction du type de GPU et de sa quantité. Pour en savoir plus, consultez la section Demandes de ressources dans Autopilot.

La spécification de votre pod doit ressembler à l'exemple suivant, qui demande quatre GPU T4 :

apiVersion: v1
kind: Pod
metadata:
  name: t4-pod
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: "nvidia-tesla-t4"
  containers:
  - name: t4-container-1
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: 3
      requests:
        cpu: "54"
        memory: "54Gi"
  - name: t4-container-2
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: 1
      requests:
        cpu: "18"
        memory: "18Gi"

Vérifier l'allocation de GPU

Pour vérifier qu'une charge de travail GPU déployée possède les GPU demandés, exécutez la commande suivante :

kubectl describe node NODE_NAME

Remplacez NODE_NAME par le nom du nœud sur lequel le pod a été planifié.

Le résultat ressemble à ce qui suit :


apiVersion: v1
kind: Node
metadata:
...
  labels:
    ...
    cloud.google.com/gke-accelerator: nvidia-tesla-t4
    cloud.google.com/gke-accelerator-count: "1"
    cloud.google.com/machine-family: custom-48
    ...
...

Fonctionnement de l'allocation de GPU dans Autopilot

Une fois que vous avez demandé un type de GPU et une quantité pour les conteneurs d'un pod et déployé le pod, voici ce qui se produit :

  1. Si aucun nœud GPU ne peut être alloué, Autopilot provisionne un nouveau nœud GPU pour planifier le pod. Autopilot installe automatiquement les pilotes NVIDIA pour faciliter le matériel.
  2. Autopilot ajoute des rejets de nœuds au nœud GPU et aux tolérances correspondantes au pod. Cela empêche GKE de planifier d'autres pods sur le nœud GPU.

Autopilot place exactement un pod GPU sur chaque nœud GPU, ainsi que toutes les charges de travail gérées par GKE qui s'exécutent sur tous les nœuds et tous les DaemonSets que vous configurez afin de tolérer tous les rejets de nœuds.

Exécuter des objets DaemonSet sur chaque nœud

Vous voudrez peut-être exécuter des objets DaemonSet sur tous les nœuds, même avec des rejets appliqués. Par exemple, certains agents de journalisation et de surveillance doivent s'exécuter sur chaque nœud du cluster. Vous pouvez configurer ces objets DaemonSet pour ignorer les rejets de nœuds, afin que GKE les place sur chaque nœud.

Pour exécuter des objets DaemonSet sur chaque nœud de votre cluster, y compris vos nœuds GPU, ajoutez la tolérance suivante à votre spécification :

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: logging-agent
spec:
  tolerations:
  - key: ""
    operator: "Exists"
    effect: ""
  containers:
  - name: logging-agent-v1
    image: IMAGE_PATH

Pour exécuter des objets DaemonSet sur des nœuds GPU spécifiques de votre cluster, ajoutez les éléments suivants à votre spécification :

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: logging-agent
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: "GPU_TYPE"
  tolerations:
  - key: ""
    operator: "Exists"
    effect: ""
  containers:
  - name: logging-agent-v1
    image: IMAGE_PATH

Remplacez GPU_TYPE par le type de GPU dans vos nœuds cibles. Peut correspondre à nvidia-tesla-t4 ou nvidia-tesla-a100.

Cas d'utilisation de GPU dans Autopilot

Vous pouvez allouer des GPU à des conteneurs dans des pods Autopilot pour faciliter les charges de travail telles que :

  • Inférence en machine learning (ML)
  • Entraînement de machine learning
  • Rendu

Quantités de GPU compatibles

Lorsque vous demandez des GPU dans la spécification de pod, vous devez utiliser les quantités suivantes en fonction du type de GPU :

Quantités de GPU
NVIDIA T4
nvidia-tesla-t4
1, 2, 4
NVIDIA A100
nvidia-tesla-a100
1, 2, 4, 8, 16

Si vous demandez une quantité de GPU non compatible avec ce type, Autopilot rejette votre pod.

Surveiller les nœuds GPU

Si les métriques système sont activées dans votre cluster GKE, les métriques suivantes sont disponibles dans Cloud Monitoring pour surveiller les performances de votre charge de travail GPU:

  • 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.

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 de vos charges de travail, vous devez accéder au tableau de bord Charges de travail dans la console Google Cloud.

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

  1. Accédez à la page Charges de travail dans la console Google Cloud.

    Accéder à la page Charges de travail
  2. Sélectionner une charge de travail

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