{"id":14936,"date":"2017-09-07T17:40:54","date_gmt":"2017-09-07T15:40:54","guid":{"rendered":"http:\/\/www.oezratty.net\/wordpress\/?p=14936"},"modified":"2017-09-16T10:41:59","modified_gmt":"2017-09-16T08:41:59","slug":"lia-entra-dans-les-smartphones","status":"publish","type":"post","link":"https:\/\/www.oezratty.net\/wordpress\/2017\/lia-entra-dans-les-smartphones\/","title":{"rendered":"Et l&#8217;IA entra dans les smartphones !"},"content":{"rendered":"<p>Lors de l&#8217;IFA 2017 \u00e0 Berlin, le chinois <strong>Huawe\u00ee <\/strong>annon\u00e7ait le <strong>Kirin 970<\/strong>, le premier chipset mobile int\u00e9grant de l&#8217;IA, leur &#8220;Neural Processing Unit&#8221; (<a href=\"https:\/\/www.youtube.com\/watch?v=XaKgre5waPs\">vid\u00e9o<\/a>), issu de sa filiale de semiconducteurs HiSilicon. Il \u00e9quipera les futurs smartphones de Huawe\u00ef, les Mate 10 qui seront lanc\u00e9s en octobre 2017. \u00a0Ce Kirin 970 permet de traiter plus rapidement la reconnaissance d&#8217;images et probablement \u00e9galement, celle de la parole. C\u2019est une v\u00e9ritable premi\u00e8re m\u00eame si elle ne comprend pas forc\u00e9ment de tour de force technologique particulier. C\u2019est une forme d\u2019innovation par l\u2019int\u00e9gration qui va dans le sens du vent et qui en pr\u00e9c\u00e8de d\u2019autres.<\/p>\n<p><strong>Apple<\/strong> faisait de m\u00eame la semaine suivante en lan\u00e7ant ses iPhone 8 et X qui int\u00e8grent un composant d\u00e9di\u00e9 \u00e0 l&#8217;IA, le A11 Bionic Neural Engine. La tendance est donc bien lanc\u00e9e pour mettre de l&#8217;IA dans les smartphones sachant qu&#8217;elle avait d\u00e9j\u00e0 \u00e9t\u00e9 entam\u00e9e dans d&#8217;autres cat\u00e9gories d&#8217;objets connect\u00e9s comme les cam\u00e9ras de surveillance.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_thumb.png\" alt=\"image\" width=\"196\" height=\"185\" border=\"0\" \/><\/a><\/p>\n<p>Le leader mondial des chipsets mobiles, l\u2019Am\u00e9ricain <strong>Qualcomm <\/strong>proposait jusqu\u2019\u00e0 pr\u00e9sent son architecture <strong>Zeroth <\/strong>pour faire tourner des fonctions de deep learning dans les smartphones. Dans la pratique, il ne s\u2019agissait que d\u2019un kit de d\u00e9veloppement logiciel (SDK) qui exploitait des fonctions standards d&#8217;un DSP Hexagon int\u00e9gr\u00e9 dans leurs chipsets Snapdragon. Les processeurs mobiles de <strong>Nvidia<\/strong> comprenaient aussi un grand nombre de c\u0153urs pour ex\u00e9cuter des applications de deep learning mais on les trouve plut\u00f4t dans les v\u00e9hicules \u00e0 conduite assist\u00e9e et autonomes comme les Tesla que dans des smartphones.<\/p>\n<p>Comme les annonces similaires se suivent en g\u00e9n\u00e9ral, il ne serait pas \u00e9tonnant que d&#8217;autres fournisseurs de chipsets mobiles s&#8217;y mettent, surtout Mediatek et Samsung, puis Qualcomm, qui pourrait bien faire une annonce de ce genre avant, pendant ou apr\u00e8s le CES 2018.<\/p>\n<p><strong>Les r\u00e9seaux de convolution du deep learning<\/strong><\/p>\n<p>Pour comprendre \u00e0 quoi peut servir ce Kirin 970 dou\u00e9 d\u2019IA, il faut rentrer un peu dans le lard de l\u2019une des techniques de l\u2019IA, les r\u00e9seaux de convolution. C\u2019est une des techniques de deep learning qui est principalement utilis\u00e9e pour reconnaitre le contenu d\u2019images et d\u00e9tecter les phon\u00e8mes dans la reconnaissance de la parole. Cela colle bien avec les applications de ce Kirin 970 pr\u00e9sent\u00e9es lors de son lancement.<\/p>\n<p>Les r\u00e9seaux de neurones convolutionnels, CNN, ou ConvNets (convolutional neuron networks), ont \u00e9t\u00e9 invent\u00e9s par le fran\u00e7ais <strong>Yann LeCun<\/strong> en 1988 puis perfectionn\u00e9s en 1989, 1998 et jusqu\u2019\u00e0 pr\u00e9sent. Ils servaient au d\u00e9part \u00e0 la reconnaissance de chiffres, puis sont pass\u00e9s \u00e0 la reconnaissance d\u2019images. Il explique cela tr\u00e8s bien dans la conf\u00e9rence inaugurale de sa chaire du Coll\u00e8ge de France du 12 f\u00e9vrier 2016 (<a href=\"https:\/\/www.college-de-france.fr\/site\/yann-lecun\/course-2016-02-12-14h30.htm\">vid\u00e9o<\/a>).<\/p>\n<p>Le deep learning exploite des r\u00e9seaux de neurones multicouches qui reconnaissent le contenu d\u2019un objet complexe (son, image, vid\u00e9o, texte) en le d\u00e9composant progressivement d\u2019abord en composantes de bas niveau, puis en montant progressivement le niveau d\u2019abstraction jusqu\u2019\u00e0 aboutir au descriptif de l\u2019objet.<\/p>\n<p>Les ConvNets perfectionnent ce mod\u00e8le en s\u2019inspirant fortement du fonctionnement du cortex visuel des mammif\u00e8res qui est structur\u00e9, de pr\u00e8s, dans des colonnes corticales faites de cinq couches de neurones et qui, de loin, comprend des aires sp\u00e9cialis\u00e9es qui \u00e9l\u00e8vent progressivement le niveau d\u2019abstraction des objets reconnus. On a pu le v\u00e9rifier sur des \u2026 chats !<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_thumb_3.png\" alt=\"image\" width=\"446\" height=\"251\" border=\"0\" \/><\/a><\/p>\n<p>Contrairement au cortex humain, les ConvNets qui font de la reconnaissance d\u2019images utilisent des repr\u00e9sentations \u00e0 tr\u00e8s basse r\u00e9solution. Les algorithmes utilis\u00e9s sont cependant si puissants qu\u2019ils permettent de g\u00e9n\u00e9rer des taux de reconnaissance d\u2019images meilleurs que ceux de l\u2019Homme ! Qu\u2019est-ce que cela serait si la r\u00e9solution utilis\u00e9e \u00e9tait la m\u00eame que dans l\u2019\u0153il et le cortex humains ! On y arrivera certainement un jour et on pourra alors parler d\u2019IA d\u2019\u0153il de lynx.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_4.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_thumb_4.png\" alt=\"image\" width=\"432\" height=\"243\" border=\"0\" \/><\/a><\/p>\n<p>Les ConvNets utilisent plusieurs techniques enchain\u00e9es les unes avec les autres avec des filtres et des \u201cfeature maps\u201d qui consistent \u00e0 identifier des formes dans les images. Chaque \u201cfeature map\u201d est une cartographie de l\u2019apparition d\u2019un filtre dans l\u2019image analys\u00e9e. Un ConvNet utilise un jeu de plusieurs filtres initialis\u00e9 al\u00e9atoirement. Les filtres sont ensuite affin\u00e9s par diff\u00e9rentes techniques dont la r\u00e9tropropagation d\u2019erreurs dans l\u2019ensemble du r\u00e9seau, un m\u00e9canisme qui est appliqu\u00e9 pour toutes les images d\u2019un jeu d\u2019entrainement qui peut comprendre des millions d\u2019images. C\u2019est tr\u00e8s consommateur de ressources machine et l\u2019annonce de Huawe\u00ef ne pr\u00e9cise d\u2019ailleurs pas si le Kirin 970 sert \u00e0 l\u2019ex\u00e9cution d\u2019un r\u00e9seau de neurones ou \u00e9galement \u00e0 son entrainement qui est la partie la plus consommatrice de ressources. Un r\u00e9seau de neurones convolutionnel ne reconnait pas magiquement un chat ou un visage ! On lui a indiqu\u00e9 auparavant de quoi il s\u2019agissait !<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_5.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_thumb_5.png\" alt=\"image\" width=\"543\" height=\"269\" border=\"0\" \/><\/a><\/p>\n<p>Chaque feature map se voit appliqu\u00e9e une r\u00e9duction de r\u00e9solution (pooling) puis une suppression des valeurs n\u00e9gatives (ReLU pour Rectified Linear Units) pour r\u00e9duire la quantit\u00e9 de travail \u00e0 r\u00e9aliser sur les couches suivantes. Le processus est r\u00e9p\u00e9t\u00e9 sur plusieurs niveaux ou couches, chaque \u201cfeature map\u201d issue d\u2019un niveau devenant une image qui subit un traitement \u00e9quivalent dans le niveau suivant. C\u2019est assez abstrait \u00e0 comprendre, j\u2019en conviens bien ! J\u2019ai mis moi-m\u00eame beaucoup de temps \u00e0 comprendre !<\/p>\n<p>A la fin de l\u2019histoire, la derni\u00e8re couche de \u201cfeature maps\u201d est reli\u00e9e \u00e0 une liste de tags avec une probabilit\u00e9 de correspondance via quelques couches de neurones dites \u00ab fully connected \u00bb, \u00e0 savoir que tous les neurones d\u2019une couche sont li\u00e9es \u00e0 celles de la couche suivante. C\u2019est l\u00e0 qu\u2019un chat ou un bateau sont reconnus dans l\u2019image et que plusieurs objets peuvent \u00eatre reconnus dans une m\u00eame image. La derni\u00e8re couche de cet empilement est un ensemble de neurones dont le nombre est \u00e9gal au nombre d\u2019objets diff\u00e9rents \u00e0 reconnaitre. Il peut \u00eatre tr\u00e8s grand mais doit rester raisonnable pour tenir compte des capacit\u00e9s du mat\u00e9riel. Ainsi, les meilleurs moteurs de reconnaissance d\u2019images comme ceux de Google n\u2019ont-ils pour l\u2019instant que quelques dizaines de milliers de classes d\u2019objets dans cette derni\u00e8re couche de r\u00e9seaux de neurones.<\/p>\n<p>A chaque couche d\u2019un r\u00e9seau convolutionnel, le nombre de \u201cfeature maps\u201d augmente et leur taille diminue. Les \u201cfeature maps\u201d \u00e9tant optimis\u00e9es automatiquement, leur forme n\u2019est pas interpr\u00e9table par le cerveau humain. C\u2019est la magie des ConvNets : ils cr\u00e9\u00e9ent des niveaux de repr\u00e9sentations hi\u00e9rarchiques interm\u00e9diaires des images qui optimisent leur reconnaissance avec une vision plus statistique que s\u00e9mantique, sans que l\u2019on puisse comprendre comment ils fonctionnent pas \u00e0 pas. C\u2019est particuli\u00e8rement \u00e9loquent avec la reconnaissance d\u2019images, cf l\u2019exemple <em>ci-dessous<\/em>. D\u2019o\u00f9 le fameux soucis de \u201cnon explicabilit\u00e9\u201d des algorithmes du deep learning. Cela ne va pas nous emp\u00eacher de dormir pour la reconnaissance d\u2019une image mais peut \u00eatre d\u00e9licat pour d\u2019autres usages comme ceux qui sont li\u00e9s au traitement du langage, m\u00eame si ceux-ci exploitent g\u00e9n\u00e9ralement d\u2019autres formes de r\u00e9seaux de neurones qu\u2019on appelle les r\u00e9seaux de neurones r\u00e9currents (RNN) et qui n\u2019exploitent pas par ces myst\u00e9rieuses \u201cfeature maps\u201d.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_6.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_thumb_6.png\" alt=\"image\" width=\"618\" height=\"237\" border=\"0\" \/><\/a><\/p>\n<p>Le nombre et la taille des filtres de chaque couche du ConvNet sont d\u00e9cid\u00e9s par le d\u00e9veloppeur en fonction de la nature des images \u00e0 traiter et des objets \u00e0 y reconnaitre. Plus ils seront grands, plus le calcul sera long pour l\u2019entrainement du syst\u00e8me. Les concepteurs de r\u00e9seaux de neurones passent donc beaucoup de temps \u00e0 peaufiner leurs mod\u00e8les pour am\u00e9liorer les performances de l\u2019entrainement.<\/p>\n<p>On peut distinguer les ConvNets selon le nombre de dimensions des donn\u00e9es reconnues : <strong>1D<\/strong> (une dimension) pour le texte, la reconnaissance de genre de musique, des pr\u00e9dictions temporelles sur une seule variable, <strong>2D<\/strong> (deux dimensions) pour les images, pour la reconnaissance de la parole qui associe fr\u00e9quence audio et temps, puis <strong>3D<\/strong> (trois dimensions) pour le traitement de vid\u00e9os et d\u2019imagerie m\u00e9dicale 3D. Rien d\u2019emp\u00eache d\u2019ajouter d\u2019autres dimensions si l\u2019usage l\u2019exige.<\/p>\n<p>Pour en savoir plus, voici une bonne explication des ConvNets en trois parties : A Beginner&#8217;s Guide To Understanding Convolutional Neural Networks de Adit Deshpande (un \u00e9tudiant aux USA), <a href=\"https:\/\/adeshpande3.github.io\/adeshpande3.github.io\/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks\/\">partie 1<\/a>, <a href=\"https:\/\/adeshpande3.github.io\/adeshpande3.github.io\/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks-Part-2\/\">partie 2<\/a> et <a href=\"https:\/\/adeshpande3.github.io\/adeshpande3.github.io\/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html\">partie 3<\/a>, datant de 2016.<\/p>\n<p>Dans la pratique, l\u2019ex\u00e9cution rapide d\u2019un r\u00e9seau de neurones convolutionnel n\u00e9cessite de pouvoir effectuer les op\u00e9rations math\u00e9matiques \u00e9voqu\u00e9es : des multiplications de matrices g\u00e9n\u00e9rant des matrices, la r\u00e9duction de r\u00e9solution de matrices, et la multiplication de vecteurs par des matrices de poids synaptiques pour g\u00e9n\u00e9rer un nouveau vecteur, correspondant \u00e0 la fin du processus de reconnaissance (\u201cfully connected\u201d). Ce sont des primitives math\u00e9matiques relativement simples au regard d\u2019autres m\u00e9canismes math\u00e9matiques d\u00e9j\u00e0 mis en \u0153uvre dans les processeurs mobiles comme les techniques d\u2019analyse du signal \u00e0 base de transform\u00e9es de Fourrier ou les algorithmes de compression de vid\u00e9o type H264 ou H265.<\/p>\n<p>Il est aussi important de pouvoir g\u00e9rer de mani\u00e8re optimale l\u2019entrainement du syst\u00e8me si toutefois le syst\u00e8me embarqu\u00e9 a cette capacit\u00e9. Pour ce faire, il faut pouvoir g\u00e9rer la propagation des erreurs en remontant le circuit \u00e0 partir de l\u2019arriv\u00e9e. Ce n\u2019est pas trop compliqu\u00e9 pour la multiplication de vecteurs par des matrices synaptiques qui peuvent \u00eatre invers\u00e9es. L\u2019entrainement peut \u00eatre n\u00e9cessaire pour reconnaitre un nouveau type d\u2019objet ou la voix de l\u2019utilisateur m\u00eame si certains mod\u00e8les permettent de s&#8217;en passer.<\/p>\n<p>Mais je n\u2019ai \u00e9voqu\u00e9 ici qu\u2019une seule des m\u00e9thodes de ConvNet : le tagging d\u2019images. Il existe bien d\u2019autres m\u00e9thodes adapt\u00e9es \u00e0 d\u2019autres usages, comme le d\u00e9coupage d\u2019une image en objets ou la modification d\u2019images en imitant d\u2019autres styles d\u2019images. Le deep learning est une discipline bouillonnante et la diversit\u00e9 des r\u00e9seaux de neurones associ\u00e9e est \u00e9tonnante. Un processeur peut normalement en supporter la diversit\u00e9 s&#8217;il est bien con\u00e7u.<\/p>\n<p><strong>L\u2019IA dans le Kirin 970<\/strong><\/p>\n<p>Lors de l\u2019annonce \u00e0 l\u2019IFA, les caract\u00e9ristiques exactes de ce NPU du Kirin 970 n\u2019ont pas \u00e9t\u00e9 vraiment pr\u00e9cis\u00e9es. On savait que c&#8217;est un schmillblick d&#8217;IA. C&#8217;est \u00e0 peu pr\u00e8s tout tout. C\u00f4t\u00e9 sp\u00e9cifications, il a une puissance de calcul de 1,92 TeraFlops et la capacit\u00e9 \u00e0 reconnaitre 2000 images en une minute alors que la g\u00e9n\u00e9ration pr\u00e9c\u00e9dente traditionnelle de chipsets Kirin en reconnaissait seulement une soixantaine. Soit dit en passant, on peut se demander \u00e0 quel usage cela correspond. Une petite division met la puce \u00e0 l\u2019oreille : 2000\/60 donne 33,33, pas loin de 30 images par secondes, qui est le nombre d\u2019image moyen d\u2019une vid\u00e9o. Cela veut donc dire que le NPU peut suivre en temps r\u00e9el un objet dans une vid\u00e9o. Aux usages et aux applications d\u2019en faire quelque chose !<\/p>\n<p>Gr\u00e2ce \u00e0 <a href=\"http:\/\/technewsblogs.com\/apps\/huawei-mate-10-and-mate-10-pro-launch-on-october-16th-more-kirin-970-details\/\">cet article<\/a> bien renseign\u00e9 paru apr\u00e8s le lancement, on a pu en savoir un peu plus sur ce NPU. Il utilise une conception de circuit provenant d\u2019une startup chinoise de Beijing, <strong>Cambricon Technology<\/strong>. Cette soci\u00e9t\u00e9 a \u00e9t\u00e9 cr\u00e9\u00e9e en 2016 et vient de lever au mois d\u2019aout la bagatelle de $100M, aupr\u00e8s d\u2019un investisseur public chinois qui ressemble \u00e0 notre Bpifrance. HiSilicon n\u2019a pas utilis\u00e9 telle que un bloc de processeur neuromorphique de Cambricon Technology. Ils ont travaill\u00e9 ensemble pour le personnaliser et l\u2019int\u00e9grer dans le Kirin 970 et notamment pour l\u2019adapter au processus de fabrication du chipset qui est en int\u00e9gration \u00e0 10 nm, fabriqu\u00e9 par TSMC \u00e0 Ta\u00efwan. Cambricon Technology est \u00e0 l\u2019origine de la conception du Cambrian 1A, un chipset neuromorphique pour l\u2019ex\u00e9cution de r\u00e9seaux de neurones dans des terminaux.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_7.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_thumb_7.png\" alt=\"image\" width=\"501\" height=\"141\" border=\"0\" \/><\/a><\/p>\n<p>De l\u2019architecture du NPU int\u00e9gr\u00e9 dans le Kirin 970, on ne sait qu\u2019une chose : il contient des multiplicateurs de matrices de 3&#215;3 pixels, sans que leur nombre soit pr\u00e9cis\u00e9. Or 3&#215;3 ressemble \u00e0 la taille d&#8217;un filtre typique de r\u00e9seau convolutionnel et non pas celle d&#8217;une image ou de feature map.<\/p>\n<p>On peut comparer cela avec d\u2019autres processeurs neuromorphiques d\u00e9di\u00e9s aux r\u00e9seaux de neurones. La premi\u00e8re g\u00e9n\u00e9ration de Tensor Processing Units (TPU) de <strong>Google<\/strong> annonc\u00e9e en 2016 comportait un multiplicateur de matrices de 256&#215;256 pixels. C\u2019est d\u2019ailleurs la r\u00e9solution habituelle de traitement d\u2019images pour leur reconnaissance. Dans la derni\u00e8re g\u00e9n\u00e9ration 2017, ils ont deux multiplicateurs de 128&#215;128 pixels. Chez <strong>Nvidia<\/strong>, la derni\u00e8re g\u00e9n\u00e9ration de GPU adapt\u00e9e \u00e0 ces traitements, le V100, en plus de milliers de c\u0153urs destin\u00e9s \u00e0 des op\u00e9rations \u00e9l\u00e9mentaires sur des nombres entiers et flottants, ils comprennent 640 c\u0153urs dot\u00e9s de multiplicateurs de matrices de 4&#215;4 pixels. C&#8217;est une des composantes des processeurs neuromorphiques mais pas la seule.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_8.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/image_thumb_8.png\" alt=\"image\" width=\"473\" height=\"260\" border=\"0\" \/><\/a><\/p>\n<p>Techniquement parlant, le Kirin 970 un <strong>ASIC<\/strong>, \u00e0 savoir un circuit dont toutes les portes logiques d\u00e9finissant son fonctionnement sont grav\u00e9s dans le dur. L\u2019alter \u00e9go des ASIC sont les variantes de <strong>FPGA <\/strong>dont les portes sont programmables par logiciel. C\u2019est une technique retenue pour certains chipsets neuromorphiques, notamment ceux qui sont produits par des startups comme le fran\u00e7ais <strong>Scortex<\/strong>. Un FPGA coute moins cher \u00e0 produire en petite s\u00e9rie qu\u2019un ASIC mais il est moins rapide et consomme plus d\u2019\u00e9nergie. Un ASIC n\u2019est int\u00e9ressant que si le composant est produit en volume. Cela rappelle, par analogie la diff\u00e9rence entre l\u2019impression 3D qui est int\u00e9ressante en faible volume par rapport \u00e0 la fabrication plus traditionnelle avec des moules (et pressage ou injection) qui ne sont rentabilis\u00e9s qu\u2019avec un gros volume de production.<\/p>\n<p>Comme les smartphones de Huawe\u00ef sont produits en dizaines de millions d\u2019exemplaires, la question du choix de la technologie ASIC ne se posait m\u00eame pas. De leur c\u00f4t\u00e9, les TPU de Google sont des ASIC tandis que les processeurs BrainWave de <strong>Microsoft<\/strong>, qu\u2019il utilise dans ses propres datacenters, sont en FPGA <strong>Intel <\/strong>en 10 nm, des Predix 10, issus du rachat d\u2019<strong>Altera <\/strong>fin 2015. Ils en ont optimis\u00e9 l\u2019architecture, notamment au niveau de la m\u00e9moire, pour qu\u2019ils ne soient pas p\u00e9nalis\u00e9s vis \u00e0 vis des ASIC.<\/p>\n<p>En termes de puissance, les chipsets de Nvidia et Google sont bien plus puissants que le NPU du Kirin 970 : celui de Google fait 92 TFlops\/s et le Nvidia atteint 120 TFLOPS, c&#8217;est-\u00e0-dire, 60 fois la puissance du Kirin 970 ! Les Nvidia sont produits en technologie 12 nm et ont 21,5 milliards de transistors, 4 fois plus que le total du Kirin 970 qui en fait 5,5. Mais ne comparons pas des choux et des carottes : le Kirin 970 est fait pour des smartphones et de la basse consommation tandis que les TPU de Google et le V100 de Nvidia sont con\u00e7us pour des serveurs et consomment plus de 100W.<\/p>\n<p>On n\u2019a aucune information sur les autres parties du NPU du Kirin 970. Mais elles devraient logiquement \u00e9galement comprendre :<\/p>\n<ul>\n<li>Une <strong>matrice de synapses <\/strong>reliant deux vecteurs de neurones pour g\u00e9rer la derni\u00e8re \u00e9tape de traitement des r\u00e9seaux convolutionnels (dite &#8220;fully connected&#8221;). Ca parall\u00e9lise bien les traitements de ces r\u00e9seaux de neurones. La taille de cette matrice est importante car elle indiquera en gros le nombre d&#8217;objets diff\u00e9rents qui peuvent \u00eatre reconnus par le syst\u00e8me. En gros, cela ressemble conceptuellement \u00e0 cela\u2026<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ai2-s2-public.s3.amazonaws.com\/figures\/2016-11-08\/5b2fbe1b71c22c8cf0a33ed3e0183ef777fd4123\/1-Figure2-1.png\" alt=\"Image result for synaptic neurons neuromorphic\" width=\"392\" height=\"243\" \/><\/p>\n<ul>\n<li>Des <strong>zones de traitements <\/strong>pour d&#8217;autres \u00e9tapes des r\u00e9seaux convolutionnels, comme pour le pooling qui g\u00e8re la r\u00e9duction de r\u00e9solution d&#8217;images d&#8217;\u00e9tapes interm\u00e9diaires. Mais on peut \u00e9ventuellement utiliser les multiplicateurs de matrice existant.<\/li>\n<li>De la <strong>m\u00e9moire rapide <\/strong>pour que les param\u00e8tres du r\u00e9seau de neurones soient rapidement acc\u00e9d\u00e9s et \u00e9ventuellement modifi\u00e9s par le multiplicateur de matrices et la matrice de synapses.<\/li>\n<\/ul>\n<p>Du c\u00f4t\u00e9 du logiciel, le Kirin 970 supporte les applications de deep learning r\u00e9alis\u00e9es avec la biblioth\u00e8que open source <strong>TensorFlow<\/strong> originaire de Google et sa d\u00e9clinaison pour Android mobile, TensorFlow Lite, ainsi qu\u2019avec <strong>Caffe<\/strong>. Ce sont deux des outils les plus courants de d\u00e9veloppement d\u2019applications d\u2019IA couvrant le machine learning et toutes les formes de r\u00e9seaux de neurones de deep learning.<\/p>\n<p>Le NPU du Kirin 970 occuperait une surface \u00e9quivalente \u00e0 un seul c\u0153ur du Kirin 970 sachant que celui-ci en comprend 8 de traditionnels, des c\u0153urs ARM, plus 12 c\u0153urs de GPU ARM MALI G72. Ces c\u0153urs de CPU sont pr\u00e9cis\u00e9ment quatre c\u0153urs 64 bits A73 tournant \u00e0 2,40 GHz et quatre autres, A53 tournant \u00e0 1,80 GHz dans ce qu\u2019ARM appelle l\u2019architecture BIGlittle associant des c\u0153urs puissants et rapides et des c\u0153urs moins rapides et moins puissants, et moins consommateurs d\u2019\u00e9nergie, permettant d\u2019augmenter l\u2019autonomie des smartphones.<\/p>\n<p>L\u2019un des int\u00e9r\u00eats de ce NPU n\u2019est pas seulement la vitesse de reconnaissance d\u2019images, mais aussi sa faible consommation. Elle sera utile pour les applications de reconnaissance de la parole. la startup fran\u00e7aise <strong>Snips<\/strong> propose d\u00e9j\u00e0 une solution de reconnaissance de la parole embarqu\u00e9e dans un smartphone, en exploitant des chipsets mobiles standards. Elle pourra \u00e9ventuellement exploiter les capacit\u00e9s de ce processeur et de ses \u00e9quivalents pour am\u00e9liorer la performance de la reconnaissance de la parole en local, et surtout, en diminuant la consommation d\u2019\u00e9nergie associ\u00e9e. Le fait de ne pas avoir \u00e0 faire un aller et retour avec un serveur est en tout cas un avantage ind\u00e9niable pour la reconnaissance de la parole.<\/p>\n<p>Ce Kirin 970 a d\u2019autres fonctionnalit\u00e9s qui n\u2019ont rien \u00e0 voir avec l\u2019IA, qui nous int\u00e9ressent moins ici :<\/p>\n<ul>\n<li>Un modem &#8220;double data&#8221; qui permet d\u2019utiliser la connexion cellulaire data sur deux cartes SIM en m\u00eame temps<\/li>\n<li>Un modem LTE Cat18 supportant 1,2 GBits\/s, un d\u00e9bit auquel vous n\u2019aurez jamais acc\u00e8s en pratique, comme pour votre fibre. Le premier \u00e0 supporter le Cat18 semble \u00eatre Qualcomm avec son modem X20 annonc\u00e9 d\u00e9but 2017.<\/li>\n<li>La compression de vid\u00e9o 4K, en 2160p60 pour le d\u00e9codage et en 2160p30 pour l\u2019encodage, semble-t-il en HDR (haute dynamique) histoire d\u2019\u00eatre en phase avec les TV qui supportent le HDR depuis quelques temps.<\/li>\n<li>Son processeur d\u2019image (Imaging DSP) qui n\u2019a rien \u00e0 voir avec le NPU permettra de mieux g\u00e9rer la prise de photos, notamment en mouvement et en basse lumi\u00e8re.<\/li>\n<\/ul>\n<p><strong>Patient num\u00e9ro un<\/strong><\/p>\n<p>Nous avons donc l\u00e0 un produit hybride qui int\u00e8gre un design de chipset neuromorphique coupl\u00e9 au design d&#8217;un chipset classique de smarphones.<\/p>\n<p>Il est fascinant d\u2019observer la sauce marketing de l\u2019intelligence artificielle ! Vu de pr\u00e8s, ce processeur magique faisant de l\u2019IA est nouveau parce qu\u2019il contient des multiplicateurs de matrices de 3&#215;3 valeurs. Ce qui n\u2019a rien d\u2019intelligent et est tr\u00e8s basique d\u2019un point de vue conceptuel. L\u2019intelligence est situ\u00e9e dans l\u2019organisation des r\u00e9seaux de neurones convolutionnels qui exploitent ces multiplicateurs de matrice. L\u2019IA est dans le logiciel ! Mais on pourra mieux juger sur pi\u00e8ces lorsque les sp\u00e9cifications d\u00e9taill\u00e9es de ce NPU seront publiques. Au pire, apr\u00e8s la sortie des smartphones l\u2019int\u00e9grant et apr\u00e8s que les geeks de <strong>Chipworks <\/strong>aient analys\u00e9 leur processeur au microscope.<\/p>\n<p>Heureusement, quelques exemples concrets d\u2019usages \u00e9taient indiqu\u00e9s lors du lancement : de la r\u00e9alit\u00e9 augment\u00e9e \u00e0 faible consommation, de la compr\u00e9hension du langage aussi bien dans les images que dans la voix, de la vision artificielle et une am\u00e9lioration des automatismes de prise de photos en fonction des caract\u00e9ristiques des objets ou personnes photographi\u00e9s. Et la peinture en temps r\u00e9el d\u2019une photo qui consiste \u00e0 appliquer un style de dessin au pinceau sur une image, un des usages des r\u00e9seaux de neurones convolutionnels \u00e0 double entr\u00e9e, l\u2019image de d\u00e9part et le style \u00e0 lui appliquer, ce qui est tout \u00e0 fait secondaire. Le tout sans v\u00e9ritables d\u00e9monstration. Il faudra au minimum attendre l\u2019annonce en octobre des smartphone Mate 10 int\u00e9grant le Kirin 970 pour appr\u00e9hender cette IA mobile.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/Huawei-Kirin-970-Usages.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border: 0px;\" title=\"Huawei Kirin 970 Usages\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/WindowsLiveWriter\/f0507aace680_BD9F\/Huawei-Kirin-970-Usages_thumb.jpg\" alt=\"Huawei Kirin 970 Usages\" width=\"459\" height=\"235\" border=\"0\" \/><\/a><\/p>\n<p>Qui sera le suivant ? Ce processeur va \u00eatre le patient num\u00e9ro 1 d\u2019une longue s\u00e9rie auquel ses successeurs et copies seront compar\u00e9s. On imagine la mani\u00e8re dont Apple pourrait int\u00e9grer cette innovation r\u00e9volutionnaire dans ses iPhone 8, 9 ou 10 selon leur rapidit\u00e9 d\u2019action. Il est probable qu\u2019au moment de ce lancement, on aura oubli\u00e9 les balbutiements de ce pionnier qu\u2019est Huawe\u00ef.<\/p>\n<p><strong>Patient num\u00e9ro deux<\/strong><\/p>\n<p>Petite mise \u00e0 jour du 12 septembre 2017 : finalement, Apple a int\u00e9gr\u00e9 un &#8220;Neural Engine&#8221; dans ses nouveaux iPhone 8 et iPhone X dont l&#8217;existence avait \u00e9t\u00e9 d\u00e9voil\u00e9e en mai 2017. Il s&#8217;agit du &#8220;A11 Bionic Neural Engine&#8221;, une fonctionnalit\u00e9 qui est int\u00e9gr\u00e9e dans le nouveau chipset des iPhone 8 et X, &#8220;A11 Bionic&#8221;. Il sert notamment \u00e0 SIRI ainsi qu&#8217;au login par d\u00e9tection 3D du visage avec la version miniaturis\u00e9e du capteur 3D de PrimeSense qui est int\u00e9gr\u00e9e dans l&#8217;iPhone X. Il permet aussi de g\u00e9rer des emoji qui captent les mouvements du visage de l&#8217;utilisateur. Il semble que le Neural Engine soit aussi utilis\u00e9 dans les fonctions photo avanc\u00e9es de ces iPhones, comme le mode portrait qui modifie l&#8217;\u00e9clairage du visage pour simuler un \u00e9clairage de studio.<\/p>\n<p>L&#8217;A11 Bionic Neural Engine compl\u00e8te le nouveau GPU de ces A11 qui remplace les Power VR de l&#8217;Anglais Imagination Technology. Apple a indiqu\u00e9 que les capacit\u00e9s de ce &#8220;Neural Engine&#8221; \u00e9taient de 900 millions d&#8217;op\u00e9rations par seconde qui repr\u00e9sentent visiblement la moiti\u00e9 de la capacit\u00e9 de 1,92 TFlops du Kirin 970 de Huawei. Apple pr\u00e9cisait aussi que c&#8217;\u00e9tait un composant \u00e0 deux c\u0153urs, ce qui ne veut pas dire grand chose pour un composant neuromorphique. Est-ce \u00e0 dire qu&#8217;il ne comporte que deux multiplicateurs de matrices (ou tenseurs), ce qui serait l\u00e9ger ou pas en fonction de la taille des matrices ?<\/p>\n<p>A ce stade, aucune information n&#8217;a filtr\u00e9 sur les caract\u00e9ristiques pr\u00e9cises de ce Neural Engine. Il faudra attendre pour savoir ce qu&#8217;il a dans le ventre et les interfaces qu&#8217;il propose aux d\u00e9veloppeurs et le support \u00e9ventuel des nombreux SDK type TensorFlow, Theano et Caffe. Il est probable qu&#8217;il supporte les <a href=\"https:\/\/developer.apple.com\/documentation\/accelerate\/bnns\">APIs BNNS <\/a>de d\u00e9veloppement de r\u00e9seaux de neurones. Ces APIs supportent la cr\u00e9ation de r\u00e9seaux convolutionnels avec des couches de convolution, de pooling et des couches de neurones &#8220;fully connected&#8221; permettant notamment de reconna\u00eetre des images ou des phon\u00e8mes pour la reconnaissance vocale. Il y a aussi les APIs\u00a0<a href=\"https:\/\/developer.apple.com\/documentation\/coreml\">Core ML<\/a>, annonc\u00e9es lors de la derni\u00e8re conf\u00e9rence d\u00e9veloppeurs Apple.<\/p>\n<p>On peut par contre s&#8217;attendre \u00e0 de belles innovations c\u00f4t\u00e9 applications car avec tous ces capteurs et processeurs, ces nouvelles g\u00e9n\u00e9rations de smartphones ont un beau potentiel \u00e0 r\u00e9v\u00e9ler, notamment dans l&#8217;univers assez large du bien \u00eatre et de la sant\u00e9. Qui plus est, sans n\u00e9cessiter d&#8217;envoyer ses donn\u00e9es personnelles dans le cloud. Ce n&#8217;est que le d\u00e9but d&#8217;une nouvelle \u00e8re applicative pour la mobilit\u00e9 !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lors de l&#8217;IFA 2017 \u00e0 Berlin, le chinois Huawe\u00ee annon\u00e7ait le Kirin 970, le premier chipset mobile int\u00e9grant de l&#8217;IA, leur &#8220;Neural Processing Unit&#8221; (vid\u00e9o), issu de sa filiale de semiconducteurs HiSilicon. Il \u00e9quipera les futurs smartphones de Huawe\u00ef, les Mate 10 qui seront lanc\u00e9s en octobre 2017. \u00a0Ce Kirin 970 permet de traiter plus [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1909,19,2659,23,529,5],"tags":[482,2967,2470,2960,710,1088,2963,2458,504,2965,2966,2961,2962,2964],"class_list":["post-14936","post","type-post","status-publish","format-standard","hentry","category-composants-loisirs-numeriques","category-google","category-intelligence-artificielle","category-logiciels-libres","category-mobilite-loisirs-numeriques","category-technologie","tag-cnn","tag-convnets","tag-google","tag-hisilicon","tag-huawei","tag-ibm","tag-mate","tag-microsoft","tag-qualcomm","tag-reseaux-convolutionnels","tag-rnn","tag-tpu","tag-truenorth","tag-yann-lecun"],"views":45236,"_links":{"self":[{"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/posts\/14936","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/comments?post=14936"}],"version-history":[{"count":0,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/posts\/14936\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/media?parent=14936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/categories?post=14936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/tags?post=14936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}