Cloud TPU (Tensor Processing Units)

Les TPU (Tensor Processing Units) sont des circuits intégrés spécifiques aux applications (Application-Specific Integrated Circuit ou ASIC), développés spécifiquement par Google et permettant d'accélérer les charges de travail de machine learning. Leur conception repose sur la vaste expérience de Google et sur son leadership en matière de machine learning.

Cloud TPU vous permet d'exécuter des charges de travail de machine learning sur le matériel accélérateur des TPU de Google à l'aide de TensorFlow. Cloud TPU est conçu pour offrir des performances et une flexibilité maximales afin d'aider les chercheurs, les développeurs et les entreprises à créer des clusters de calcul TensorFlow capables d'exploiter les processeurs, les GPU et les TPU. Les API TensorFlow de haut niveau vous permettent d'exécuter des modèles sur le matériel Cloud TPU.

Avantages des TPU

Les ressources Cloud TPU accélèrent les performances du calcul algébrique linéaire, très utilisé dans le domaine du machine learning. Les TPU permettent d'atteindre une précision plus rapidement lors de l'entraînement de modèles de réseaux de neurones vastes et complexes. Les modèles dont l'entraînement prenait auparavant plusieurs semaines sur d'autres plates-formes matérielles peuvent converger en quelques heures sur les TPU.

Garantie de disponibilité

Régions et zones de Cloud TPU indique les emplacements où les Cloud TPU sont disponibles.

Modèle de programmation Cloud TPU

Les ressources Cloud TPU sont capables de calculer très rapidement des vecteurs et matrices denses. Le transfert de données entre une ressource Cloud TPU et la mémoire hôte apparaît comme lent comparé à la vitesse de calcul. En effet, la vitesse du bus PCIe est bien plus lente que l'interconnexion des ressources Cloud TPU et la mémoire à haut débit sur puce. La compilation partielle d'un modèle, dont l'exécution ne cesse de basculer entre l'hôte et l'appareil, entraîne l'inactivité du TPU la plupart du temps, en attendant l'arrivée des données sur le bus PCIe. Pour résoudre ce problème, le modèle de programmation Cloud TPU est conçu pour exécuter la majeure partie de l'entraînement sur le TPU, et idéalement la totalité de la boucle d'entraînement.

Voici quelques caractéristiques essentielles du modèle de programmation TPU :

  • Tous les paramètres du modèle sont conservés dans une mémoire à haut débit sur puce.
  • Les coûts de calcul sur Cloud TPU sont amortis par l'exécution de nombreuses étapes d'entraînement au sein d'une boucle.
  • Les données d'entraînement d'entrée sont diffusées dans une file d'attente "infeed" sur Cloud TPU. Un programme exécuté sur Cloud TPU récupère des lots de ces files d'attente à chaque étape de l'entraînement.
  • Le serveur TensorFlow qui s'exécute sur la machine hôte (le processeur associé à l'appareil Cloud TPU) récupère les données et les prétraite avant de les transmettre au matériel Cloud TPU.
  • Parallélisme des données : les cœurs d'une ressource Cloud TPU exécutent un programme identique de manière synchrone au sein de leur propre mémoire à haut débit. Une opération de réduction est effectuée sur tous les cœurs à la fin de chaque étape du réseau de neurones.

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 dominés par des opérations TensorFlow personnalisées rédigées 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 sans source ou avec une source trop onéreuse à modifier
    • Modèles avec un grand nombre d'opérations TensorFlow 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 personnalisées au sein de la boucle d'entraînement principale
    • Modèles dont l'entraînement prend des semaines ou des mois
    • Modèles volumineux et très volumineux comportant des lots efficaces de très grande taille

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

  • Les programmes algébriques linéaires qui nécessitent des ramifications fréquentes ou qui sont dominés par l'algèbre au niveau des éléments. Les TPU sont optimisés pour calculer rapidement des produits matriciels lourds. C'est pourquoi les charges de travail qui ne sont pas dominées par les produits matriciels ont peu de chances de bien fonctionner sur des TPU par rapport à d'autres plates-formes.
  • Les charges de travail qui accèdent peu fréquemment à la mémoire peuvent ne pas être disponibles sur les TPU.
  • Les charges de travail qui nécessitent une arithmétique de haute précision. Par exemple, l'arithmétique à double précision ne convient pas aux TPU.
  • Les charges de travail de réseau de neurones qui contiennent des opérations TensorFlow personnalisées écrites en C ++. Plus précisément, les opérations personnalisées dans le corps de la boucle d'entraînement principale ne sont pas adaptées aux TPU.

