{"id":18450,"date":"2020-05-19T12:31:43","date_gmt":"2020-05-19T11:31:43","guid":{"rendered":"https:\/\/www.oezratty.net\/wordpress\/?p=18450"},"modified":"2020-05-26T12:53:38","modified_gmt":"2020-05-26T11:53:38","slug":"nvidia-a100","status":"publish","type":"post","link":"https:\/\/www.oezratty.net\/wordpress\/2020\/nvidia-a100\/","title":{"rendered":"Le nouveau GPU A100 de Nvidia"},"content":{"rendered":"<p>Trois ans apr\u00e8s le lancement de son GPU V100 de g\u00e9n\u00e9ration Volta qui est devenu un standard de l\u2019\u00e9quipement de data-centers pour alimenter nombre d\u2019applications de deep learning et machine learning, Nvidia lan\u00e7ait enfin son successeur, le A100 Ampere, le 14 juin 2020. Cela faisait un bout de temps que je l\u2019attendais.<\/p>\n<p>J\u2019anticipais ce lancement au printemps 2020 dans le dernier <a href=\"https:\/\/www.oezratty.net\/wordpress\/2020\/rapport-ces-2020\/\">Rapport du CES 2020<\/a>. Le voici donc enfin arriv\u00e9 !<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Nvidia-A100.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Nvidia A100\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Nvidia-A100_thumb.jpg\" alt=\"Nvidia A100\" width=\"457\" height=\"257\" border=\"0\" \/><\/a><\/p>\n<p>Comme j\u2019aime bien d\u00e9piauter les processeurs extr\u00eames, celui-l\u00e0 est pass\u00e9 \u00e0 la moulinette ! Cela vous changera des qubits de l\u2019informatique quantique que j\u2019ai l\u2019habitude de couvrir depuis deux ans (mais nous y reviendrons, ne vous inqui\u00e9tez pas\u2026) ! Au passage, je tente de r\u00e9pondre dans cet article \u00e0 quelques de questions de newbie que je me posais sur les calculs de matrices et d\u2019expressions math\u00e9matiques \u00e0 base de nombres flottants.<\/p>\n<p><strong>Un contexte d\u00e9favorable<\/strong><\/p>\n<p>La crise du covid-19 a \u00e9videmment perturb\u00e9 ces plans de lancement. \u00c0 la fois au niveau de sa pr\u00e9paration par les \u00e9quipes de Nvidia et par celles de ses partenaires et notamment des fabs de TSMC \u00e0 Taiwan. Mais aussi, j\u2019ai l\u2019impression, parce que tout simplement, pendant le confinement et la mont\u00e9e exponentielle des d\u00e9c\u00e8s, il \u00e9tait inconvenant de lancer quoi que ce soit qui ne soit pas reli\u00e9 au covid quasiment dans tous les domaines.<\/p>\n<p>Qui plus est, l\u2019IA n\u2019\u00e9tait franchement pas \u201c\u00e0 la mode\u201d pendant cette crise covid-19. On a d\u00e9couvert que l\u2019IA et le machine learning \u00e9taient loin de fournir toutes les r\u00e9ponses face \u00e0 l\u2019inconnu. Voir \u00e0 ce sujet l\u2019excellent billet <a href=\"https:\/\/news.flint.media\/2020\/05\/17\/covid-19-mais-que-fait-donc-lintelligence-artificielle-flint-dimanche-32\/\">Mais o\u00f9 est pass\u00e9e l\u2019intelligence artificielle ?<\/a> de Benoit Rapha\u00ebl, 16 mai 2020.<\/p>\n<p>Et pour cause, l\u2019IA <em>deep learninesque<\/em> manquait de donn\u00e9es d\u2019entra\u00eenement ! Comme le machine learning est un r\u00e9troviseur g\u00e9ant, lorsque la route et les r\u00e8gles de conduite changent presque enti\u00e8rement, il est compl\u00e8tement perdu. Pour pr\u00e9dire les cons\u00e9quences d\u2019une \u00e9pid\u00e9mie, on a plus besoin de r\u00e9seaux multi-agents permettant de mod\u00e9liser sa propagation que de machine learning bas\u00e9 sur des donn\u00e9es d\u2019entra\u00eenement. Or les r\u00e9seaux multi-agents sont un peu le parent pauvre de l\u2019IA d\u2019aujourd\u2019hui. Depuis cinq ans, on n\u2019a d\u2019yeux que pour le deep learning qui est cens\u00e9 tout faire.<\/p>\n<p>L\u2019IA a toutefois jou\u00e9 un r\u00f4le dans des domaines tr\u00e8s pr\u00e9cis de la recherche comme pour accompagner le criblage de mol\u00e9cules, cette technique qui sert \u00e0 identifier des pathologies pouvant \u00eatre trait\u00e9es par des m\u00e9dicaments existants pour lesquels ils n\u2019avaient pas \u00e9t\u00e9 initialement con\u00e7us. Elle a aussi servi \u00e0 analyser des radios du poumon, dans la lign\u00e9e des nombreux syst\u00e8mes d&#8217;imagerie \u00e0 base d&#8217;IA qui existent depuis quelques ann\u00e9es, sans d&#8217;ailleurs \u00eatre encore d\u00e9ploy\u00e9s \u00e0 grande \u00e9chelle.<\/p>\n<p>Mais l&#8217;empirisme a eu le dessus et on a surtout entendu parler de l\u2019hydroxychloroquine qui n\u2019avait pas du tout \u00e9t\u00e9 s\u00e9lectionn\u00e9e avec des m\u00e9thodes \u00e0 base d&#8217;IA. Le covid a surtout mis en \u00e9vidence les biais humains et en particulier les biais de corr\u00e9lation simplificateurs, portant notamment sur la comparaison des m\u00e9thodes de limitation de la propagation du virus (confinement ou pas, \u2026). Un coup, on mettait en avant la distanciation sociale, puis les tests, puis les masques, puis la pollution, puis le groupe sanguin, puis les variantes du virus, puis la densit\u00e9 de la population et son \u00e2ge moyen. Et pour cause, nous sommes face \u00e0 un syst\u00e8me multi-variant complexe dont on d\u00e9couvre progressivement les variables !<\/p>\n<p>Une autre raison mettait l\u2019IA en veilleuse : elle n\u2019est pas la panac\u00e9e dans une situation o\u00f9 le ch\u00f4mage complet ou partiel explose, surtout pour les cols blancs, qui sont les plus menac\u00e9s par l\u2019automatisation. Ce n\u2019\u00e9tait pas le moment de faire empirer la situation !<\/p>\n<p><strong>La soif de puissance des processeurs de l\u2019IA<\/strong><\/p>\n<p>Ce qui ne m\u2019a pas emp\u00each\u00e9 de r\u00e9cup\u00e9rer les contenus de la conf\u00e9rence <a href=\"https:\/\/www.linleygroup.com\/events\/proceedings.php?num=48\">Linley Spring Processor Conference 2020<\/a> tenue virtuellement entre le 6 et le 9 avril 2020 (le mot de passe des PDF s&#8217;obtient en fournissant ses coordonn\u00e9es). Ses 496 slides permettent de faire le point sur l\u2019actualit\u00e9 des nombreuses technologies de processeurs d\u00e9di\u00e9s \u00e0 l\u2019IA, le th\u00e8me central de cette \u00e9dition de cette conf\u00e9rence annuelle sur les processeurs.<\/p>\n<p>J\u2019y ai d\u00e9nich\u00e9 ce slide \u00e9vocateur de la croissance de la taille des mod\u00e8les de deep learning qu\u2019il faut entra\u00eener. Cette taille est li\u00e9e au fait que des mod\u00e8les avec un grand nombre de param\u00e8tres (en gros, un nombre de neurones dans un r\u00e9seau de neurones) sont plus fiables, comme pour la reconnaissance d\u2019images. Plus ils sont grands, plus est lourde la t\u00e2che de leur entra\u00eenement. C\u2019est li\u00e9 au besoin d\u2019ajuster tous les param\u00e8tres des nombreux neurones mais aussi parce que cela s\u2019accompagne d\u2019une augmentation du nombre d\u2019objets de la base d\u2019entra\u00eenement.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/image-47.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/image_thumb-45.png\" alt=\"image\" width=\"449\" height=\"228\" border=\"0\" \/><\/a><\/p>\n<p>Tout ceci nous rappelle un point cl\u00e9 du deep learning : les t\u00e2ches d\u2019entra\u00eenement sont tr\u00e8s lourdes alors que, comparativement, une inf\u00e9rence pour reconna\u00eetre un objet, est bien plus rapide. De plusieurs ordres de grandeur. C\u2019est la raison pour laquelle on peut facilement d\u00e9l\u00e9guer ces t\u00e2ches d\u2019inf\u00e9rence \u00e0 des processeurs embarqu\u00e9s dans les objets ou proches des objets (edge AI).<\/p>\n<p>Le GPU A100 de Nvidia dont il est question ici sert \u00e0 la fois aux t\u00e2ches d\u2019entrainement mais aussi aux inf\u00e9rences r\u00e9alis\u00e9es en volume sur des serveurs de data-centers. Mais il est aussi d\u00e9ployable dans l\u2019edge AI, pour traiter les donn\u00e9es au plus proche des besoins sans passer par le cloud. Il succ\u00e8de au V100 de g\u00e9n\u00e9ration Volta lanc\u00e9 en 2017 et qui \u00e9tait devenu le standard de l\u2019\u00e9quipement dans le cloud pour l\u2019IA. On le trouve par exemple chez OVH comme chez Scaleway (ex Online.net, filiale d\u2019Iliad) ou CleverCloud, sans compter les g\u00e9ants Amazon AWS et Microsoft Azure. Il \u00e9quipe aussi une bonne part des supercalculateurs r\u00e9cents comme l\u2019IBM Summit et ses 27 648 GPU V100 compl\u00e9t\u00e9s de 9216 CPU Power9 maison d\u2019IBM \u00e0 22 c\u0153urs, totalisant 200 petaFLOPS et consommant 13 MW.<\/p>\n<p><strong>Un lancement complet<\/strong><\/p>\n<p>Nvidia n\u2019y est pas all\u00e9 de main morte dans le lancement du 14 mai 2020 puisque le processeur A100 \u00e9tait annonc\u00e9 accompagn\u00e9 de toute une panoplie de mat\u00e9riel :<\/p>\n<ul>\n<li>Des serveurs Nvidia <strong>DGX A100 <\/strong>de 5 petaflops (\u00e9valu\u00e9s en FP16) int\u00e9grant 8 GPU A100 compl\u00e9t\u00e9s de 15 To de SSD, de neuf cartes r\u00e9seaux Mellanox ConnectX-6 VPI de 200 GBits\/s et de deux CPU AMD EPYC 7742 Rome, dont nous allons aussi parler plus loin et qui remplacent des processeurs Intel des pr\u00e9c\u00e9dents serveurs DGX. Notamment, parce qu\u2019ils sont les premiers \u00e0 supporter le bus PCI 4.0 qui est plus rapide que le 3.0, en particulier pour les acc\u00e8s SSD. Le DGX A100 est lanc\u00e9 \u00e0 $200K ! Rappelons que l\u2019isra\u00e9lien <strong>Mellanox <\/strong>a \u00e9t\u00e9 acquis par Nvidia en 2019. Nous avons donc ici une int\u00e9gration de son offre de connectivit\u00e9 r\u00e9seau tr\u00e8s haut d\u00e9bit dans l\u2019ensemble de l\u2019architecture de serveur Nvidia qui prend tout son sens. En plus, celle-ci est point \u00e0 point avec de nombreux serveurs, permettant une r\u00e9partition optimale des traitements en calcul distribu\u00e9, un point cl\u00e9 pour le calcul haute performance.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/EfjVtoWg2hFebxRrravv7UabqhddpaEL54SLnyH3wtuoTZ0OPZT1bn3dO9mq9F6JPtJyc5iO1zlcjIngod_I13fx5S5umRO7ICv-mcjDPJGIzBgQVINB532ozz5jmBv2gNEhdnOj\" width=\"527\" height=\"311\" \/><\/p>\n<ul>\n<li>Des serveurs de partenaires constructeurs comme <strong>Gigabyte <\/strong>et <strong>SuperMicro <\/strong>qui reprennent la sp\u00e9cification du DGX A100.<\/li>\n<li>Le <strong>supercalculateur DGX A100 SuperPOD<\/strong>, comprenant jusqu\u2019\u00e0 140 serveurs DGX A100 avec 1120 GPU A100 et 4 Po de stockage. Il faut la salle blanche d\u00e9di\u00e9e qui va avec ! A raison de 4 DGX par rack, cela n\u00e9cessite donc au minimum 35 racks.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.nvidia.com\/wp-content\/uploads\/2020\/05\/NVIDIA-SuperPOD-press-image.jpg\" alt=\"DGX SuperPOD Reaches New Heights with DGX A100 | NVIDIA Blog\" width=\"529\" height=\"213\" \/><\/p>\n<ul>\n<li>Une d\u00e9clinaison du A100 pour l\u2019embarqu\u00e9 avec la carte Jetson <strong>EGX A100 <\/strong>qui a l\u2019air de contenir un GPU A100 normal. Elle peut notamment servir \u00e0 analyser les images provenant de dizaines de cam\u00e9ras de surveillance. Et par exemple, de compter la proportion des gens qui portent des masques dans les lieux publics surveill\u00e9s ! Le covid revient par la fen\u00eatre !<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/NVIDIA-EGX-A100-Converged-Accelerator.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"NVIDIA EGX A100 Converged Accelerator\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/NVIDIA-EGX-A100-Converged-Accelerator_thumb.jpg\" alt=\"NVIDIA EGX A100 Converged Accelerator\" width=\"536\" height=\"323\" border=\"0\" \/><\/a><\/p>\n<ul>\n<li>Enfin, l\u2019ensemble est accompagn\u00e9 d\u2019une nouvelle version 11 de la <strong>biblioth\u00e8que logicielle CUDA <\/strong>qui est support\u00e9 par les principaux frameworks de deep learning du march\u00e9 dont TensorFlow, MXNet et PyTorch.<\/li>\n<\/ul>\n<p>Les d\u00e9tails sur le processeur sont disponibles dans <a href=\"https:\/\/devblogs.nvidia.com\/nvidia-ampere-architecture-in-depth\/\">NVIDIA Ampere Architecture In-Depth<\/a> par Ronny Krashinsky, Olivier Giroux, Stephen Jones, Nick Stam et Sridhar Ramaswamy, mai 2020. Olivier Giroux est un canadien, \u201cdistinguished architect\u201d et par ailleurs coordinateur d\u2019un groupe de travail sur le parall\u00e9lisme du calcul \u00e0 l\u2019ISO. Il est chez Nvidia depuis 2002.<\/p>\n<p>Nvidia a aussi publi\u00e9 le livre blanc <a href=\"https:\/\/www.nvidia.com\/content\/dam\/en-zz\/Solutions\/Data-Center\/nvidia-ampere-architecture-whitepaper.pdf\">NVIDIA A100 Tensor Core GPU Architecture<\/a> (84 pages) pour ceux d&#8217;entre vous qui souhaiteraient creuser tout cela.<\/p>\n<p>C\u2019est sur le processeur que je vais me focaliser ici m\u00eame. Vous pouvez aussi visualiser la <a href=\"https:\/\/www.youtube.com\/watch?v=onbnb_D1wC8\">vid\u00e9o du lancement<\/a> du CEO de Nvidia, Jensen Huang, tourn\u00e9e dans sa cuisine.<\/p>\n<p><strong>La gravure en 7 nm<\/strong><\/p>\n<p>L\u2019un des sauts technologiques cl\u00e9s de ce processeur A100 est le passage d\u2019une gravure de transistors de 12 nm pour le V100 de 2017 \u00e0 7 nm, ce qui a permis \u00e0 surface presque \u00e9gale de plus que doubler le nombre de transistors (on passe de 815 mm\u00b2 \u00e0 826 mm\u00b2). Cette technologie 7 nm existe depuis plus d\u2019un an. Elle est d\u00e9j\u00e0 utilis\u00e9e pour produire les derni\u00e8res g\u00e9n\u00e9rations de chipsets pour smartphones comme ceux de Qualcomm, HiSilicon (qui \u00e9quipent les smartphones Huawei et Honor) et Samsung. Elle est aussi employ\u00e9e dans les derni\u00e8res g\u00e9n\u00e9rations de CPU et GPU d\u2019AMD.<\/p>\n<p>On se retrouve avec un processeur de 54,4 milliards de transistors pour 21 milliards dans le V100. C\u2019est un record pour une puce monolithique de cette cat\u00e9gorie. Il bat le record pr\u00e9c\u00e9dent du CPU AMD Zen 2 Epyc Rome 7H12 avec ses 39,54 milliards de transistors fabriqu\u00e9s en 7 nm chez TSMC et ses 64 c\u0153urs g\u00e9n\u00e9ralistes. Mais celui-ci \u00e9tait un assemblage de neuf puces : huit en 7 nm qui contiennent les c\u0153urs qui sont agenc\u00e9s autour d\u2019une neuvi\u00e8me puce de gestion des entr\u00e9es\/sorties et est grav\u00e9e en 14 nm pour des raisons \u00e9conomiques. La fr\u00e9quence d\u2019horloge de base de ce processeur AMD haut de gamme est de 2,60 GHz, extensible \u00e0 3,3 GHz, le tout avec une consommation (TDP) de 280 W. Sa m\u00e9moire cache est de 256 Mo. Et la bande passante m\u00e9moire est de 204,8 Go\/s. Son prix de vente au lancement mi 2019 \u00e9tait sup\u00e9rieur \u00e0 $7K.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/AMD-EPYC-Rome.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"AMD EPYC Rome\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/AMD-EPYC-Rome_thumb.jpg\" alt=\"AMD EPYC Rome\" width=\"402\" height=\"470\" border=\"0\" \/><\/a><\/p>\n<p>Mais ce chipset AMD concurrence surtout les CPU Xeon d\u2019Intel pour les serveurs g\u00e9n\u00e9ralistes de data-centers. Il ne joue pas sp\u00e9cifiquement dans la cours des serveurs de deep learning comme les GPU de Nvidia. Et on le retrouve donc dans le serveur DGX A100 en lieu et place d\u2019un Intel Xeon.<\/p>\n<p>Par comparaison, le A100 est fourni dans un package de 7 chipsets dont le processeur lui-m\u00eame avec ses 54,4 milliards de transistor, entour\u00e9 de 6 chipsets de m\u00e9moire d\u2019acc\u00e8s rapide au standard HBM2E.<\/p>\n<p><strong>Architecture d\u00e9taill\u00e9e du GPU<\/strong><\/p>\n<p>Nvidia a conserv\u00e9 cette architecture hybride associant des unit\u00e9s de traitement arithm\u00e9tiques classiques et des tensor cores. La plupart des concurrents qui visent le march\u00e9 du deep learning ont tendance \u00e0 ne retenir que les derniers ou tout du moins des architectures de calcul moins h\u00e9t\u00e9rog\u00e8nes. Le choix de Nvidia lui permet sans doute de viser un march\u00e9 large englobant \u00e0 la fois les besoins du machine learning, du deep learning et du calcul haute performance. Il semble ainsi que les grands supercalculateurs qui int\u00e8grent des milliers de GPU V100 de 2017 comme le Jean Zay du GENCI \u00e0 Orsay ou l\u2019IBM Summit \u00e0 l\u2019Oark Ridge National Laboratory du D\u00e9partement de l\u2019Energie aux USA servent surtout \u00e0 du calcul haute performance.<\/p>\n<p>Gr\u00e2ce \u00e0 l\u2019augmentation de la densit\u00e9 du processeur, le nombre d\u2019unit\u00e9s de traitement est modifi\u00e9. On passe ainsi de 13 440 \u00e0 20 480 unit\u00e9s de traitement arithm\u00e9tique entre le GV100 et le GV100. Ces c\u0153urs sont des ALU (arithmetic logic units) de trois types pour faire des calculs en nombres entiers 32 bits, flottants 32 et 64 bits. Dans la nomenclature Nvidia, seuls les ALU FP32 sont consid\u00e9r\u00e9s comme \u00e9tant des c\u0153urs CUDA.<\/p>\n<p>On passe ensuite de 732 \u00e0 512 tensor cores. Ces donn\u00e9es comparent en fait les GPU GV100 et GA100 qui sont l\u00e9g\u00e8rement plus puissants que les V100 et A100. La diff\u00e9rence entre ces deux versions des GPU est un peu <em>confusing<\/em> car il n\u2019est pas \u00e9vident de trouver comment la version \u201cG\u201d plus puissante est distribu\u00e9e vu que les serveurs DGX n\u2019en contiennent pas. Nvidia m\u2019a confirm\u00e9 que la version commerciale du GA100 n\u2019existait pas encore. Voir <a href=\"https:\/\/arxiv.org\/pdf\/2001.05585.pdf\">GPU Tensor Cores for fast Arithmetic Reductions<\/a> par Cristobal A. Navarro &amp; al, 2020 (16 pages) qui d\u00e9crit bien les principes g\u00e9n\u00e9raux des tensor cores de la g\u00e9n\u00e9ration V100.<\/p>\n<p>Est-ce une r\u00e9gression pour les tensor cores dont le nombre est en baisse ? Pas du tout. Les c\u0153urs du V100\/GV100 manipulaient des matrices de 4&#215;4 alors que ceux du A100\/GA100 ont l\u2019air de pouvoir manipuler des matrices quatre fois plus grandes de 8&#215;8 flottants.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/GA100.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"GA100\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/GA100_thumb.jpg\" alt=\"GA100\" width=\"590\" height=\"268\" border=\"0\" \/><\/a><\/p>\n<p>J\u2019avais lu en 2019 quelque part que Nvidia pr\u00e9voyait d\u2019augmenter la taille de ses matrices pour optimiser le traitement du deep learning. En effet, les mod\u00e8les de deep learning qui sortent de biblioth\u00e8ques comme TensorFlow de Google doivent convertir leurs calculs matriciels qui manipulent souvent des images de 227 ou 224 pixels de c\u00f4t\u00e9 en calculs adapt\u00e9s aux tailles de matrices g\u00e9r\u00e9es dans ces processeurs. Les filtres utilis\u00e9s dans les convolutions des r\u00e9seaux de neurones de reconnaissance d\u2019image sont de taille variable, allant de 3 \u00e0 environ 11 pixels. En supportant des matrices un peu plus grandes, le support de ces tailles variables de filtres est facilit\u00e9 et le parall\u00e9lisme des traitements potentiellement am\u00e9lior\u00e9. Avec le GPU V100, la biblioth\u00e8que CUDA comprenait d\u00e9j\u00e0 des op\u00e9rations de multiplications de matrices 16&#215;16, qui \u00e9taient donc converties en multiplications de matrices 4&#215;4 pour l\u2019ex\u00e9cution en parall\u00e8le dans plusieurs tensor cores du GPU. Ce genre de GPU permet en effet du calcul massivement parall\u00e8le ! (<a href=\"https:\/\/www.olcf.ornl.gov\/wp-content\/uploads\/2019\/11\/ORNL_Tensor_Core_Training_Aug2019.pdf\">source<\/a> du sch\u00e9ma <em>ci-dessous<\/em>)<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Nvidia-Matrix-Product.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"Nvidia Matrix Product\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Nvidia-Matrix-Product_thumb.jpg\" alt=\"Nvidia Matrix Product\" width=\"592\" height=\"313\" border=\"0\" \/><\/a><\/p>\n<p>La hi\u00e9rarchie des unit\u00e9s de traitement du GA100 comprend 8 GPC (GPU processing clusters) qui contiennent chacun 8 TPC (texture processing clusters) qui contiennent chacun 2 SM (streaming multiprocessor). Ce qui fait un total de 128 streaming processors. Mais nuance, le processeur existe en deux versions : le GA100 avec 128 SM et 512 tensor cores et le A100 avec 108 SM et 432 tensor cores.<\/p>\n<p>Autre diff\u00e9rence dans les tensor cores : dans le V100 de 2017, la calcul matriciel c\u00f4t\u00e9 multiplication se faisait sur un flottant 16 bits, et l\u2019addition avec une troisi\u00e8me matrice du flottant 32 bits (sch\u00e9ma <em>ci-dessous, <\/em><a href=\"https:\/\/arxiv.org\/pdf\/1803.04014.pdf\">source<\/a>). Il se trouve que le \u201cmixed precision deep learning training\u201d est appr\u00e9ci\u00e9 car il est tr\u00e8s efficace en ressources machine utilis\u00e9es.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/image-48.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/image_thumb-46.png\" alt=\"image\" width=\"523\" height=\"233\" border=\"0\" \/><\/a><\/p>\n<p>Dans le A100, la multiplication matricielle est aussi r\u00e9alisable en nombre flottant 32 bits, ce qui peut am\u00e9liorer la pr\u00e9cision\u2026 si besoin est. Cela devrait \u00eatre plus utile pour le calcul scientifique haute performance qui a g\u00e9n\u00e9ralement besoin de pr\u00e9cision plus que pour l\u2019entra\u00eenement de r\u00e9seaux de neurones o\u00f9 l\u2019on cherche \u00e0 s\u2019en passer.<\/p>\n<p>Ces tenseurs font du FMA pour \u201cfused multiply-add\u201d : une multiplication entre deux matrices puis une addition avec une troisi\u00e8me. On passe d\u2019une architecture qui associait deux modules g\u00e9rant 64 op\u00e9rations simultan\u00e9ment (4x4x4 fois deux, en haut \u00e0 gauche du sch\u00e9ma ci-dessous) \u00e0 un nouveau qui g\u00e8re 256 op\u00e9rations d\u2019un coup, avec une flexibilit\u00e9 d\u2019organisation qui est pilot\u00e9e par logiciel via la biblioth\u00e8que CUDA 11.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.nvidia.com\/wp-content\/uploads\/2020\/05\/TensorFloat32-TF32.jpg\" \/><\/p>\n<p>Le GPU A100 supporte un nouveau type de donn\u00e9e, le TF32 pour Tensor Float 32. Il est exploit\u00e9 dans les multiplications de matrices avec la mantisse de 10 bits du FP16 (nombres apr\u00e8s la virgule) et l\u2019exposant 8 bits du FP32 (cf <em>ci-dessus<\/em>). Cela permet de faire des calculs avec une bonne pr\u00e9cision et moins de charge que du calcul flottant 32 bits complet (FP32).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devblogs.nvidia.com\/wp-content\/uploads\/2020\/05\/Sparse-Tensor-Core-Quad-White.png\" width=\"591\" height=\"333\" \/><\/p>\n<p>Ensuite, ils ont mis en place un syst\u00e8me d\u2019optimisation du calcul matriciel qui permet de g\u00e9rer des \u201csparse matrix\u201d, des matrices partiellement remplies dites clairsem\u00e9es ou matrices creuses qui sont courantes dans les r\u00e9seaux de neurones et en particulier dans ceux qui traitent du langage. Tout cela g\u00e9n\u00e8re des gains de performance vari\u00e9s d\u00e9crits dans le sch\u00e9ma <em>ci-dessus <\/em>et expliqu\u00e9s <em>ci-dessous<\/em>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devblogs.nvidia.com\/wp-content\/uploads\/2020\/05\/Fine-Grain-Structured-Sparsity.png\" width=\"581\" height=\"326\" \/><\/p>\n<p>Je me suis pos\u00e9 une question pratique de b\u00e9otien : comment les fonctions math\u00e9matiques avanc\u00e9es comme les exponentielles, les logarithmes et les fonctions trigonom\u00e9triques sont-elles mises en \u0153uvre dans ces GPUs ? Je pense notamment \u00e0 ces fonctions d\u2019activation non lin\u00e9aires de type sigmo\u00efdes et tanh qui sont exploit\u00e9es abondamment dans les r\u00e9seaux de neurones apr\u00e8s addition\/multiplication des poids et valeurs des neurones.<\/p>\n<p>Ces fonctions sont \u00e9videmment disponibles dans la biblioth\u00e8que logicielle CUDA de Nvidia qui est ensuite utilis\u00e9e par les biblioth\u00e8ques de gestion de neurones et par les frameworks de haut niveau comme TensorFlow de Google. A l\u2019\u00e9chelon proche du mat\u00e9riel, les fonctions math\u00e9matiques sont transform\u00e9es en de longues s\u00e9ries d\u2019op\u00e9rations de base en calcul flottant (multiplications et additions). Ainsi, un cosinus est-il approximable par une s\u00e9rie d\u2019addition et de multiplications selon la formule ci-joint. On peut aussi g\u00e9rer cela avec de simples tables de correspondance (&#8220;lookup table&#8221;) qui sont encore plus \u00e9conomes en temps de calcul. D&#8217;autres nombreuses astuces peuvent \u00eatre utilis\u00e9es pour optimiser \u00e0 la fois la performance et la consommation d&#8217;\u00e9nergie. C&#8217;est particuli\u00e8rement vrai dans le calcul embarqu\u00e9 mais est aussi r\u00e9utilis\u00e9 dans ce type de processeur.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/image-49.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/image_thumb-47.png\" alt=\"image\" width=\"425\" height=\"85\" border=\"0\" \/><\/a><\/p>\n<p>Pour calculer une puissance (x<sup>y<\/sup>), on peut passer par plusieurs \u00e9tapes : un logarithme, une multiplication puis une exponentielle, qui \u00e0 chaque fois, pour le log et l\u2019exponentielle, vont faire appel \u00e0 une \u00e9valuation polynomiale exploitant un tas d\u2019op\u00e9rations \u00e9l\u00e9mentaires ou \u00e0 d&#8217;autres astuces. Chez Nvidia, la sauce secr\u00e8te est situ\u00e9e dans la biblioth\u00e8que CUDA qui fait le lien entre les primitives math\u00e9matiques et l\u2019organisation des processeurs support\u00e9s. Le co\u00fbt en calcul et en \u00e9nergie rentre aussi en consid\u00e9ration lorsque l&#8217;on utilise des calculs en nombres entiers pour les inf\u00e9rences des les smartphones et objets connect\u00e9s.<\/p>\n<p>Pour terminer dans les capacit\u00e9s du GPU A100, passons au c\u00f4t\u00e9 m\u00e9moire et gestion des entr\u00e9es\/sorties :<\/p>\n<ul>\n<li>La m\u00e9moire vive int\u00e9gr\u00e9e \u00e9volue de 16 Go (2017) \/ 32 Go (2018) \u00e0 40 Go au standard HBM2E entre le GV100 et le GA100. C\u2019est une augmentation modeste.<\/li>\n<li>Le d\u00e9bit de l\u2019acc\u00e8s \u00e0 la m\u00e9moire passe de 900 Go\/s \u00e0 1555 Go\/s gr\u00e2ce au standard HBM2E. Ces puces de m\u00e9moire HBM2E sont notamment propos\u00e9es par les cor\u00e9ens SK Hynix et Samsung.<\/li>\n<li>On passe par contre de 6 \u00e0 40 Mo pour la m\u00e9moire cache L2 (interm\u00e9diaire, entre la m\u00e9moire HBM2E et le cache L1) ce qui est int\u00e9ressant pour remplir plus rapidement les matrices de calcul.<\/li>\n<li>Le bus pour la carte comprenant le processeur passe au PCI Express 4.0 qui double la bande passante \u00e0 31,5 Go\/s. pour une liaison x16 (que l\u2019on peut agr\u00e9ger). Donc, cela double la vitesse d\u2019acc\u00e8s aux supports de stockage SSD, ce qui permettra d\u2019acc\u00e9l\u00e9rer aussi de ce c\u00f4t\u00e9-l\u00e0 l\u2019entra\u00eenement d\u2019un r\u00e9seau de neurones devant scanner une grande base d\u2019entra\u00eenement.<\/li>\n<li>La liaison NVLink inter GPU\/CPU supporte un d\u00e9bit 600 Go\/s vs 300 Go\/s avec le GV100. Elle est utilis\u00e9e au sein de serveurs comme le HGX de Nvidia.<\/li>\n<li>Le GPU supporte aussi des interfaces r\u00e9seaux allant jusqu\u2019\u00e0 200 Gbits\/s au standard InfiniBand, qui est support\u00e9 par les cartes Mellanox de Nvidia.<\/li>\n<\/ul>\n<p>Il devient compliqu\u00e9 avec tout \u00e7a d\u2019\u00e9valuer l\u2019\u00e9volution de la performance du GA100 vis \u00e0 vis du GV100 ou du A100 vis \u00e0 vis du V100. Elle d\u00e9pend du traitement \u00e0 r\u00e9aliser. Nvidia a choisi d\u2019utiliser le benchmark BERT qui n\u2019est pas, contrairement \u00e0 l\u2019habitude, un benchmark de traitement de l\u2019image genre ResNet. BERT est un benchmark de deep learning pour du traitement du langage (Bidirectional Encoder Representations from Transformers) provenant de Google. Ils obtiennent dans ces conditions 3x plus de puissance pour l\u2019entra\u00eenement et 7x plus pour de l\u2019inf\u00e9rence en nombre de s\u00e9quences par seconde. Avec d\u2019autres benchmarks de calcul parall\u00e8le de type HPC (high-performance computing), ils obtiennent une acc\u00e9l\u00e9ration de d\u2019environ 1,5x \u00e0 2x. Bref, \u00e0 la fin, chacun fera son benchmark pour ses propres applications !<\/p>\n<p>Une derni\u00e8re fonction cl\u00e9 est celle de la <strong>virtualisation <\/strong>(MIG = <em>Multi-Instance GPU<\/em>) qui s\u2019appuie sur un partitionnement du processeur sur 7 instances et est tr\u00e8s utile pour partager les ressources du GPU pour des services en cloud.<\/p>\n<p>Les deux principaux march\u00e9s vis\u00e9s pour le A100 sont le calcul haute performance et le machine learning\/deep learning. Au bout du compte, on peut se demander si un tel GPU sert v\u00e9ritablement de GPU au sens \u201cgaming\u201d du terme. Il n\u2019atterrira pas dans un PC de gamer, c\u2019est certain. Des GPU sp\u00e9cifiques leurs sont d\u00e9di\u00e9s, notamment de la famille RTX, qui donnent la part belle \u00e0 des unit\u00e9s de traitement graphiques sp\u00e9cifiques pour le rendu des jeux vid\u00e9os, notamment pour le shading dans la g\u00e9n\u00e9ration d\u2019images. Mais il n\u2019est pas impossible que les A100 puissent tout de m\u00eame servir \u00e0 b\u00e2tir des offres de cloud gaming.<\/p>\n<p><b>\u00c9nergie, transistors et concurrence<\/b><\/p>\n<p>A pleine puissance ce processeur a une consommation maximale qui passe de 300 W (GV100) \u00e0 400W (GA100), avec une fr\u00e9quence en l\u00e9g\u00e8re baisse \u00e0 1,41 GHz vs 1,53 GHz, r\u00e9sultat d\u2019un compromis pour limiter la consommation thermique. C\u2019est en tout cas fait pour les serveurs refroidis par eau.<\/p>\n<p>Avec une cote mal taill\u00e9e, j\u2019ai essay\u00e9 de calculer le nombre de transistors par unit\u00e9 de traitement. En gros, cela nous fait 425 millions de transistor pour chacun des Streaming Multiprocessors. Si l\u2019on consid\u00e8re que les unit\u00e9s arithm\u00e9tiques utilisent 45% des transistors, cela nous fait plus d\u2019un million de transistors par unit\u00e9. C\u2019est assez surprenant. Un million de transistors pour faire un calcul sur deux nombres flottants ? Cela semble \u00e9norme. Dans la litt\u00e9rature sur les processeurs, j\u2019ai tout de m\u00eame vu qu\u2019il fallait au moins quelques dizaines de milliers de transistors pour de telles unit\u00e9s (ALU) [PS: un <a href=\"https:\/\/www.intel.com\/content\/dam\/www\/public\/us\/en\/documents\/case-studies\/floating-point-case-study.pdf\">papier d\u2019Intel<\/a> qui a l&#8217;air de dater de 2010 \u00e9voque le fait que le calcul flottant dans un c\u0153ur classique occupe un million de transistors. Cela converge bien !].<\/p>\n<p>Il n\u2019est pas impossible que certaines fonctions math\u00e9matiques de haut niveau soient mises en \u0153uvre directement dans le layout des portes logiques de ces ALU pour maximiser la performance et exploser quelques benchmarks ! La loi de Moore permet d\u2019en profiter ! Mais si vous avez le d\u00e9compte pr\u00e9cis du nombre de transistors par unit\u00e9 de ce gros GPU, je suis preneur ! Ce a l\u2019air d\u2019\u00eatre un secret bien gard\u00e9.<\/p>\n<p>Le Nvidia GA100 n\u2019est pas le plus grand processeur d\u00e9di\u00e9 \u00e0 l\u2019IA puisque nous avons le monstre de <strong>Cerebras <\/strong>de 1,2 trillions de transistors, 400 000 unit\u00e9s de traitement (dont le d\u00e9tail n\u2019est pas \u00e9vident \u00e0 r\u00e9cup\u00e9rer) et 18 Go de m\u00e9moire cache. Il avait \u00e9t\u00e9 annonc\u00e9 en ao\u00fbt 2019 et d\u00e9crit dans <a href=\"https:\/\/www.oezratty.net\/wordpress\/2019\/plus-grand-processeur-ia\/\">un article d\u00e9di\u00e9 sur ce site<\/a>. Il consomme 15 kW, presque autant qu\u2019un ordinateur quantique \u00e0 qubits supraconducteurs n\u00e9cessitant un cryostat \u00e0 15 mK ! Dans ce dernier cas, 15 kW correspond surtout au co\u00fbt \u00e9nerg\u00e9tique du cryostat et en particulier de son gros compresseur.<\/p>\n<p>Et tout cela n\u2019est qu\u2019une partie de l\u2019actualit\u00e9 des processeurs d\u00e9di\u00e9s \u00e0 l\u2019IA. ll faut notamment int\u00e9grer l\u2019abandon progressif de l\u2019architecture Nervana par Intel au profit de celle de Habana. Toutes les deux sont li\u00e9es \u00e0 des acquisitions de startups, l\u2019une de 2016 et l\u2019autre de 2019. Un train en cache donc un autre chez Intel qui a bien du mal \u00e0 stabiliser sa strat\u00e9gie dans le domaine de l\u2019IA.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.hub-franceia.fr\/wp-content\/uploads\/2018\/07\/Logo_HubFranceIA-300x91.png\" alt=\"Accueil - Hub France IA\" \/><\/p>\n<p>Pour terminer, j\u2019aurais l\u2019occasion de brosser un tour d\u2019horizon de ce march\u00e9 des processeurs d\u00e9di\u00e9s \u00e0 l\u2019IA lors d\u2019une r\u00e9union virtuelle organis\u00e9e par le <strong>Hub France IA <\/strong>le 18 juin 2020 entre 18h et 20h (<a href=\"https:\/\/www.hub-franceia.fr\/event\/meetup-du-hub-france-ia-autour-dolivier-ezratty-18-06-2020-18h-20h-evenement-ouvert-a-tous\/\">lien d\u2019inscription<\/a>). Nous y traiterons aussi du vaste champ des processeurs d\u2019IA pour l\u2019embarqu\u00e9 : smartphones et objets connect\u00e9s, dans ce que l\u2019on agr\u00e8ge habituellement et abusivement sous le vocable de Edge AI.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trois ans apr\u00e8s le lancement de son GPU V100 de g\u00e9n\u00e9ration Volta qui est devenu un standard de l\u2019\u00e9quipement de data-centers pour alimenter nombre d\u2019applications de deep learning et machine learning, Nvidia lan\u00e7ait enfin son successeur, le A100 Ampere, le 14 juin 2020. Cela faisait un bout de temps que je l\u2019attendais. J\u2019anticipais ce lancement [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2659],"tags":[3286,2833,2832,1801,3287],"class_list":["post-18450","post","type-post","status-publish","format-standard","hentry","category-intelligence-artificielle","tag-ampere","tag-deep-learning","tag-machine-learning","tag-nvidia","tag-volta"],"views":14965,"_links":{"self":[{"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/posts\/18450","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=18450"}],"version-history":[{"count":0,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/posts\/18450\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/media?parent=18450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/categories?post=18450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/tags?post=18450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}