Présentation de Cloud TPU

Les TPU (Tensor Processing Units) sont des circuits intégrés ASIC spécifiquement développés par Google pour accélérer les charges de travail de machine learning. Pour en savoir plus sur le matériel TPU, consultez la page Architecture du système. Cloud TPU est un service Web qui met les TPU à disposition en tant que ressources de calcul évolutives sur Google Cloud.

Les TPU permettent d'entraîner vos modèles plus efficacement à l'aide du matériel conçu pour effectuer des opérations matricielles importantes souvent présentes dans les algorithmes de machine learning. Les TPU disposent d'une mémoire à haut débit (HBM) intégrée qui vous permet d'utiliser des modèles plus volumineux et des tailles de lots plus importantes. Les TPU peuvent être connectés en groupes appelés "pods" qui font évoluer vos charges de travail avec peu ou pas de changement de code.

Fonctionnement

Pour comprendre le fonctionnement des TPU, il est utile de comprendre comment d'autres accélérateurs gèrent les difficultés de calcul liées à l'entraînement des modèles de ML.

Fonctionnement d'un processeur

Un CPU est un processeur à usage général basé sur l'architecture de von Neumann. Cela signifie qu'un processeur fonctionne avec un logiciel et une mémoire, comme illustré ci-dessous :

Une illustration du fonctionnement d'un processeur

Le plus grand avantage des processeurs est leur flexibilité. Vous pouvez charger n'importe quel type de logiciel sur un processeur pour de nombreux types d'applications. Par exemple, vous pouvez utiliser un processeur pour traiter du texte sur un ordinateur, contrôler des moteurs de fusée, exécuter des transactions bancaires ou classer des images avec un réseau de neurones.

Un processeur charge les valeurs à partir de la mémoire, effectue un calcul sur les valeurs et stocke le résultat en mémoire pour chaque calcul. L'accès à la mémoire est lent par rapport à la vitesse de calcul et peut limiter le débit total des processeurs. On parle souvent de goulot d'étranglement de von Neumann.

Fonctionnement d'un GPU

Pour obtenir un débit plus élevé, les GPU contiennent des milliers d'unités logiques arithmétiques (ALU) dans un seul processeur. Un GPU moderne contient généralement entre 2 500 et 5 000 ALU. Le grand nombre de processeurs signifie que vous pouvez exécuter des milliers de multiplications et d'additions simultanément.

Une illustration du fonctionnement d'un GPU

Cette architecture GPU fonctionne bien sur les applications à parallélisme massif, comme les opérations matricielles dans un réseau de neurones. En réalité, avec une charge de travail d'entraînement classique pour le deep learning, un GPU peut fournir une commande beaucoup plus importante qu'un processeur.

Toutefois, le GPU reste un processeur à usage général qui doit prendre en charge de nombreuses applications et logiciels différents. Par conséquent, les GPU ont le même problème que les processeurs. Pour chaque calcul dans les milliers d'ALU, un GPU doit accéder aux registres ou à la mémoire partagée pour lire les opérandes et stocker les résultats des calculs intermédiaires.

Fonctionnement d'un TPU

Cloud TPU a été conçu par Google comme un processeur matriciel spécialisé dans les charges de travail des réseaux de neurones. Les TPU ne peuvent pas exécuter de traitement de texte, contrôler des moteurs de fusée ni exécuter des transactions bancaires, mais ils peuvent gérer des opérations matricielles massives utilisées dans les réseaux de neurones à des vitesses rapides.

La tâche principale des TPU est le traitement matriciel, qui est une combinaison d'opérations de multiplication et d'addition. Les TPU contiennent des milliers d'accumulateurs multiplicateurs qui sont directement connectés les uns aux autres pour former une grande matrice physique. C'est ce qu'on appelle une architecture de tableau systolique. Cloud TPU v3 contient deux tableaux systoliques de 128 x 128 ALU, sur un seul processeur.

L'hôte TPU diffuse les données dans une file d'attente d'ingestion. Le TPU charge les données de la file d'attente d'ingestion et les stocke dans la mémoire HBM. Une fois le calcul terminé, le TPU charge les résultats dans la file d'attente de sortie. L'hôte TPU lit ensuite les résultats de la file d'attente de sortie et les stocke dans la mémoire de l'hôte.

Pour effectuer les opérations matricielles, le TPU charge les paramètres de la mémoire HBM dans l'unité de multiplication matricielle (MXU).

Une illustration de la façon dont un TPU charge des paramètres depuis la mémoire

Le TPU charge ensuite les données à partir de la mémoire HBM. À mesure que chaque multiplication est exécutée, le résultat est transmis à l'accumulateur de multiplication suivant. La sortie est la somme de tous les résultats de multiplication entre les données et les paramètres. Aucun accès à la mémoire n'est requis lors du processus de multiplication matricielle.

Une illustration de la façon dont un TPU charge des données depuis la mémoire

Par conséquent, les TPU peuvent atteindre un débit de calcul élevé pour les calculs de réseaux de neurones.

Compilateur XLA

Le code qui s'exécute sur les TPU doit être compilé par le compilateur d'algèbre linéaire d'accélérateur (XLA). 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'environnement d'exécution TPU qui s'exécute sur une machine hôte TPU.

Quand utiliser les TPU ?

Les ressources Cloud TPU sont optimisées 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 descriptions suivantes :

Processeurs

  • Prototypage rapide nécessitant une flexibilité maximale
  • Modèles simples rapides à entraîner
  • Petits modèles comportant des lots efficaces de taille moindre
  • Modèles contenant de nombreuses opérations TensorFlow personnalisées écrites en C++
  • Modèles limités par les E/S disponibles ou par la bande passante réseau du système hôte

