FR 3096811 A1 20201204 FR 1905681 A 20190528 Description Titre de l'invention : PROCEDE D'IMPLEMENTATION D'UN ACCELERATEUR MATERIEL D'UN RESEAU DE NEURONES Domaine technique [0001] L'invention concerne le domaine des procédés d'implémentation d'un accélérateur matériel d'un réseau de neurones, ainsi que le domaine des cartes électroniques implémentant un accélérateur matériel d'un réseau de neurones. Un procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones est un procédé d'implémentation d'un accélérateur matériel d'un algorithme de réseau de neurones. ARRIERE PLAN TECHNOLOGIQUE DE L'INVENTION [0002] Les procédés d'implémentation d'un accélérateur matériel d'un réseau de neurones permettent de créer et d'entraîner des réseaux de neurones spécifiques sur une cible matérielle reconfigurable (FPGA pour « Field-Programmable Gate Array » en langue anglaise) puis de les utiliser sur des jeux de données. Plusieurs difficultés techniques peuvent être mises en évidence, tant du point de vue matériel que logiciel. [0003] Du point de vue logiciel, il peut y avoir la nécessité de binariser les réseaux de neurones, la volonté de réduire la perte de précision, l'intérêt de pouvoir automatiser la binarisation d'un réseau de neurones en représentation flottante, la portabilité du réseau binaire entrainé sur la cible matérielle reconfigurable FPGA, l'utilisation d'une série d'outils complexes. [0004] Du point de vue matériel, il peut y avoir l'architecture complexe des réseaux de neurones et surtout des réseaux de neurones convolutifs, la difficulté du passage à l'échelle de composants génériques, le foisonnement actuel des nouveaux types de réseaux de neurones (éventuellement à tester), la recherche d'un niveau de performance par unité de puissance (en watts) consommée assez élevée et qui peut même devenir très élevé pour le domaine de l'embarqué. 100051 En plus de toutes ces exigences difficiles et parfois partiellement contradictoires soulevées par l'art antérieur, l'invention s'intéresse à réaliser également., pour ces procédés d'implémentation d'un accélérateur matériel d'un réseau de neurones, d'une part une simplification de l'utilisation pour un utilisateur non expert pour l'aspect logiciel et d'autre part une certaine automatisation dans la façon d'utiliser une série d'outils assez complexes à manipuler et requérant un niveau relativement élevé d'expertise. 100061 Selon un premier art antérieur, il est connu d'implémenter un accélérateur matériel d'un réseau de neurones sur un circuit loeique programmable FPGA (Field Programmable Gate Array). 2 100071 Mais le fonctionnement de cet accélérateur matériel présente deux inconvénients : d'une part il est relativement lent, et d'autre part, son ratio performance (performance de calcul ou autre performance de traitement de données) sur énergie consommée est assez insuffisant. [0008] Bon nombre de grands constructeurs de cibles matérielles reconfigurables FPGA ont essayé de mettre sur le marché des solutions d'accélération de type apprentissage profond (« Deep Lcarning » en langue anglaise) et ont essayé alors d'englober le plus grand nombre possible d'algorithmes différents de réseaux de neurones, afin d'être capable de s'adresser au plus grand nombre d'utilisateurs potentiels. En conséquence, leur accélérateur matériel de réseau de neurones a adopté une architecture permettant de traiter de manière similaire des réseaux de neurones de structures et de tailles complètement différentes, allant ainsi du plus simple au plus complexe. Cc type d'architecture est qualifiée de systolique, elle utilise des éléments de calculs reliés entre eux sous la forme d'une matrice, ces éléments de calculs étant nourris avec une mémoire cache à accès direct (DMA pour « Direct Access Memory » en langue anglaise) laquelle enchaîne les chargements et enregistrements de poids et d'activations à partir d'une mémoire externe au circuit logique programmable FPGA. OBJETS DE L'INVENTION [0009] Lc but de la présente invention est de fournir un procédé d'implémentation d'un ac- célérateur matériel d'un réseau de neurones palliant au moins partiellement les inconvénients précités. [0010] En effet, selon l'analyse de l'invention, cette implémentation de l'art antérieur reste très généraliste, c'est-à-dire qu'elle conserve une matrice d'éléments de calcul comme noyau d'accélération qui doit régulièrement, à chaque nouvelle couche du réseau de neurones ou à chaque nouvelle opération effectuée par le réseau de neurones, être rechargée et même reprogrammée avec des paramètres stockés dans une mémoire externe au circuit logique programmable FPGA, ce qui présente à son tour deux inconvénients : c'est long de recharger le noyau d'accélération à chaque fois, et cette structure « généraliste et universelle » est plus difficile à optimiser en termes de ratio performance sur énergie consommée. [0011] L'invention propose également une implémentation de l'accélérateur matériel sur un circuit logique programmable FPGA, mais au contraire de l'art antérieur, l'invention propose une implémentation à la fois complète de l'ensemble du réseau de neurones (et donc de l'ensemble de toutes les couches de ce réseau de neurones) et spécifiquement dédiée à ce réseau de neurones : supprimant ainsi le recours permanent à la mémoire externe, amélionun ainsi 3 notablement la vitesse de fonctionnement de cet accélérateur matériel, et permettant également une meilleure optimisation du ratio performance sur énergie consommée, améliorant ainsi également l'efficacité de fonctionnement de cet accélérateur matériel, mais utilisant cependant des briques prédéfinics d'une bibliothèque commune pour les différentes implémentations, ces briques étant toutefois facilement utilisables grâce à la mise en forme spécifique préalable de l'algorithme du réseau de neurones, cette mise en forme spécifique correspondant à la représentation sous forme de graphe, ceci afin de conserver avantageusement au procédé d'implémentation des caractères : - relativement simple et aisé pour son déroulement, - et accessible même à des concepteurs et à des réalisateurs qui ne seraient pas des spécialistes chevronnés de la fabrication d'accélérateur matériel de réseau de neurones. [0012] Des modes de réalisation de l'invention permettent la mise en oeuvre d'une chaîne de construction automatique pour accélérateur matériel d'algorithme de réseaux de neurones convolutifs complexes hinarisés. [0013] A cette fin, la présente invention propose un procédé d'implémentation d'un accé- lérateur matériel d'un réseau de neurones, comprenant : une étape d'interprétation d'un algorithme du réseau de neurones en format binaire, convertissant l'algorithme de réseau de neurones en format binaire en une représentation sous forme de graphe, sélectionnant des blocs de base dans une bibliothèque de blocs de base prédéterminés, réalisant une organisation des blocs de base sélectionnés, configurant des paramètres internes des blocs de base de l'organisation, de sorte que l'organisation des blocs de base sélectionnés et paramétrés corresponde à ladite représentation sous forme de graphe, une étape de détermination d'un jeu initial de poids du réseau de neurones, une étape de synthétisation complète de l'organisation des blocs de base sélectionnés et paramétrés d'une part sur un circuit logique programmable FPGA présélectionné en un accélérateur matériel du réseau de neurones et d'autre part en un logiciel pilote de cet accélérateur matériel, cet accélérateur matériel étant spécifiquement dédié au réseau de neurones de manière à être représentatif de l'ensemble de l'architecture du réseau neurones sans nécessiter d'accès à une mémoire externe au circuit logique programmable FPGA lors du passage d'une couche à une autre couche du réseau de neurones, une étape de chargement du jeu initial de poids du réseau de neurones dans l'accélérateur matériel. [0014] A cette fin, la présente invention propose également une carte électronique comprenant : un circuit logique programmable FPGA, une mémoire externe au circuit logique programmable FPGA, un accélérateur matériel d'un réseau de neurones : entièrement implémenté sur le circuit logique programmable FPGA, spécifiquement dédié au réseau de neurones de manière à être représentatif de l'ensemble de l'architecture du réseau neurones sans nécessiter d'accès à une mémoire externe au circuit logique programmable FPGA lors du passage d'une couche à une autre couche du réseau de neurones, comprenant : une interface vers la mémoire externe, une interface vers l'extérieur de la carte électronique, un noyau d'accélération comprenant successivement : un bloc de lecture d'information, un bloc de sérialisation d'information avec deux voies de sortie, l'une pour envoyer des données d'entrée aux couches du réseau de neurones, l'autre pour configurer des poids au niveau des couches du réseau de neurones, les couches du réseau de neurones, un bloc de désérialisation d'information, un bloc d'écriture d'information. [0015] De préférence, le bloc de lecture d'information comprend une mémoire tampon, et le bloc d'écriture d'information comprend une mémoire tampon. [0016] L'utilisation de ces mémoires tampon permet de ne pas imposer le rythme du noyau d'accélération au reste du système. [0017] A cette fin, la présente invention propose encore un appareil embarqué comprenant une carte électronique selon l'invention. [0018] Le fait pour un appareil d'être embarqué rend particulièrement critique le gain de vitesse et de performance, pour une masse donnée et une énergie consommée que l'utilisateur du réseau de neurones cherche toutes deux à réduire le plus possible, tout en conservant l'efficacité, et tout en garantissant simplicité et facilité d'utilisation du procédé d'implémentation pour le concepteur et le réalisateur du réseau de neurones. [0019] De préférence, l'appareil embarqué selon l'invention est un appareil embarqué de vision par ordinateur. [0020] Suivant des modes de réalisation préférés, l'invention comprend une ou plusieurs des caractéristiques suivantes qui peuvent être utilisées séparément ou en combinaison partielle entre elles ou en combinaison totale entre elles, avec l'un ou l'autre des objets précités de l'invention. [0021] De préférence, le procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones comporte, avant l'étape d'interprétation, une étape de binarisation de l'algorithme de réseau de neurones, incluant une opération de compression d'un format en virgule flottante vers un format binaire. [0022] Cette opération de compression préalable va permettre de transformer l'algorithme de réseau de neurones pour le rendre encore plus facile à manipuler dans les étapes suivantes du procédé d'implémentation selon l'invention qui peut donc aussi ainsi accepter en entrée un éventail plus large d'algorithmes de réseau de neurones. [0023] De préférence, le procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones comporte, avant l'étape d'interprétation, une étape de sélection dans une bibliothèque de modèles prédéterminés d'algorithmes de réseau de neurones déjà en format binaire. [0024] Ainsi, la vitesse de déroulement du procédé d'implémentation selon l'invention peut encore être nettement accélérée, cc qui est particulièrement intéressant dans le cas de tâches similaires ou répétitives. [0025] De préférence, les paramètres internes comprennent la taille des données d'entrée du réseau de neurones. [0026] La taille des données d'entrée est un élément très utile pour configurer les blocs de base de manière plus efficace, et cet élément est facilement disponible, c'est donc un élément à avantageusement intégrer de manière privilégiée dans la configuration des blocs de base. [0027] D'autres paramètres internes peuvent également comprendre d'une part le nombre de sous-composants logiques inclus dans chaque bloc de mémoire vive (RAM pour « Random Access Memory » en langue anglaise) et/ou d'autre part le parallélisme du bloc de calcul, c'est-à-dire le nombre de mots traités par cycle d'horloge. [0028] Un nombre plus élevé de sous-composants logiques inclus dans chaque bloc de calcul peut notamment faciliter la réalisation de la synthèse logique, au prix d'une augmentation de sa complexité globale et donc de son coût de revient. [0029] Plus le parallélisme du bloc de calcul est élevé, plus le nombre de mots traités par cycle d'horloge est élevé. Ainsi le bloc de calcul a un débit plus élevé, au prix d'une complexité et d'un coût plus élevé. [0030] De préférence, le réseau de neurones est convolutif, et les paramètres internes com- prennent aussi les tailles des convolutions du réseau de neurones. [0031] Ce type de réseau de neurones est particulièrement intéressant, mais il est également un peu plus complexe à implémenter. [0032] De préférence, l'algorithme du réseau de neurones en format binaire est sous le format ONNX (« Open Neural Network eXchange » en langue anglaise). [0033] Ce format est particulièrement intéressant, rendant globalement le procédé d'implémentation plus fluide. [0034] De préférence, l'organisation des blocs de base sélectionnés et paramétrés est décrite par un code VHDL représentatif d'un noyau d'accélération de l'accélérateur matériel. [0035] Ce type de codage est particulièrement intéressant, rendant globalement la des- cription de l'architecture plus complète. [0036] De préférence, l'étape de synthétisation et l'étape de chargement sont réalisées par une communication entre un ordinateur hôte et une carte électronique FPGA incluant le circuit logique programmable FPGA, cette communication étant avantageusement réalisée par l'intermédiaire du standard OpenCL au travers d'un canal de commu- 6 nication de type PCI Express. [0037] L'utilisation d'une communication, directe et immédiate entre un ordinateur hôte et une carte électronique FPGA incluant le circuit logique programmable FPGA, rend globalement le procédé d'implémentation plus facile à mettre en oeuvre pour le concepteur et le réalisateur du réseau de neurones. [0038] Cc type de canal de communication et de standard sont particulièrement intéressants, rendant globalement le procédé d'implémentation plus fluide. [0039] Dc préférence, le réseau de neurones est un réseau de neurones appliqué à la vision par ordinateur, de préférence à la vision par ordinateur embarqué. [0040] Dans cc domaine d'application de la vision par ordinateur, et surtout intégré dans des dispositifs embarqués (donc pas dans des dispositifs qui seraient fixes dans une station informatique au sol), les exigences simultanées d'efficacité, de rapidité et de faible consommation d'énergie, entraînent des optimisations poussées peu compatibles avec une simplification du procédé d'implémentation d'un accélérateur matériel du réseau de neurones, cc que l'invention a pourtant choisi de faire, car cc compromis inhabituel en fait fonctionne bien. [0041] Dc préférence, l'application à la vision par ordinateur est, une application à une caméra de surveillance, ou bien une application à un système de classification d'images, ou bien une application à un dispositif de vision embarqué sur véhicule automobile. [0042] D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture de la description qui suit d'un mode de réalisation préféré de l'invention, donnée à titre d'exemple et en référence aux dessins annexés. Brève description des dessins [0043] [fig.1] La figure 1 représente schématiquement un exemple d'architecture fonc- tionnelle permettant la mise en oeuvre du procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon un mode de réalisation de l'invention. [0044] [fig.] La figure 2 représente schématiquement un exemple un exemple d'architecture logicielle permettant la mise en oeuvre du procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon un mode de réalisation de l'invention. [0045] [fig.3] La figure 3 représente schématiquement un exemple d'une carte électronique implémentant un accélérateur matériel d'un réseau de neurones selon un mode de réalisation de l'invention. [0046] [fig.4] La figure 4 représente schématiquement un exemple d'un noyau d'une carte électronique implémentant un accélérateur matériel d'un réseau de neurones selon un mode de réalisation de l'invention. 7 [0047] DESCRIPTION DETAILLEE DES MODES DE REALISATION DE L'INVENTION [0048] La figure 1 représente schématiquement un exemple d'architecture fonctionnelle permettant la mise en oeuvre du procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon un mode de réalisation de l'invention. [0049] L'architecture comporte trois couches : la couche 1 des modèles, la couche 5 de la pile logicielle, et la couche 8 de la pile matérielle. [0050] La couche 1 des modèles comporte une librairie 2 de modèles binaires déjà en format ONNX d'algorithmes dc réseaux de neurones, et un ensemble 3 de modèles d'algorithmes de réseaux de neurones qui sont pré-entraînés mais sous un format en virgule flottante (32 bits), parmi lesquels notamment TENSORFLOW, PYTORCH, et CAFFEE2. Le procédé d'implémentation d'accélérateur matériel de réseau de neurones possède deux entrées possibles : soit un modèle déjà présent en librairie 2 soit un modèle pré-entrainé classiquement dans un format d'architecture logicielle (« framework en langue anglaise) non fixée appartenant à l'ensemble 3. Pour qu'une architecture logicielle soit facilement compatible avec ce procédé d'implémentation, il est intéressant qu'il existe un convertisseur de cette architecture logicielle vers le format ONNX, ONNX étant une représentation transversale à toutes les architectures logicielles. [0051] Cet ensemble 3 de modèles d'algorithmes dc réseaux de neurones pré-entraînés mais sous un format en virgule flottante peuvent être binarisés par un binariseur 4, éventuellement doté d'une fonction supplémentaire de réentraînement du réseau de neurones par exemple pour PYTORCH, transformant les modèles d'algorithmes de réseaux de neurones d'un format en virgule flottante vers un format binaire, préférentiellement vers le format binaire ONNX. [0052] La couche 8 de la pile matérielle comporte une bibliothèque 9 de composants, plus précisément une bibliothèques 9 de blocs de base prédéterminés qui vont être sélectionnés et assemblés entre eux et tout en étant chacun paramétrés, par la couche 5 de la pile logicielle, et plus précisément par le bloc constructeur 6 de la couche 5 de la pile logicielle. [0053] La couche 5 de la pile logicielle comporte, d'une part le bloc constructeur 6 qui va générer aussi bien l'accélérateur matériel du réseau de neurones que le logiciel pilote de cet accélérateur matériel du réseau de neurones, et d'autre part le bloc pilote 7 qui va utiliser le logiciel pilote pour piloter l'accélérateur matériel du réseau de neurones. [0054] Plus précisément, le bloc constructeur 6 comprend plusieurs fonctions parmi lesquelles : une fonction de compilation de graphe à partir d'un algorithme binarisé de réseau de neurones, une fonction de génération de code en format VHDL (venant de VHSIC Hardware Description Language » en langue anglaise avec VHSIC venant de 8 « Vcry High Speed Integrated Circuit » en langue anglaise), ce code en format VHDL contenant les informations à la fois pour l'implémentation de l'accélérateur matériel du réseau de neurones et pour le logiciel pilote de cet accélérateur matériel, une fonction de synthèse permettant l'implémentation effective de l'accélérateur matériel de réseau de neurones sur un circuit logique programmable FPGA. Les deux entrées du procédé d'implémentation d'accélérateur de réseau de neurones se sont rejointes dans l'étape du bloc constructeur 6, qui va étudier l'algorithme d'entrée du réseau de neurones et le convertir dans une représentation en graphe propre. Après cette conversion de cc graphe, deux produits ont donc été générés : d'une part, le code VHDL décrivant l'accélérateur matériel dont le noyau d'accélération tout comme le logiciel pilote de cet accélérateur matériel, qu'il reste à synthétiser à l'aide d'outils de synthèse, ainsi que les poids de configuration du réseau de neurones correspondant. [0055] Plus précisément, le bloc pilote 7 comprend plusieurs fonctions parmi lesquelles : une fonction de chargement du code VHDL, une interface de programmation, et une fonction de communication entre l'ordinateur hôte et le circuit logique programmable FPGA basée sur la technologie de l'infrastructure logicielle OpenCL (pour « Open Computing Language » en langue anglaise). Un fois l'accélérateur matériel synthétisé sur la cible choisie comme circuit logique programmable FPGA, par exemple à l'aide d'une suite d'outils propre au constructeur du circuit logique programmable FPGA, le bloc pilote 7, qui intègre une interface de programmation application (API pour Application Progranuning Interface ») par exemple en langage de programmation Python et en langage de programmation C++, est utilisé pour piloter l'accélérateur matériel. La communication entre l'ordinateur hôte et le FPGA repose sur la technologie OpenCL qui est un standard. [0056] Dès lors, une grande liberté est offerte à l'utilisateur qui peut créer son propre programme à la suite de la génération du noyau d'accélération et de la configuration. S'il souhaite cibler un circuit logique programmable FPGA particulier non prévu par le procédé d'implémentation d'accélérateur matériel de réseau de neurones selon l'invention, c'est encore possible, il suffit en effet pour cela que ce type de modèle de circuit logique programmable FPGA soit supporté par la suite d'outils du vendeur de ce circuit logique programmable FPGA. [0057] Une des particularités avantageuses du procédé d'implémentation d'accélérateur matériel de réseau de neurones proposé par l'invention est d'être compatible avec des structures de réseaux de neurones complexes tels que « ResNet » (pour « Residential Network » en langue anglaise) ou encore « GoogLeNet ». Ces réseaux de neurones présentent la particularité d'avoir des chemins de donnée divergents, qui sont ensuite fusionnés ou non selon diverses techniques (une couche « elt-wise » étant la plus répandue, pour element-wise » en langue anglaise). 9 [0058] Le compilateur de graphe situé dans le bloc constructeur 6 reconnaît ces parti- cularités et les traduit correctement en une architecture d'accélérateur matériel correspondante. [0059] La figure 2 représente schématiquement un exemple d'architecture logicielle permettant la mise en oeuvre du procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon un mode de réalisation de l'invention. Un bloc d'entraînement 20 correspond à la fonction réentraînement du hinariseur 4 de la figure 1, et un bloc 30 de kit d'outils FPGA correspond au bloc constructeur 6 de la figure 1. [0060] Un modèle 12 d'algorithme de réseau de neurones convolutif (CNN pour « Convolutional Neural Network » en langue anglaise), par exemple sous un format TENSORFLOW, CAFFEE, ou PYTORCH, est transformé en un modèle 10 d'algorithme de réseau de neurones convolutif hinarisé en format ONNX qui est envoyé sur une entrée d'un bloc d'entraînement 20. Un jcu 11 de données d'entraînement est envoyé sur une autre entrée de ce bloc d'entraînement 20 pour être transformé en poids entraînés 23 par interaction avec une description 22 du réseau de neurones. Une conversion par représentation interne 21 est faite du modèle 10 d'algorithme de réseau de neurones convolutif hinarisé en format ONNX vers la description 22 du réseau de neurones qui par interaction sur le jeu 11 de données d'entraînement donne les poids entraînés 23 qui vont être envoyés sur une entrée du bloc 30 de kit d'outils FPGA. Après quoi, la description 22 du réseau de neurones est à nouveau convertie par représentation interne 24 vers un algorithme 25 de réseau de neurones convolutif binarisé en format ONNX lequel à son tour va être envoyé vers une autre entrée du bloc 30 de kit d'outils FPGA. [0061] L'algorithme 25 de réseau de neurones convolutif binarisé en format ONNX est converti par représentation interne 32 et transformé par la coopération de la fonction construction 33 et d'un convertisseur de données 34 ayant reçu les poids entraînés 23, pour donner en sortie d'une part une instanciation 35 de fichiers (en « .vhd ») et d'autre part un jeu de poids 36 (en « .data »), le tout à l'aide de librairies 37 en langages de programmation C et C++. Le convertisseur de données 34 d'une part met les poids d'entraînement au bon format et d'autre part leur associe, sous forme d'un en-tête, des guides pour arriver aux bonnes destinations dans les bonnes couches du réseau de neurones. La représentation interne 32, la fonction de construction 33 et le convertisseur de données 34, sont regroupés dans un sous-bloc 31. [0062] En sortie du bloc 30 de kit d'outils FPGA, le couple formé par l'instanciation 35 de fichiers et par le jeu de poids 36, peut ensuite, soit être compilé par un compilateur FPGA 14, ce qui peut toutefois prendre un temps notable, soit être le cas échéant associé à un modèle déjà précompilé dans une libraire précompilée FPGA 13, ce qui sera beaucoup plus rapide mais bien sûr nécessite que ce couple corresponde à un modèle déjà précompilé qui existe en stock dans la libraire précompilée FPGA 13. Lc résultat obtenu, que ce soit en provenance de la libraire précompilée FPGA 13 ou bien en provenance du compilateur FPGA 14, est un flot de configuration FPGA 15. [0063] La figure 3 représente schématiquement un exemple un exemple d'une carte élec- tronique implémentant un accélérateur matériel d'un réseau de neurones selon un mode de réalisation de l'invention. [0064] Un ordinateur hôte intégrant à la fois un processeur hôte 46 et une mémoire vive 47 (RAM pour « Random Access Memory » en langue anglaise), stockant les données 48 utiles pour l'accélérateur matériel de réseau de neurones, communique de manière bidirectionnelle par l'intermédiaire d'un bus local série 49 avantageusement de type PCTe (pour « PCI Express » en langue anglaise avec PCT pour « Peripheral Component Interconnect » en langue anglaise) avec la carte électronique FPGA 40 implémentant l'accélérateur matériel du réseau de neurones, et en particulier son noyau d'accélération 42. [0065] La carte électronique FPGA 40 comprend une puce FPGA 41. Cette puce FPGA 41 abrite le noyau d'accélération 42 ainsi qu'une interface 43 BSP (pour « Board Support Package » en langue anglaise). La puce FPGA 41, et en particulier le noyau d'accélération 42, communique avec une mémoire 44 intégrée sur la carte électronique FPGA 40 par l'intermédiaire d'un bus DDR 45. La mémoire 44 est une mémoire interne à la carte électronique FPGA 40, mais externe à la puce électronique FPGA 41 ; elle présente un débit élevé. Cette mémoire 44 est avantageusement une mémoire de type DDR ou DDR-2 (en fait DDR SDRAM pour « Double Data Rate Synchronous Dynarnic Random Access Memory » en langue anglaise). [0066] Lors du passage d'une couche à une autre couche dans le réseau de neurones, dans l'invention, ni la mémoire 47 externe à la carte électronique FPGA 40, ni la mémoire 44 interne à la carte électronique FPGA 40 mais externe à la puce FPGA 41, ne sont lues pour charger une partie de l'accélérateur matériel, au contraire de l'art antérieur. En effet, pour l'invention, l'ensemble de l'architecture du réseau de neurones est chargé en une seule fois au début dans le noyau d'accélération 42 de la puce FPGA 41, tandis que pour l'art antérieur, chaque couche est chargée séparément après utilisation de la couche précédente qu'elle va ensuite remplacer, présentant un temps et un volume d'échange entre la puce FPGA 41 et l'extérieur à cette puce FPGA 41 bien supérieurs à ceux de l'invention pour le même type de fonctionnement du réseau de neurones implémenté, offrant donc une efficacité de fonctionnement bien inférieure à celle de l'invention. C'est parce qu'il est spécifiquement dédié au réseau de neurones que l'accélérateur matériel peut être chargé en une seule fois ; au contraire, dans l'art antérieur, l'accélérateur matériel est généraliste, et il faut alors le charger couche par couche pour le «reprogrammer » à chaque nouvelle couche, un chargement en une 11 seule fois n'étant pour l'art antérieur pas possible sans recourir à une taille très importante pour l'accélérateur matériel. Dans l'accélérateur matériel spécifique (et dédié) de l'invention, la topologie est multicouches, ce qui lui permet d'être implémentée entièrement en une seule fois sans requérir une taille trop importante pour l'accélérateur matériel, tandis que dans l'art antérieur, l'accélérateur matériel généraliste implémente différentes topologies, une topologie par chaque couche. [0067] La Figure 3 représente ainsi l'architecture globale du système comprenant d'une part la machine hôte incluant processeur hôte 46 et mémoire hôte 47, sur laquelle machine hôte l'utilisateur effectue des actions, et d'autre part l'accélérateur matériel implémenté sur la carte électronique FPGA 40. Le processeur hôte 46, qui est généraliste, commande et envoie des entrées/sonies, via un canal de communication haut débit 49, à la carte électronique FPGA 40 accélératrice munie d'une puce FPGA 41 (circuit logique programmable FPGA) laquelle puce FPGA 41 supporte avantageusement le standard « OpenCL ». [0068] La figure 4 représente schématiquement un exemple d'un noyau d'une carte élec- tronique implémentant un accélérateur matériel d'un réseau de neurones selon un mode de réalisation de l'invention. [0069] Le noyau d'accélération 42 communique avec l'interface BSP 43 (basé aussi sur le standard de communication « OpenCL »), cette communication étant représentée plus précisément sur la figure 4, via une interface de lecture « Avalon » 52 vers un lecteur 50, notamment pour recevoir de la part de l'ordinateur hôte les images d'entrée et la configuration du réseau de neurones, et via une interface d'écriture « Avalon » 92 en provenance d'un bloc d'écriture 90 pour donner les résultats obtenus en sortie du réseau de neurones. Par ailleurs le noyau d'accélération 42 reçoit les paramètres externes fournis par l'utilisateur et plus particulièrement depuis son appel via le processeur hôte, ces paramètres externes arrivant au niveau de la mémoire tampon 55 du lecteur 50, du bloc de sérialisation 60, et de la mémoire tampon 95 du bloc d'écriture 90. [0070] Le noyau d'accélération 42 comprend la succession en série, d'abord du lecteur 50, puis du bloc de sérialisation 60, ensuite les couches 70 du réseau de neurones proprement dit, puis encore le bloc de désérialisation 80, et enfin le bloc d'écriture 90. Les signaux arrivent vers le lecteur 50 par l'interface de lecture 52, sortent en provenance du bloc d'écriture 90 par l'interface d'écriture 92, en étant passés successivement par l'intermédiaire du bloc de sérialisation 60, des couches 70 du réseau de neurones, et du bloc de désérialisation 80. La gestion des paquets est assurée du début à la fin, depuis la gestion des paquets 54 dans le lecteur 50 jusqu'à la gestion des paquets 94 dans le bloc d'écriture 90, en passant successivement (traits pointillés) par le bloc de sérialisation 60, les couches 70 du réseau de neurones, et le bloc de déséria- 12 lisation 80. [0071] Le lecteur 50 comprend en entrée une interface de lecture 52 et en sortie unc ligne d'envoi 53 des données d'entrée (pour le bloc suivant 60 de sérialisation) validées prêtes à utilisation. Le lecteur 50 comprend une mémoire tampon 55 incluant des registres 56 et 57 recevant respectivement des paramètres externes « pin » et « itcr i ». [0072] Le bloc de sérialisation 60 transforme les données 53 arrivant du lecteur 50 en données 65 stockées dans les registres 61 à 64, par exemple dans 512 registres même si seulement 4 registres sont représentés sur la figure 4. Ces données stockées dans les registres 61 à 64 vont ensuite être envoyées dans les couches 70 du réseau de neurones, soit par la voie de l'inférence 77 pour les données d'entrée du réseau de neurones, soit par la voie de la configuration 78 pour les poids de configuration du réseau de neurones. Un sélectionneur 68 sélectionne soit la voie de l'inférence 77 soit la voie de la configuration 78 selon le type de données à envoyer aux couches 70 du réseau de neurones. [0073] Les couches 70 du réseau de neurones implémentent la topologie multicouche du réseau de neurones ; ici seulement 6 couches 71, 72, 73, 74, 75 et 76 sont représentées, niais il peut y en avoir plus, voire nettement plus, et également un peu moins. Préférentiellement, le réseau de neurones comprend au moins 2 couches, plus préférentiellement au moins 3 couches, encore plus préférentiellement au moins 5 couches, voire avantageusement au moins 10 couches. C'est préférentiellement un réseau de neurones convolutif. [0074] Le bloc de désérialisation 80 stocke, les données 87 arrivant par la voie de l'inférence 77, dans les registres 81 à 84, par exemple dans 512 registres même si seulement 4 registres sont représentés sur la figure 4. Ces données stockées dans les registres 81 à 84 vont ensuite être envoyées dans le bloc d'écriture 90, plus précisément sur la sortie 85 du bloc de désérialisation 80 pour être ensuite transmises toujours vers l'entrée 93 du bloc d'écriture 90. Ces données 87 sont les données de sortie du réseau de neurones, les données issues du passage successif au travers des couches 71 à 76 de neurones, c'est-à-dire qu'elles correspondent au résultat recherché obtenu après traitement par le réseau de neurones. [0075] Le bloc d'écriture 90 comprend en sortie une interface d'écriture 92 et en entrée une ligne de réception 93 des données de sortie (du bloc précédent 80 de désérialisation) validées prêtes à être transmises vers l'extérieur du noyau d'accélération 42. Le bloc d'écriture 90 comprend une mémoire tampon 95 incluant des registres 96 et 97 recevant respectivement des paramètres externes « pout » et « iter_o ». [0076] Un exemple d'utilisation possible du procédé d'implémentation d'un accélérateur matériel de réseau de neurones selon l'invention est maintenant présenté. Un utilisateur va déporter l'inférence d'un réseau de type « ResNet-50 » d'un microprocesseur gé- 13 néral istc de type unité centrale de traitement (CPU pour « Central Processing Unit » en langue anglaise) vers une cible matérielle plus adaptée, notamment d'un point de vue de la performance énergétique. Cet utilisateur sélectionne un circuit logique programmable FPGA cible. Il peut utiliser un modèle d'algorithme de réseau de neurones pré-entrainé dans un format tel que « PyTorch », qu'il peut trouver sur internet. Cc modèle d'algorithme de réseau de neurones contient les poids de configuration dans une représentation en virgule flottante du réseau de neurones entrainé sur un jeu de donnée particulier (« CIFAR-10 » par exemple). L'utilisateur peut alors sélectionner ce modèle d'algorithme de réseau de neurones pour utiliser le procédé d'implémentation d'un accélérateur matériel de réseau de neurones selon l'invention. L'utilisateur va alors obtenir en sortie un projet FPGA qu'il va ensuite synthétiser avant de le passer sur carte électronique ainsi qu'une configuration binariséc, compatible avec la représentation binaire de l'accélérateur matériel de réseau de neurones. Cette étape va requérir l'installation d'outils propriétaires correspondant au circuit logique programmable FPGA cible. [0077] Ensuite, l'utilisateur lance les scripts du bloc constructeur 6 générant automa- tiquement la configuration du circuit logique programmable FPGA cible pour fournir l'accélérateur matériel. Quand l'utilisateur dispose de cette sortie, il utilise le bloc pilote 7 afin, de charger la description de l'accélérateur (réseau « ResNet-50 ») dans le circuit logique programmable FPGA cible, de fournir la configuration des poids préentrainés puis binarisés à l'accélérateur matériel, de fournir un jeu d'image d'entrée, de récupérer les résultats de l'algorithme du réseau de neurones à la sortie de l'accélérateur matériel. [0078] Il est possible de se passer de la partie relativement chronophage de la génération de l'architecture matérielle à partir de la représentation « PyTorch » à condition d'utiliser les modèles de la librairie de réseaux précompilés. Si l'utilisateur choisit un accélérateur matériel dont la topologie a déjà été générée (par lui-même ou fourni par la librairie de d'algorithmes de réseaux de neurones précompilés), il n'a plus qu'à passer par l'étape de binarisation des poids du modèle laquelle est très rapide, par exemple de l'ordre de la seconde. [0079] Bien entendu, la présente invention n'est pas limitée aux exemples et au mode de réa- lisation décrits et représentés, mais elle est susceptible de nombreuses variantes accessibles à l'homme de l'art. 14 [Revendication I] REVENDICATIONSProcédé d'implémentation d'un accélérateur matériel d'un réseau de neurones, comprenant : une étape (6, 30) d'interprétation d'un algorithme du réseau de neurones en format binaire, - convertissant l'algorithme de réseau de neurones en format binaire (25) en une représentation sous forme de graphe, - sélectionnant des blocs de hase dans une bibliothèque (37) de blocs de base prédéterminés, - réalisant (33) une organisation des blocs de base sélectionnés, - configurant des paramètres internes des blocs de base de l'organisation, - de sorte que l'organisation des blocs de base sélectionnés et pai-amétrés corresponde à ladite représentation sous forme de graphe, une étape de détermination d'un jeu initial (36) de poids du réseau de neurones, une étape de synthétisation complète (13, 14) de l'organisation des blocs de base sélectionnés et paramétrés d'une part sur un circuit logique programmable FPGA (41) présélectionné en un accélérateur matériel (42) du réseau de neurones et d'autre part en un logiciel pilote de cet accélérateur matériel (42), - cet accélérateur matériel (42) étant spécifiquement dédié au réseau de neurones de manière à être représentatif de l'ensemble de l'architecture du réseau neurones sans nécessiter d'accès à une mémoire externe (44) au circuit logique programmable FPGA (41) lors du passage d'une couche (71 à 75) à une autre couche (72 à 76) du réseau de neurones, une étape de chargement (48) du jeu initial de poids du réseau de neurones dans l'accélérateur matériel (42). [Revendication 2] Procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon la revendication 1, caractérisé en ce qu'il comporte, 15 [Revendication 3] [Revendication 4] [Revendication 5] [Revendication 6] [Revendication 7] [Revendication 8] [Revendication 9] avant l'étape d'interprétation (6, 30)), une étape de binarisation (4, 20) de l'algorithme de réseau de neurones, incluant une opération de compression d'un format en virgule flottante vers un format hinaire. Procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon la revendication 1, caractérisé en ce qu'il comporte, avant l'étape d'interprétation (6, 30), une étape de sélection (2, 12) dans une bibliothèque (8, 37) de modèles prédéterminés d'algorithmes de réseau de neurones déjà en format hinaire. Procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon l'une quelconque des revendications précédentes, caractérisé en cc que les paramètres internes comprennent la taille des données d'entrée du réseau de neurones. Procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon l'une quelconque des revendications précédentes, caractérisé en cc que le réseau de neurones est convolutif, et les paramètres internes comprennent aussi les tailles des convolutions du réseau de neurones. Procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon l'une quelconque des revendications précédentes, caractérisé en cc que l'algorithme du réseau de neurones en format binaire (25) est sous le format ONNX. Procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon l'une quelconque des revendications précédentes, caractérisé en ce que l'organisation des blocs de base sélectionnés et paramétrés est décrite par un code VHDL (15) représentatif d'un noyau d'accélération de l'accélérateur matériel (42). Procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon l'une quelconque des revendications précédentes, caractérisé en ce que l'étape de synthétisation (13, 14) et l'étape de chargement (48) sont réalisées par une communication entre un ordinateur hôte (46, 47) et une carte électronique FPGA (40) incluant le circuit logique programmable FPGA (41), cette communication étant avantageusement réalisée par l'intermédiaire du standard OpenCL au travers d'un canal de communication (49) de type PCI Express. Procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon l'une quelconque des revendications précédentes, caractérisé en ce que le réseau de neurones est un réseau de neurones appliqué à la vision par ordinateur, de préférence à la vision par or- 16 dinateur embarqué. Procédé d'implémentation d'un accélérateur matériel d'un réseau de neurones selon la revendication 9, caractérisé en ce que l'application à la vision par ordinateur est, une application à une caméra de surveillance, ou bien une application à un système de classification d'images, ou bien une application à un dispositif de vision embarqué sur véhicule automobile. Carte électronique (40) comprenant : un circuit logique programmable FPGA (41), une mémoire externe au circuit logique programmable FPGA (44), un accélérateur matériel d'un réseau de neurones : entièrement implémenté sur le circuit logique programmable FPGA (41), spécifiquement dédié au réseau de neurones de manière à être représentatif de l'ensemble de l'architecture du réseau neurones sans nécessiter d'accès à une mémoire externe (44) au circuit logique programmable FPGA lors du passage d'une couche (71 à 75) à une autre couche (72 à 76) du réseau de neurones, comprenant : une interface (45) vers la mémoire externe, une interface (49) vers l'extérieur de la carte électronique, un noyau d'accélération (42) comprenant successivement : un bloc de lecture (50) d'information, un bloc de sérialisation (60) d'information avec deux voies (77, 78) de sortie, l'une (77) pour envoyer des données d'entrée aux couches (70-76) du réseau de neurones, l'autre (78) pour configurer des poids au niveau des couches (70-76) du réseau de [Revendication 10] [Revendication 11] - - - - - - - neurones, les couches (70-76) du réseau de neurones, un bloc de désérialisation (80) d' i nformation, un bloc d'écriture (90) d' i nformation. 17 [Revendication 12] [Revendication 13] [Revendication 14] Carte électronique selon la revendication 11, caractérisée en ce que le bloc de lecture (50) d'information comprend une mémoire tampon (55), et le bloc d'écriture (90) d'information comprend une mémoire tampon (95). Appareil embarqué comprenant une carte électronique selon la revendication 11 ou selon la revendication 12. Appareil embarqué selon la revendication 13, caractérisé en ce qu'il est un appareil embarqué de vision par ordinateur.