Cette page explique comment planifier l'utilisation des unités de traitement Tensor (TPU) dans Google Kubernetes Engine (GKE) afin de réduire le risque de configuration incorrecte des TPU, d'erreurs de non-disponibilité ou d'interruptions dues à un dépassement de quota.
Avant d'utiliser des TPU dans GKE, assurez-vous de bien connaître les définitions et la terminologie des TPU dans GKE.
Planifier la configuration TPU
Pour utiliser des TPU dans des clusters GKE, vous devez planifier leur configuration. Nous vous recommandons d'effectuer les opérations suivantes:
- Choisissez un mode de fonctionnement GKE: exécutez vos charges de travail sur des TPU dans un cluster GKE Autopilot ou GKE Standard. Nous vous recommandons d'utiliser un cluster GKE Autopilot pour une expérience Kubernetes entièrement gérée.
- Choisissez la version de TPU: les différents types de TPU présentent des caractéristiques différentes, telles que les ratios prix-performances, le débit d'entraînement et la latence de diffusion. Les types de TPU affectent les capacités de processeur et de mémoire disponibles.
- Vérifiez la disponibilité des TPU: les TPU sont disponibles dans des régions Google Cloud spécifiques. Pour utiliser un type de TPU dans votre charge de travail GKE, votre cluster doit se trouver dans une région compatible avec ce type.
- Choisissez la topologie de TPU: disposition physique des TPU dans une tranche de TPU. Sélectionnez une topologie qui correspond aux exigences de parallélisme de votre modèle.
Nous vous recommandons d'utiliser les tableaux de référence de cette page pour identifier si vos pools de nœuds sont des nœuds de tranche de TPU à hôte unique ou multi-hôte.
Choisir un mode de fonctionnement GKE
Vous pouvez utiliser des TPU dans les modes de fonctionnement GKE disponibles pour les clusters:
- Mode Autopilot (recommandé) : GKE gère l'infrastructure sous-jacente (configuration des nœuds, autoscaling, mises à niveau automatiques, configurations de sécurité de référence et configuration de mise en réseau de référence, entre autres). Dans Autopilot, vous choisissez un type et une topologie de TPU, puis vous les spécifiez dans votre fichier manifeste Kubernetes. GKE gère le provisionnement des nœuds avec des TPU et la planification de vos charges de travail.
- Mode standard : vous gérez l'infrastructure sous-jacente, y compris la configuration des nœuds individuels.
Pour choisir le mode de fonctionnement GKE le mieux adapté à vos charges de travail, consultez la section Choisir un mode de fonctionnement GKE.
Choisir la version de TPU
Les VM d'une tranche de TPU présentent les caractéristiques techniques suivantes:
Autopilot
Version du TPU | Type de machine | Nombre de processeurs virtuels | Mémoire (Gio) | Nombre de nœuds NUMA | Nombre maximal de puces TPU dans un nœud de tranche TPU |
---|---|---|---|---|---|
TPU v5p |
tpu-v5p-slice |
208 | 448 | 2 | 6 144 |
TPU v5e |
tpu-v5-lite-podslice |
Entre 24 et 224 | Entre 48 et 384 | 1 | 256 |
TPU v5e (hôte unique uniquement) |
tpu-v5-lite-device |
Entre 24 et 224 | Entre 48 et 384 | Entre 1 et 2 | 8 |
TPU v4 |
tpu-v4-podslice |
240 | 407 | 2 | 4 096 |
Standard
Version du TPU | Type de machine | Nombre de processeurs virtuels | Mémoire (Gio) | Nombre de nœuds NUMA | Probabilité de préemption |
---|---|---|---|---|---|
TPU v5p |
ct5p-hightpu-4t |
208 | 448 | 2 | |
TPU v5e |
ct5l-hightpu-1t |
24 | 48 | 1 | Plus élevé |
TPU v5e |
ct5l-hightpu-4t |
112 | 192 | 1 | Moyenne |
TPU v5e |
ct5l-hightpu-8t |
224 | 384 | 2 | Plus faible |
TPU v5e |
ct5lp-hightpu-1t |
24 | 48 | 1 | Plus élevé |
TPU v5e |
ct5lp-hightpu-4t |
112 | 192 | 1 | Moyenne |
TPU v5e |
ct5lp-hightpu-8t |
224 | 384 | 1 | Faible |
TPU v4 |
ct4p-hightpu-4t |
240 | 407 | 2 |
Consultez les spécifications et les tarifs des TPU dans la documentation sur les tarifs de Cloud TPU pour choisir la configuration de TPU à utiliser.
Limites
Tenez compte des limites suivantes lorsque vous choisissez le TPU à utiliser:
- La répartition des coûts et la mesure de l'utilisation de GKE n'incluent aucune donnée sur l'utilisation ou les coûts des TPU v4 réservés.
- Les TPU v5p et v5e ne sont pas compatibles avec le streaming de flux d'images/Riptide dans us-east5.
- L'autoscaling TPU v5p est compatible avec les clusters GKE dont les plans de contrôle exécutent au moins la version 1.29.2-gke.1035000 ou 1.28.7-gke.1020000.
- Pour les réservations de capacité, utilisez une réservation spécifique.
Valider la disponibilité des TPU dans GKE
Les TPU sont disponibles dans des régions Google Cloud spécifiques. Pour utiliser un type de TPU dans votre cluster GKE, celui-ci doit se trouver dans une région compatible avec ce type.
Autopilot
Consultez la section Régions et zones TPU dans la documentation Cloud TPU.
Standard
Le tableau suivant indique la disponibilité des TPU pour chaque version et type de machine:
Version du TPU | Type de machine commençant par | Version GKE minimum | Disponibilité | Zone |
---|---|---|---|---|
TPU v5e | ct5l- |
1.27.2-gke.2100 | Disponibilité générale | europe-west4-b |
us-central1-a |
||||
TPU v5e | ct5lp- |
1.27.2-gke.2100 | Disponibilité générale | europe-west4-a 1 |
us-central1-a 1 |
||||
us-east1-c |
||||
us-east5-b 1 |
||||
us-west1-c |
||||
us-west4-a |
||||
us-west4-b 1 |
||||
TPU v5p | ct5p- |
1.28.3-gke.1024000 | Disponibilité générale | us-east1-d |
us-east5-a |
||||
us-east5-c |
||||
TPU v4 | ct4p- |
1.26.1-gke.1500 | Disponibilité générale | us-central2-b |
-
Vous pouvez créer un pool de nœuds TPU v5e à hôte unique avec un type de machine commençant par
ct5lp-
, mais pas parct5l-
dans certaines zones (europe-west4-a
,us-east5-b
etus-west4-b
). Vous pouvez utiliserct5lp-hightpu-4t
avec une topologie d'au moins2x4
ou plus dans ces zones. Pour créer un TPU v5e à hôte unique dans la régionus-west4
, choisissez la zoneus-west4-a
et utilisez des types de machines commençant parct5lp-
, commect5lp-hightpu-1t
. Pour créer un TPU v5e à hôte unique dans les autres régions listées dans le tableau précédent, utilisez des types de machines commençant parct5l-
(commect5l-hightpu-1t
,ct5l-hightpu-4t
ouct5l-hightpu-8t
). Notez que les types de machines commençant parct5l-
nécessitent un quota différent de celui des types de machines commençant parct5lp-
. ↩
Choisir une topologie
Après avoir choisi une version de TPU, sélectionnez une topologie compatible avec ce type de TPU. En fonction du type de TPU, la topologie est bidimensionnelle ou tridimensionnelle. Les exigences de parallélisme de votre modèle vous aident à choisir une topologie. Vous pouvez identifier le nombre de puces TPU dans la tranche en calculant le produit de chaque taille dans la topologie. Exemple :
2x2x2
est une tranche de TPU multi-hôte v4 à huit puces2x2
est une tranche de TPU v5e à hôte unique à quatre puces
Si une topologie spécifique est compatible avec les nœuds de tranche TPU à hôte unique et multi-hôte, le type d'hôte est déterminé par le nombre de puces TPU demandées par votre charge de travail.
Par exemple, les TPU v5e (tpu-v5-lite-podslice
) acceptent la topologie 2x4
en tant que TPU unique et multi-hôte. Plusieurs situations sont possibles :
- Si vous demandez quatre puces dans votre charge de travail, vous obtenez un nœud multi-hôte avec quatre puces TPU.
- Si vous demandez huit puces dans votre charge de travail, vous obtenez un nœud à hôte unique avec huit puces TPU.
Utilisez le tableau suivant pour choisir le type de machine et la topologie TPU pour votre cas d'utilisation:
- Pour l'entraînement ou l'inférence de modèles à petite échelle, utilisez des TPU v4 ou des TPU v5e avec des pools de nœuds de tranche de pod TPU à hôte unique.
Pour l'entraînement ou l'inférence de modèles à grande échelle, utilisez des TPU v4 ou des TPU v5e avec des pools de nœuds de tranche de pod TPU à hôtes multiples.
Autopilot
Version du TPU | Type de machine | Topologie | Nombre de puces TPU dans une tranche | Nombre de nœuds | Type de pool de nœuds |
---|---|---|---|---|---|
TPU v5p | tpu-v5p-slice |
2x2x1 | 4 | 1 | Un seul hôte |
2x2x2 | 8 | 2 | Hôte multiple | ||
2x2x4 | 16 | 4 | Hôte multiple | ||
2x4x4 | 32 | 8 | Hôte multiple | ||
4x4x4 | 64 | 16 | Hôte multiple | ||
{A}x{B}x{C} | A*B*C | (A*B*C/4)1 | Hôte multiple | ||
TPU v5e | tpu-v5-lite-podslice 2 |
1x1 | 1 | 1 | Un seul hôte |
2x2 | 4 | 1 | |||
2x4 | 8 | 1 | |||
2x4 | 2 | 1 | Hôte multiple | ||
4x4 | 16 | 4 | |||
4x8 | 32 | 8 | |||
8x8 | 64 | 16 | |||
8x16 | 128 | 32 | |||
16x16 | 256 | 64 | |||
TPU v5e (hôte unique uniquement) | tpu-v5-lite-device |
1x1 | 1 | 1 | Un seul hôte |
2x2 | 4 | 1 | |||
2x4 | 8 | 1 | |||
TPU v4 | tpu-v4-podslice 2 |
2x2x1 | 4 | 1 | Un seul hôte |
2x2x2 | 8 | 2 | Hôte multiple | ||
2x2x4 | 16 | 4 | Hôte multiple | ||
2x4x4 | 32 | 8 | Hôte multiple | ||
4x4x4 | 64 | 16 | Hôte multiple | ||
{A}x{B}x{C} | A*B*C | (A*B*C/4)1 | Hôte multiple |
-
Calcul effectué en divisant le produit de topologie par quatre. ↩
Les topologies personnalisées pour plus de 64 puces sont acceptées. Les conditions suivantes s'appliquent :
- Pour plus de 64 puces,
{A}
,{B}
et{C}
doivent être des multiples de 4. - La topologie la plus grande est
16x16x24
- Les valeurs doivent être
{A}
≤{B}
≤{C}
, par exemple8x12x16
.
- Pour plus de 64 puces,
-
Les topologies personnalisées ne sont pas acceptées.
Après avoir choisi un type et une topologie de TPU, spécifiez-les dans le fichier manifeste de votre charge de travail. Pour obtenir des instructions, consultez la page Déployer des charges de travail TPU sur GKE Autopilot.
Standard
Version du TPU | Type de machine | Topologie | Nombre de puces TPU | Nombre de VM | Type de pool de nœuds |
---|---|---|---|---|---|
TPU v5p | ct5p-hightpu-4t |
2x2x1 | 4 | 1 | Un seul hôte |
2x2x2 | 8 | 2 | Hôte multiple | ||
2x2x4 | 16 | 4 | Hôte multiple | ||
2x4x4 | 32 | 8 | Hôte multiple | ||
{A}x{B}x{C} | A*B*C | (A*B*C/4)1 | Hôte multiple | ||
TPU v5e | ct5l-hightpu-1t |
1x1 | 1 | 1 | Un seul hôte |
ct5l-hightpu-4t |
2x2 | 4 | 1 | Un seul hôte | |
ct5l-hightpu-8t |
2x4 | 8 | 1 | Un seul hôte | |
ct5lp-hightpu-1t |
1x1 | 1 | 1 | Un seul hôte | |
ct5lp-hightpu-4t |
2x2 | 4 | 1 | Un seul hôte | |
ct5lp-hightpu-8t |
2x4 | 8 | 1 | Un seul hôte | |
ct5lp-hightpu-4t |
2x4 | 8 | 2 | Hôte multiple | |
4x4 | 16 | 4 | Hôte multiple | ||
4x8 | 32 | 8 | Hôte multiple | ||
8x8 | 64 | 16 | Hôte multiple | ||
8x16 | 128 | 32 | Hôte multiple | ||
16x16 | 256 | 64 | Hôte multiple | ||
TPU v4 | ct4p-hightpu-4t |
2x2x1 | 4 | 1 | Un seul hôte |
2x2x2 | 8 | 2 | Hôte multiple | ||
2x2x4 | 16 | 4 | Hôte multiple | ||
2x4x4 | 32 | 8 | Hôte multiple | ||
{A}x{B}x{C} | A*B*C | (A*B*C/4)1 | Hôte multiple |
-
Calcul effectué en divisant le produit de topologie par quatre. ↩
Configurations avancées
Les sections suivantes décrivent les bonnes pratiques de planification pour les configurations avancées de TPU.
Réservation TPU
Les réservations TPU sont disponibles lors de la souscription d'un engagement. Toute réservation TPU peut être utilisée avec GKE.
Lorsque vous créez un pool de nœuds tranche TPU, utilisez les options --reservation
et --reservation-affinity=specific
pour consommer une instance TPU réservée.
Autoscaling des TPU dans GKE
GKE est compatible avec les TPU (Tensor Processing Units) pour accélérer les charges de travail de machine learning. Le pool de nœuds de tranche TPU à hôte unique et le pool de nœuds de tranche TPU multi-hôte sont tous deux compatibles avec l'autoscaling et le provisionnement automatique.
Avec l'option --enable-autoprovisioning
sur un cluster GKE, GKE crée ou supprime des pools de nœuds de tranche TPU à hôte unique ou multi-hôte avec une version et une topologie de TPU qui répondent aux exigences des charges de travail en attente.
Lorsque vous utilisez --enable-autoscaling
, GKE procède au scaling du pool de nœuds en fonction de son type, comme suit :
Pool de nœuds de tranche TPU à hôte unique : GKE ajoute ou supprime des nœuds TPU dans le pool de nœuds existant. Le pool de nœuds peut contenir un nombre de nœuds TPU compris entre zéro et la taille maximale du pool de nœuds, tel que déterminé par les options --max-nodes et --total-max-nodes. Lorsque le pool de nœuds effectue un scaling, tous les nœuds TPU du pool de nœuds ont le même type de machine et la même topologie. Pour en savoir plus sur la création d'un pool de nœuds de tranche TPU à hôte unique, consultez la section Créer un pool de nœuds.
Pool de nœuds de tranche TPU multi-hôte : GKE effectue un scaling du pool de nœuds de façon atomique, de zéro jusqu'au nombre de nœuds requis pour satisfaire la topologie TPU. Par exemple, pour un pool de nœuds TPU avec un type de machine
ct5lp-hightpu-4t
et une topologie16x16
, le pool de nœuds contient 64 nœuds. L'autoscaler GKE s'assure que ce pool de nœuds comporte exactement 0 ou 64 nœuds. Lors d'un nouveau scaling à la baisse, GKE supprime tous les pods planifiés et draine l'intégralité du pool de nœuds jusqu'à zéro. Pour en savoir plus sur la création d'un pool de nœuds de tranche TPU multi-hôte, consultez la section Créer un pool de nœuds.
Processeur pour les clusters standards
Cette section ne s'applique pas aux clusters Autopilot, car GKE place chaque tranche TPU sur son propre nœud. Pour en savoir plus, consultez Fonctionnement des TPU en mode Autopilot.
Pour les clusters standards, tenez compte des bonnes pratiques de planification suivantes.
Pour planifier une charge de travail non TPU sur une VM dans un nœud de tranche de TPU, assurez-vous que votre pod GKE peut tolérer le rejet google.com/tpu
. Si vous souhaitez que la charge de travail soit déployée sur des nœuds spécifiques, utilisez des sélecteurs de nœuds.
La gestion et la priorité des ressources Kubernetes traitent les VM sur les TPU de la même manière que les autres types de VM. Pour attribuer aux pods nécessitant des TPU une priorité de planification sur les autres pods des mêmes nœuds, demandez la quantité maximale de processeurs ou de mémoire de ces tranches de TPU. Les segments de TPU de faible priorité doivent effectuer les opérations suivantes:
- Définissez un nombre faible de demandes de ressources mémoire et de processeur pour vous assurer que le nœud dispose de suffisamment de ressources pouvant être allouées aux charges de travail TPU. Pour en savoir plus, consultez la section Comment Kubernetes applique les demandes et les limites de ressources.
- Ne définissez aucune limite de processeur (illimité) pour vous assurer que les pods peuvent s'étendre et utiliser tous les cycles inutilisés.
- Définissez des limites de mémoire appropriées pour que les pods fonctionnent correctement sans risquer d'éviction en cas de pression sur le nœud.
Si un pod Kubernetes ne demande pas de ressources processeur et de mémoire (même s'il demande des TPU), Kubernetes le considère comme un pod "best effort", et rien ne garantit qu'il ait besoin de processeur et de mémoire. Seuls les pods qui demandent explicitement des ressources de processeur et de mémoire disposent de ces garanties. Pour une planification Kubernetes spécifique, configurez les besoins du pod avec une requête de processeur et de mémoire explicite. Pour en savoir plus, consultez Gestion des ressources pour les pods et les conteneurs.
Pour en savoir plus sur les bonnes pratiques, consultez Bonnes pratiques Kubernetes: demandes de ressources et limites.
Réduire les interruptions de la charge de travail
Si vous utilisez des TPU pour entraîner un modèle de machine learning et que votre charge de travail est interrompue, tous les travaux effectués depuis le dernier point de contrôle sont perdus. Pour réduire la probabilité d'interruption de votre charge de travail, procédez comme suit :
- Définissez une priorité plus élevée pour cette tâche que pour toutes les autres tâches : si les ressources sont peu nombreuses, le programmeur GKE préempte les tâches de priorité inférieure pour planifier une tâche de priorité supérieure. Cela garantit également que votre charge de travail prioritaire reçoit toutes les ressources dont elle a besoin (jusqu'à la quantité totale de ressources disponibles dans le cluster). Pour en savoir plus, consultez Priorité et préemption des pods.
- Configurez l'exclusion de maintenance : une exclusion de maintenance est une période non récurrente pendant laquelle la maintenance automatique est interdite. Pour en savoir plus, consultez la section Exclusions de maintenance.
- Utilisez des pods à durée d'exécution prolongée dans Autopilot : utilisez des pods à durée d'exécution prolongée pendant un délai de grâce allant jusqu'à sept jours avant que GKE n'arrête vos pods pour effectuer des scalings à la baisse ou les mises à niveau de nœuds.
Gérer les perturbations dues à la maintenance des nœuds
Les nœuds GKE qui hébergent les TPU sont soumis à des événements de maintenance ou à d'autres perturbations susceptibles d'entraîner l'arrêt du nœud. Dans les clusters GKE dont le plan de contrôle exécute les versions 1.29.1-gke.1425000 et ultérieures, vous pouvez réduire les perturbations sur les charges de travail en configurant GKE pour qu'il arrête correctement vos charges de travail.
Pour comprendre, configurer et surveiller les événements d'interruption pouvant se produire sur les nœuds GKE exécutant des charges de travail d'IA/ML, consultez la section Gérer les interruptions des nœuds GKE pour les GPU et les TPU.
Maximiser l'utilisation du TPU
Pour optimiser votre investissement dans les TPU, planifiez une combinaison de priorités de tâches et mettez-les en file d'attente afin de maximiser le temps de fonctionnement de vos TPU. Pour la planification et la préemption au niveau des tâches, vous devez utiliser un module complémentaire de Kubernetes qui organise les tâches en files d'attente. Nous vous recommandons d'utiliser Kueue pour ce cas d'utilisation.
Étapes suivantes
- Suivez les instructions de Déployer des charges de travail TPU dans GKE pour configurer Cloud TPU avec GKE.
- Découvrez les bonnes pratiques en matière d'utilisation de Cloud TPU pour vos tâches de machine learning.
- Créer des modèles de machine learning à grande échelle dans Cloud TPU avec GKE
- Diffusez des grands modèles de langage avec KubeRay sur des TPU.