À mesure que l’utilité des systèmes d’IA s’est considérablement accrue, leur demande en énergie a également augmenté. La formation de nouveaux systèmes est extrêmement gourmande en énergie, car elle nécessite généralement des ensembles de données volumineux et beaucoup de temps processeur. L’exécution d’un système entraîné a tendance à être beaucoup moins complexe : les smartphones peuvent facilement le gérer dans certains cas. Mais comme vous les exécutez très souvent, cette consommation d’énergie a également tendance à s’additionner.
Heureusement, il existe de nombreuses idées pour réduire la consommation d’énergie de cette dernière. IBM et Intel ont expérimenté des processeurs conçus pour imiter le comportement de vrais neurones. IBM a également testé l’exécution de calculs de réseau neuronal dans une mémoire à changement de phase pour éviter d’effectuer des déplacements répétés vers la RAM.
Aujourd’hui, IBM est de retour avec une autre approche, qui ressemble un peu à « aucune de ces solutions ». Le nouveau processeur NorthPole de la société a repris certaines des idées derrière toutes ces approches et les a fusionnées avec une approche très simplifiée de l’exécution des calculs pour créer une puce très économe en énergie, capable d’exécuter efficacement des réseaux neuronaux basés sur l’inférence. Pour des choses comme la classification d’images ou la transcription audio, la puce peut être jusqu’à 35 fois plus efficace que de s’appuyer sur un GPU.
Un processeur très inhabituel
Cela vaut la peine de clarifier certaines choses dès le début. Premièrement, NorthPole ne fait rien pour répondre à la demande d’énergie lors de la formation d’un réseau neuronal ; il est purement conçu pour l’exécution. Deuxièmement, ce n’est pas un processeur d’IA général ; il est spécialement conçu pour les réseaux de neurones axés sur l’inférence. Comme indiqué ci-dessus, les inférences incluent des éléments tels que la détermination du contenu d’une image ou d’un clip audio afin qu’ils aient un large éventail d’utilisations, mais cette puce ne vous sera d’aucune utilité si vos besoins incluent l’exécution d’un grand modèle de langage.
Enfin, bien que NorthPole s’inspire de certaines idées de puces informatiques neuromorphiques, notamment du précédent TrueNorth d’IBM, il ne s’agit pas d’un matériel neuromorphique, dans le sens où ses unités de traitement effectuent des calculs plutôt que de tenter d’émuler les communications à pointe de fréquence utilisées par les neurones réels.
C’est ce que ce n’est pas. Qu’est-ce que le Pôle Nord ? Certaines des idées reprennent les efforts antérieurs d’IBM. Il s’agit notamment de la reconnaissance du fait qu’une grande partie des coûts énergétiques de l’IA proviennent de la séparation entre la mémoire et les unités d’exécution. Étant donné qu’un composant clé des réseaux de neurones – le poids des connexions entre les différentes couches de « neurones » – est conservé en mémoire, toute exécution sur un processeur ou un GPU traditionnel consomme beaucoup d’énergie simplement en transférant ces poids de la mémoire vers l’endroit où ils peuvent être utilisés. pendant l’exécution.
Ainsi, NorthPole, comme TrueNorth avant lui, se compose d’un large éventail (16 × 16) d’unités de calcul, chacune comprenant à la fois une mémoire locale et une capacité d’exécution de code. Ainsi, tous les poids des différentes connexions du réseau neuronal peuvent être stockés exactement là où ils sont nécessaires.
Une autre fonctionnalité est la mise en réseau étendue sur puce, avec au moins quatre réseaux distincts. Certains d’entre eux transportent des informations provenant de calculs terminés vers les unités de calcul où elles sont ensuite nécessaires. D’autres sont utilisés pour reconfigurer l’ensemble des unités de calcul, fournissant les poids neuronaux et le code nécessaires pour exécuter une couche du réseau neuronal pendant que les calculs de la couche précédente sont toujours en cours. Enfin, les communications entre les unités de calcul voisines sont optimisées. Cela peut être utile pour des choses comme trouver le bord d’un objet dans une image. Si l’image est saisie de manière à ce que les pixels voisins soient dirigés vers des unités de calcul voisines, ils peuvent plus facilement coopérer pour identifier les caractéristiques qui s’étendent sur les pixels voisins.
Les ressources informatiques sont également inhabituelles. Chaque unité est optimisée pour effectuer des calculs de moindre précision, allant d’une précision de deux à huit bits. Bien qu’une plus grande précision soit souvent requise pour la formation, les valeurs nécessaires lors de l’exécution ne nécessitent généralement pas ce niveau d’exactitude. Pour que ces unités d’exécution restent utilisées, elles sont incapables d’effectuer des branchements conditionnels basés sur la valeur des variables, ce qui signifie que votre code ne peut pas contenir d’instruction « if ». Cela élimine le besoin du matériel nécessaire à l’exécution de branches spéculatives et garantit qu’un mauvais code sera exécuté chaque fois que cette spéculation s’avère fausse.
Cette simplicité d’exécution rend chaque unité de calcul capable d’une exécution massivement parallèle. Avec une précision de deux bits, chaque unité peut effectuer plus de 8 000 calculs en parallèle.