Les charges de travail des réseaux de neurones doivent pouvoir exécuter plusieurs itérations de l'intégralité de la boucle d'entraînement sur le TPU. Bien qu'il ne s'agisse pas d'une exigence fondamentale des TPU, il s'agit de l'une des contraintes actuelles de l'écosystème logiciel des TPU qui est nécessaire pour l'efficacité.

Différences par rapport à l'entraînement conventionnel

Un graphe d'entraînement TensorFlow classique se compose de plusieurs sous-graphes superposés offrant diverses fonctionnalités, dont les suivantes :

  • Opérations d'E/S afin de lire les données d'entraînement
  • Étapes de prétraitement d'entrée, souvent connectées via des files d'attente
  • Variables de modèle
  • Code d'initialisation pour ces variables
  • Modèle
  • Fonctions de perte
  • Code des gradients (qui est habituellement généré automatiquement)
  • Opérations de résumé afin de surveiller l'entraînement
  • Sauvegarde et restauration des opérations afin de créer des points de contrôle

Sur Cloud TPU, les programmes TensorFlow sont compilés par le compilateur opportun XLA. Lors de l'entraînement sur Cloud TPU, seul le code des parties denses du modèle, les sous-graphes de perte et de gradient, peut être compilé et exécuté sur le matériel. Toutes les autres parties du programme TensorFlow s'exécutent sur les machines hôtes (serveur Cloud TPU) dans le cadre d'une session TensorFlow distribuée standard. Il s'agit généralement des opérations d'E/S qui lisent les données d'entraînement, tout code de prétraitement (par exemple : décodage des images compressées, échantillonnage/recadrage aléatoire, assemblage de mini-lots d'entraînement) et toutes les parties du graphe concernant la maintenance, par exemple l'enregistrement et la restauration d'un point de contrôle.

Bonnes pratiques en matière de développement d'un modèle

Une seule puce Cloud TPU contient deux cœurs, chacun contenant plusieurs unités de matrice (MXU) conçues pour accélérer les programmes dominés par des multiplications et convolutions de matrice denses (voir Architecture du système). Les programmes qui consacrent la majeure partie de leur temps d'exécution à calculer des produits matriciels ne sont probablement pas adaptés à Cloud TPU. 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. Les instructions ci-dessous vous aideront à choisir et à concevoir des modèles adaptés à Cloud TPU.

Un appareil Cloud TPU se compose de quatre puces possédant chacune deux cœurs de TPU. Pour utiliser efficacement un matériel Cloud TPU, un programme doit donc exploiter chacun de ces huit cœurs.

Interface

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). Pour obtenir un tuilage 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, qui préfère des dimensions correspondant à un multiple de 8. Par conséquent, certaines dispositions sont plus propices au tuilage, tandis que d'autres nécessitent des redimensionnements avant de pouvoir être tuilées. Sur une ressource Cloud TPU, les opérations de redimensionnement sont souvent liées à la mémoire.

Formes

Le compilateur XLA compile un graphe TensorFlow de façon opportune 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). C'est pourquoi les modèles comportant des Tensors dotés de formes dynamiques qui changent au moment de l'exécution 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 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.

Opérations

Consultez la liste des opérations TensorFlow disponibles.

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 TPU Cloud 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 et limitations compatibles.

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.

Étapes suivantes