Google investit énormément dans la recherche et le développement de produits basés sur des réseaux neuronaux artificiels profonds (souvent sous une appellation plus générique d'”intelligence artificielle” ou d'”apprentissage automatique”). Ces derniers existent depuis belle lurette (les premières traces d’un réseau neuronal comme modèle de calcul datent de 1959), mais ne sont réellement utilisés à grande échelle que depuis les années 2010, notamment avec l’introduction de la convolution dans la structure des réseaux.

Pour utiliser ces réseaux à très grande échelle, la performance de l’inférence (c’est-à-dire l’utilisation d’un réseau en pratique, par exemple pour déterminer les objets présents dans une image) devient extrêmement importante. C’est pourquoi, dès 2013, Google se lance dans le développement des TPU (tensor processing unit), tout d’abord pour accélérer l’inférence dans ces réseaux — un investissement dans l’avenir, le besoin n’étant pas encore pressant à l’époque.


Plus en détail, cette première génération est spécifiquement prévue pour un produit entre deux matrices de taille 256×256, avec des entiers de huit bits : il s’agit plus de coprocesseurs pour certaines opérations arithmétiques très précises (mais très utiles pour le contexte d’utilisation) que d’un vrai processeur à part entière. Le TPU fonctionne à une fréquence d’à peine 700 MHz, mais elle est largement suffisante pour écraser toute concurrence, avec un pic à 92 téraopérations par seconde. Ces processeurs disposent de deux canaux DDR3 pour l’accès à la mémoire, qui limitent bien souvent la performance du système.


Cependant, un TPU est extrêmement limité dans les opérations qu’il peut effectuer : il ne dispose que de onze instructions (à comparer aux centaines d’instructions disponibles en x86). Ainsi, il est incapable d’effectuer un branchement conditionnel (if), donc des boucles. L’exécution n’est jamais réordonnée (ce qui permet d’utiliser au mieux les circuits d’un processeur plus traditionnel). Beaucoup d’éléments du processeur sont gérés par un logiciel extérieur, celui qui contrôle le TPU.


Les premiers TPU sont arrivés dans les centres informatiques de Google vers 2015, selon les résultats de comparaisons effectuées en laboratoire dès 2013. Ils ont été évalués face aux CPU (Intel, de génération Haswell) et GPU (NVIDIA K80) de l’époque, du matériel de 2014. Les gains étaient nombreux : chaque puce était plus petite et consommait moins (trente fois moins qu’un GPU, quatre-vingts fois moins qu’un CPU : 40 W par TPU), on pouvait donc en mettre nettement plus par serveur. Par contre, les CPU et GPU sont nettement mieux équilibrés : un TPU pêche par manque de bande passante pour l’accès à la mémoire, qui interdit dans bon nombre d’applications d’utiliser l’entièreté de son potentiel de calcul. Cependant, même ainsi, ils dépassent la performance de processeurs plus classiques — mais uniquement pour l’inférence, ces processeurs étant trop rudimentaires pour l’entraînement de tels réseaux neuronaux.

Cette expérience acquise a permis d’améliorer le principe des TPU, afin d’en déployer la deuxième génération cette année. Notamment, pour la mémoire, les deux canaux de mémoire DDR3 ont été remplacés par de la mémoire HBM, comme bon nombre d’accélérateurs actuels. Également, cette nouvelle édition s’oriente vers les nombres à virgule flottante plutôt qu’uniquement des entiers, ce qui permet de l’utiliser pour l’entraînement plutôt qu’uniquement l’inférence. Google n’a pas donné énormément de détails au sujet de la nouvelle itération, notamment pour la comparer au matériel sorti cette année (on pense surtout aux nouveaux GPU NVIDIA, qui incluent un module de calcul spécifiquement prévu pour l’apprentissage profond), ni sur ses pistes pour la troisième génération.

Source et images : Hot Chips: Google TPU Performance Analysis.

Voir aussi : une introduction détaillée au TPU, une analyse poussée des serveurs à base de TPU2.