Cette page explique comment demander des accélérateurs matériels (GPU) dans vos charges de travail Autopilot Google Kubernetes Engine (GKE).
Autopilot fournit la classe de calcul Accelerator
spécialisée pour exécuter les pods GPU. Avec cette classe de calcul, GKE place les pods sur des nœuds GPU, ce qui permet à ces pods d'accéder à des fonctionnalités avancées sur la machine virtuelle (VM). Vous pouvez également exécuter des pods de GPU sans sélectionner la classe de calcul Accelerator
. Pour en savoir plus sur les avantages de la classe de calcul Accelerator
, consultez la section Quand utiliser des classes de calcul spécifiques.
Tarification
Autopilot vous facture différemment selon que vous avez demandé la classe de calcul Accelerator
pour exécuter vos charges de travail GPU.
Utiliser la classe de calcul Accelerator ? |
Tarification | Compatibilité avec les fonctionnalités de GKE |
---|---|---|
Le matériel Compute Engine qui exécute vos charges de travail GPU vous est facturé, ainsi qu'un supplément Autopilot pour la gestion et l'évolutivité automatiques des nœuds. Pour en savoir plus, consultez Tarifs du mode Autopilot. | Compatibles avec les éléments suivants :
|
|
Vous êtes facturé en fonction des demandes de ressources des pods GPU. Pour en savoir plus, consultez la section "Pods GPU" dans la section Tarifs de Kubernetes Engine. | Compatibles avec les éléments suivants :
|
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. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
Assurez-vous de disposer d'un cluster GKE Autopilot exécutant l'une des versions suivantes :
- Classe de calcul d'accélérateur : toute version de correctif de la version 1.28 à partir de 1.28.6-gke.1095000
- GPU NVIDIA H100 (80 Go) : 1.28.6-gke.1369000 ou version ultérieure et 1.29.1-gke.1575000 ou version ultérieure
- Plusieurs pods GPU par VM : 1.29.2-gke.1355000 ou version ultérieure
Aucune classe de calcul sélectionnée :
- GPU NVIDIA L4 : 1.28.3-gke.1203000 ou version ultérieure
- GPU NVIDIA A100 (80 Go) : 1.27 ou version ultérieure
- Tous les autres GPU : 1.24.2-gke.1800 ou version ultérieure
- Classe de calcul d'accélérateur : toute version de correctif de la version 1.28 à partir de 1.28.6-gke.1095000
Assurez-vous de disposer de quotas de GPU suffisants dans votre projet. Vous devez disposer d'un quota de GPU Compute Engine suffisant pour les modèles de GPU que vous souhaitez créer dans chaque région. En cas de besoin, demandez un quota de GPU.
Limites
- Les GPU à temps partagé et les GPU multi-instances sont disponibles avec Autopilot sur les versions 1.29.3-gke.1093000 et ultérieures de GKE.
- La disponibilité des GPU dépend de la région Google Cloud de votre cluster Autopilot et de votre quota de GPU. Pour trouver un modèle de GPU par région ou zone, consultez la page Disponibilité des GPU dans les régions et zones.
- Pour les GPU NVIDIA A100 (80 Go), un montant fixe vous est facturé pour les disques SSD locaux associés aux nœuds, que vos pods utilisent cette capacité ou non.
- Pour les versions de GKE antérieures à la version 1.29.2-gke.1355000, si vous demandez explicitement un nœud GPU existant spécifique pour votre pod, celui-ci doit consommer toutes les ressources GPU du nœud. Par exemple, si le nœud existant comporte huit GPU et que les conteneurs de votre pod demandent quatre GPU au total, le mode Autopilot va rejeter le pod.
- Pour GKE version 1.29.2-gke.1355000 ou ultérieure, si vous souhaitez que plusieurs pods GPU tiennent dans un seul nœud, la somme des demandes de GPU pour ces pods doit être inférieure ou égale au nombre de ressources GPU associées à ce nœud. Par exemple, un nœud avec un
gke-accelerator-count
de 4 peut accepter jusqu'à quatre pods qui demandent un GPU chacun.
Le placement de plusieurs pods sur un même nœud GPU est utile dans les situations suivantes :
- Vous avez des réservations de capacité pour de grands types de machines "Accélérateur" et vous exécutez des charges de travail à GPU unique. Dans ce cas, le déploiement d'un pod par nœud aurait pour effet de gaspiller les autres GPU sur cette machine.
- Vous avez des charges de travail GPU qui doivent s'exécuter sur le même hôte.
Dans ces situations, nous vous recommandons d'utiliser tous les GPU du nœud en vous assurant que la somme des demandes de ressources GPU de pod sur le nœud est égale au nombre de GPU associés au nœud.
Demander des GPU dans vos conteneurs
Pour demander des ressources GPU pour vos conteneurs, ajoutez les champs suivants à la spécification de pod. Selon les exigences de votre charge de travail, vous pouvez éventuellement omettre les champs cloud.google.com/compute-class: "Accelerator"
et cloud.google.com/gke-accelerator-count
.
apiVersion: v1
kind: Pod
metadata:
name: my-gpu-pod
spec:
nodeSelector:
cloud.google.com/compute-class: "Accelerator"
cloud.google.com/gke-accelerator: GPU_TYPE
cloud.google.com/gke-accelerator-count: GPU_COUNT
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-h100-80gb
: NVIDIA H100 (80 Go) (disponible uniquement avec la classe de calcul Accelerator)nvidia-a100-80gb
: NVIDIA A100 (80 Go)nvidia-tesla-a100
: NVIDIA A100 (40 Go)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
GPU_COUNT
: nombre total de GPU disponibles à associer au nœud. Doit être supérieur ou égal àGPU_QUANTITY
et une quantité de GPU compatible pour le type de GPU que vous avez sélectionné. Si vous omettez ce nodeSelector, Autopilot place un pod sur chaque nœud GPU.GPU_QUANTITY
: nombre de GPU à allouer au conteneur. Doit être inférieur ou égal àGPU_COUNT
et une quantité de GPU compatible pour le type de GPU que vous avez sélectionné.
Vous devez spécifier à la fois le type de GPU et la quantité de GPU dans la spécification de pod. Si vous omettez l'une de ces valeurs, Autopilot rejettera votre pod.
Lorsque vous déployez ce fichier manifeste, Autopilot installe automatiquement les pilotes NVIDIA par défaut pour la version de nœud GKE. Dans les versions 1.29.2-gke.1108000 et ultérieures, vous pouvez éventuellement choisir d'installer la dernière version du pilote pour cette version de GKE en ajoutant le sélecteur de nœud suivant à votre fichier manifeste :
spec:
nodeSelector:
cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"
Remplacez DRIVER_VERSION
par l'une des valeurs suivantes :
default
: pilote stable par défaut pour la version de GKE de votre nœud. Si vous omettez le nodeSelector dans votre fichier manifeste, il s'agit de l'option par défaut.latest
: dernière version de pilote disponible pour la version de GKE de votre nœud.
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é. Si vous exécutez plusieurs pods GPU sur un seul nœud, spécifiez le processeur et la mémoire. Sinon, ils utiliseront par défaut la capacité totale du nœud. Pour en savoir plus, consultez la page 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/compute-class: "Accelerator"
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
cpu: "54"
memory: "54Gi"
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
cpu: "18"
memory: "18Gi"
requests:
cpu: "18"
memory: "18Gi"
Ce fichier manifeste spécifie la valeur de limits
pour les ressources de processeur et de mémoire. Si vous omettez la valeur de limits
pour le processeur ou la mémoire dans GKE 1.29.2-gke.1060000 et versions ultérieures, GKE attribue à vos pods la classe QoS Burstable
et permet à vos pods de passer en utilisation intensive et d'exploiter les ressources inutilisées en s'appuyant sur la somme des demandes de ressources sur le nœud. Pour en savoir plus, consultez la page Configurer l'utilisation intensive des pods dans GKE.
Demandes de stockage éphémère pour les pods de GPU dans Autopilot
Vous pouvez également demander un stockage éphémère dans les pods nécessitant un stockage de courte durée.
La capacité maximale de stockage éphémère et le type de matériel de stockage utilisés dépendent du type et de la quantité de GPU demandés par le pod. Vous pouvez utiliser le disque SSD local pour le stockage éphémère si vous utilisez des GPU NVIDIA L4, la classe de calcul Accelerator
et exécutez la version de correctif GKE 1.28.6-gke.1369000 et ultérieure ou 1.29.1-gke.1575000 et versions ultérieures.
Pour utiliser le disque SSD local comme stockage éphémère, ajoutez le sélecteur de nœuds cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
au fichier manifeste de votre charge de travail. Consultez l'exemple de fichier manifeste dans la section Utiliser le stockage éphémère basé sur le disque SSD local avec des clusters Autopilot.
Les GPU NVIDIA H100 (80 Go) et NVIDIA A100 (80 Go) utilisent toujours des disques SSD locaux pour le stockage éphémère. Vous ne pouvez pas spécifier ce sélecteur de nœud pour ces GPU.
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
...
...
Vérifier la version du pilote de GPU
Dans les clusters Autopilot, GKE installe automatiquement les pilotes d'appareils NVIDIA sur tous les nœuds GPU. Pour trouver la version du pilote que GKE a installé dans votre cluster, exécutez la commande suivante :
kubectl logs --label=k8s-app=nvidia-gpu-device-plugin \
--container="nvidia-gpu-device-plugin" \
--tail=-1 \
--namespace=kube-system | grep Driver
Le résultat ressemble à ce qui suit :
I1206 18:37:08.251742 5851 metrics.go:144] nvml initialized successfully. Driver version: 535.104.12
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 :
- 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 afin d'assurer la mise à disposition du matériel.
- Autopilot ajoute des rejets de nœuds au nœud GPU et ajoute les 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 DaemonSet sur chaque nœud
Vous pouvez exécuter des DaemonSet sur chaque nœud, même sur les nœuds 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. Les possibilités suivantes s'offrent à vous :
nvidia-h100-80gb
: NVIDIA H100 (80 Go) (disponible uniquement avec la classe de calcul Accelerator)nvidia-a100-80gb
: NVIDIA A100 (80 Go)nvidia-tesla-a100
: NVIDIA A100 (40 Go)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
Cas d'utilisation des GPU dans Autopilot
Vous pouvez allouer des GPU à des conteneurs dans des pods Autopilot pour faciliter les charges de travail telles que :
- Inférence de 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 L4nvidia-l4 |
1, 2, 4, 8 |
NVIDIA T4nvidia-tesla-t4 |
1, 2, 4 |
NVIDIA A100 (40 Go)nvidia-tesla-a100 |
1, 2, 4, 8, 16 |
NVIDIA A100 (80 Go)nvidia-a100-80gb |
1, 2, 4, 8 |
NVIDIA H100 (80 Go)nvidia-h100-80gb |
8 |
Si vous demandez une quantité de GPU qui n'est pas acceptée pour ce type, Autopilot va rejeter votre pod.
Surveiller des 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 des charges de travail des 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.
Vous pouvez utiliser des tableaux de bord prédéfinis pour surveiller vos clusters avec des nœuds GPU. Pour en savoir plus, consultez la page Afficher les métriques d'observabilité. Pour obtenir des informations générales sur la surveillance de vos clusters et de leurs ressources, consultez la page Observabilité pour GKE.
Afficher les métriques d'utilisation des charges de travail
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 :
Accédez à la page Charges de travail dans la console Google Cloud.
Accéder à la page Charges de travail- 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.
Afficher les métriques du gestionnaire de GPU NVIDIA Data Center (DCGM)
Vous pouvez collecter et visualiser des métriques NVIDIA DCGM à l'aide de Google Cloud Managed Service pour Prometheus. Pour les clusters standards, vous devez installer les pilotes NVIDIA. Pour les clusters Autopilot, GKE installe les pilotes.
Pour obtenir des instructions sur le déploiement de DCGM et de l'exportateur DCGM de Prometheus, consultez la page NVIDIA Data Center GPU Manager (DCGM) dans la documentation sur l'observabilité de Google Cloud.
Étapes suivantes
- Apprenez-en plus sur la compatibilité des GPU dans GKE.
- Découvrez comment les classes de calcul Autopilot sont optimisées pour des cas d'utilisation spécialisés.