Présentation de Cloud TPU
Les TPU (Tensor Processing Units) sont des circuits intégrés spécifiques aux applications (Application-Specific Integrated Circuit ou ASIC) et développés spécifiquement par Google qui permettent d'accélérer les charges de travail de machine learning. Pour en savoir plus sur le matériel TPU, consultez Architecture des TPU. Cloud TPU est un service Web qui rend les TPU disponibles en tant que ressources de calcul évolutives sur Google Cloud.
Les TPU permettent d'entraîner vos modèles plus efficacement, car il s'agit d'un type de matériel conçu pour effectuer les opérations matricielles conséquentes qu'on retrouve souvent dans les algorithmes de machine learning. Les TPU disposent d'une mémoire à haut débit (HBM) intégrée, ce qui vous permet d'utiliser des modèles et des lots de taille plus importante. Les TPU peuvent être connectés dans des groupes appelés "tranches" qui vous permettent d'effectuer un scaling à la hausse de vos charges de travail avec peu ou pas de modifications de code.
Le code qui s'exécute sur les TPU doit être compilé par le compilateur XLA (Accelerated Linear Algebra). XLA est un compilateur juste-à-temps qui prend le graphe émis par une application de framework de ML et compile les composants d'algèbre linéaire, de perte et de gradient du graphe en code machine TPU. Le reste du programme s'exécute sur la machine hôte TPU. Le compilateur XLA fait partie de l'image de VM TPU qui s'exécute sur une machine hôte TPU.
Pour en savoir plus sur les Tensor Processing Units, consultez Comment appréhender les TPU.
Quand utiliser les TPU ?
Les Cloud TPU sont optimisés pour des charges de travail spécifiques. Dans certains cas, il est préférable d'utiliser des GPU ou des processeurs sur des instances Compute Engine afin d'exécuter des charges de travail de machine learning. En règle générale, vous pouvez choisir le matériel le mieux adapté à votre charge de travail en vous appuyant sur les consignes suivantes.
Processeurs
- Prototypage rapide nécessitant une flexibilité maximale
- Modèles simples et rapides à entraîner
- Petits modèles comportant des lots efficaces de taille réduite
- Modèles comportant de nombreuses opérations TensorFlow personnalisées écrites en C++
- Modèles limités par la capacité d'E/S ou par la bande passante réseau du système hôte
GPU
- Modèles avec un grand nombre d'opérations PyTorch/JAX personnalisées devant s'exécuter au moins partiellement sur des processeurs
- Modèles avec des opérations TensorFlow non disponibles sur Cloud TPU (consultez la liste des opérations TensorFlow disponibles)
- Modèles moyens à volumineux comportant des lots efficaces de taille plus importante
TPU
- Modèles dominés par les calculs matriciels
- Modèles sans opérations PyTorch/JAX personnalisées dans la boucle d'entraînement principale
- Modèles dont l'entraînement prend des semaines ou des mois
- Modèles volumineux avec lots efficaces de grande taille
- Modèles avec des embeddings très volumineux, courants dans les charges de travail de recommandation et de classement avancées
Les Cloud TPU ne sont pas adaptés aux charges de travail suivantes :
- Les programmes algébriques linéaires qui nécessitent des ramifications fréquentes ou qui contiennent de nombreuses opérations algébriques au niveau des éléments
- Les charges de travail qui nécessitent une arithmétique de haute précision
- Les charges de travail de réseaux de neurones qui contiennent des opérations personnalisées dans la boucle d'entraînement principale
TPU dans Google Cloud
Vous pouvez utiliser des TPU via des VM Cloud TPU, Google Kubernetes Engine et Vertex AI. Le tableau suivant liste les ressources pour chaque service Google Cloud.
ServiceGoogle Cloud | Ressources |
---|---|
Cloud TPU | Premiers pas avec les VM Cloud TPU |
Google Kubernetes Engine | |
Vertex AI |
Bonnes pratiques de développement de modèle
Un programme dont le calcul est dominé par des opérations non matricielles (telles que des additions, des redimensionnements ou des concaténations) n'atteindra sans doute pas une utilisation élevée des unités matricielles. Les instructions ci-dessous vous aideront à choisir et à concevoir des modèles adaptés à Cloud TPU.
Disposition
Le compilateur XLA réalise des transformations de code (telles que la décomposition d'un produit matriciel en plusieurs blocs de taille réduite) afin d'effectuer efficacement des calculs sur l'unité matricielle (MXU). Pour une décomposition efficace, le compilateur utilise la structure du matériel MXU, un tableau systolique de dimension 128 x 128, ainsi que la conception du sous-système de mémoire du TPU, laquelle privilégie des dimensions correspondant à un multiple de 8.
Par conséquent, certaines dispositions sont plus propices à une décomposition, tandis que d'autres nécessitent des redimensionnements avant toute décomposition. Sur Cloud TPU, les opérations de redimensionnement sont souvent liées à la mémoire.
Formes
Le compilateur XLA compile un graphe de ML "juste à temps" pour le premier lot. Si des lots ultérieurs possèdent des formes différentes, le modèle ne fonctionne pas (et recompiler le graphe à chaque modification de forme prend trop de temps). Par conséquent, on peut dire que les modèles comportant des tenseurs dotés de formes dynamiques ne sont pas adaptés aux TPU.
Remplissage
Un programme Cloud TPU hautes performances est un programme dans lequel les calculs denses peuvent facilement être décomposés en fragments de dimension 128 x 128. Lorsqu'un calcul matriciel ne peut pas occuper l'ensemble d'une unité matricielle, le compilateur remplit les tenseurs avec des zéros. Cette méthode présente toutefois deux inconvénients :
- Les tenseurs remplis de zéros sous-utilisent le cœur TPU.
- Le remplissage augmente la quantité de mémoire intégrée requise pour un tenseur. Cette technique peut également entraîner une erreur de type "mémoire insuffisante" dans certains cas.
Bien que le remplissage soit automatiquement effectué par le compilateur XLA en cas de besoin, il est possible de définir la proportion de remplissage à l'aide de l'outil op_profile. Vous pouvez éviter le remplissage en choisissant des dimensions de tenseur adaptées aux TPU.
Dimensions
Le choix de dimensions appropriées pour les tenseurs permet d'obtenir des performances optimales avec le matériel TPU, en particulier en ce qui concerne l'unité matricielle. Le compilateur XLA tente d'utiliser soit la taille de lot, soit une dimension de caractéristiques, pour optimiser l'utilisation de l'unité matricielle. L'une de ces valeurs doit donc correspondre à un multiple de 128. Dans le cas contraire, le compilateur remplit l'un de ces deux éléments afin d'atteindre 128. Idéalement, la taille de lot et les dimensions des caractéristiques doivent correspondre à des multiples de 8, car cela permet d'exploiter le sous-système de mémoire au maximum de ses capacités.
Premiers pas avec Cloud TPU
- Configurer un compte Google Cloud
- Activer l'API Cloud TPU
- Accorder à Cloud TPU l'accès à vos buckets Cloud Storage
- Exécuter un calcul de base sur un TPU
- Entraîner un modèle de référence sur un TPU
- Analyser votre modèle
Demander de l'aide
Pour obtenir de l'aide, contactez l'assistance Cloud TPU. Si vous avez un projet Google Cloud actif, préparez-vous à fournir les informations suivantes :
- ID de votre projet Google Cloud
- Nom de votre TPU, le cas échéant
- Autres informations que vous souhaitez fournir
Étapes suivantes
Vous souhaitez en savoir plus sur Cloud TPU ? Les ressources suivantes peuvent vous aider :