GPU

  • Modèles avec un grand nombre d'opérations TensorFlow/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 TensorFlow/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

Les ressources Cloud TPU ne sont pas adaptées aux charges de travail suivantes :

  • Programmes d'algèbre linéaire nécessitant des ramifications fréquentes ou contenant de nombreuses opérations algébriques au niveau des éléments
  • Charges de travail qui accèdent peu fréquemment à la mémoire
  • Les charges de travail qui nécessitent une arithmétique de haute précision
  • Les charges de travail de réseau de neurones qui contiennent des opérations personnalisées dans la boucle d'entraînement principale

Bonnes pratiques en matière de développement d'un 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. Vous trouverez ci-dessous quelques consignes qui vous aideront à choisir et à créer des modèles adaptés à Cloud TPU.

Mise en page

Le compilateur XLA réalise des transformations de code (telles que le tuilage d'un produit matriciel en plusieurs blocs) afin d'effectuer efficacement des calculs sur l'unité matricielle (MXU). La structure du matériel MXU, un tableau systolique 128x128 et la conception du sous-système de mémoire du TPU, qui privilégie des dimensions correspondant à des multiples de 8, sont utilisés par le compilateur XLA pour optimiser l'efficacité du tuilage. Par conséquent, certaines dispositions sont plus propices au tuilage, tandis que d'autres nécessitent des redimensionnements avant de pouvoir être tuilées. Les opérations de remodelage sont souvent liées à la mémoire sur Cloud TPU.

Formes

Le compilateur XLA compile un graphe de ML juste à temps pour le premier lot. Si l'un des lots suivants présente des formes différentes, le modèle ne fonctionne pas. (Recompiler le graphique à chaque changement de forme prend trop de temps.) Par conséquent, tout modèle comportant des Tensors avec des formes dynamiques qui changent au moment de l'exécution n'est pas adapté aux TPU.

Remplissage

Un programme Cloud TPU hautes performances est un programme dans lequel les calculs denses peuvent facilement être tuilés en blocs de dimension 128 x 128. Lorsqu'un calcul matriciel ne peut pas occuper l'ensemble d'une unité matricielle, le compilateur remplit les Tensors avec des zéros. Cette méthode présente toutefois deux inconvénients :

  • Les Tensors remplis de zéros sous-utilisent le cœur du TPU.
  • Le remplissage augmente la quantité de mémoire sur puce requise pour un Tensor. Cette technique peut également entraîner une erreur de 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 Tensors adaptées aux TPU.

Dimensions

Le choix des dimensions appropriées pour les Tensors aide considérablement à tirer les meilleures performances du matériel TPU, en particulier de l'unité matricielle. Le compilateur XLA tente d'utiliser la taille des lots ou la dimension des 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 des lots et les dimensions des caractéristiques doivent correspondre à des multiples de 8, ce qui permet d'exploiter le sous-système de mémoire au maximum de ses capacités.

Intégration de VPC Service Controls

Le service VCP Service Controls de Cloud TPU vous permet de définir des périmètres de sécurité autour de vos ressources Cloud TPU et de contrôler le déplacement des données au-delà des limites de ces périmètres. Pour en savoir plus sur VPC Service Controls, consultez la page Présentation de VPC Service Controls. Pour en savoir plus sur les limites d'utilisation de Cloud TPU avec VPC Service Controls, consultez la page Produits compatibles et limites.

Edge TPU

Les modèles de machine learning entraînés dans le cloud doivent de plus en plus tirer parti de l'inférence, c'est-à-dire sur les appareils en périphérie de l'Internet des Objets. Ces appareils incluent des capteurs et d'autres appareils intelligents qui collectent des données en temps réel, prennent des décisions intelligentes, puis prennent des mesures ou communiquent leurs informations à d'autres appareils ou au cloud.

Étant donné que ces appareils doivent fonctionner avec une puissance limitée (y compris la batterie), Google a conçu le coprocesseur Edge TPU pour accélérer l'inférence de machine learning sur les appareils de faible puissance. Un coprocesseur Edge TPU individuel peut effectuer 4 000 milliards d'opérations par seconde (4 TOPS), en utilisant seulement 2 W de puissance. En d'autres termes, vous obtenez 2 TOPS par watt. Par exemple, le coprocesseur Edge TPU peut exécuter des modèles de vision mobile de pointe tels que MobileNet V2 à près de 400 images par seconde, et ce, avec une grande efficacité énergétique.

Cet accélérateur ML à faible consommation étend les services Cloud TPU et Cloud IoT pour fournir une infrastructure de bout en bout (cloud vers périphérie, matérielle et logicielle) qui facilite vos solutions basées sur l'IA.

Le coprocesseur Edge TPU est disponible pour vos propres appareils de prototypage et de production dans plusieurs facteurs de forme, tels qu'un ordinateur monocarte, un système sur module, une carte PCIe/M.2 et un module en surface. Pour plus d'informations sur Edge TPU et tous les produits disponibles, rendez-vous sur le site coral.ai.

Premiers pas avec Cloud TPU

Demander de l'aide

Contactez l'assistance Cloud TPU. Si vous avez un projet Google Cloud actif, préparez-vous à fournir les informations suivantes:

  • L'ID de votre projet Google Cloud
  • Nom de votre nœud TPU, le cas échéant
  • Autres informations que vous souhaitez fournir

Étape suivante

Vous souhaitez en savoir plus sur Cloud TPU ? Les ressources suivantes peuvent vous aider: