FR 3145998 A1 20240823 FR 2301627 A 20230222 Composant électronique multifonctions, dispositif, procédé s et programmes correspondant s . L’invention se rapporte à une plateforme électronique de traitement de données, comprenant un processeur généraliste (PS) et une mémoire dite de niveau 1 (L1). Cette plateforme comprend en outre un composant logique programmable (PL) comprenant une mémoire dite de niveau 0 (L0), le composant logique programmable étant paramétré de sorte à définir des typologies de calculs exécutables, ladite plateforme comprenant en outre un logiciel d’orchestration s’exécutant sur le processeur généraliste, le logiciel d’orchestration ayant la charge de la fourniture, au composant logique programmable, d’un ensemble de données de configuration de son exécution dans les limites des typologies de calculs exécutables. Figure d’abrégé : Figure 5 Composant électronique multifonctions, dispositif, procédés et programmes correspondants. L’invention se rapporte à la mise en œuvre de composants électroniques multifonctions. L’invention se rapporte plus particulièrement à la mise en œuvre de composants électroniques multifonction pouvant être reconfigurés à la volée en fonction des besoins. L’invention trouve plus naturellement une application dans la mise en œuvre de réseaux de neurones sur des architectures embarqués. Art antérieur Un réseau de neurones artificiels (ou ANN, de l’anglais « Artificial Neural Networks » ) peut être considéré comme un système complexe combinant et interconnectant un grand nombre d'unités de traitement non linéaires appelées neurones. Certains algorithmes d'intelligence artificielle sont très connus pour l'apprentissage supervisé, dans lequel un réseau de neurones artificiels est utilisé pour faire une prédiction allant d'une couche d'entrée recevant des données d'entrée à une couche de sortie, comme illustré à la . Il existe de nombreux types et variantes de réseau de neurone, mais on peut les classer en trois grands types : Le perceptron multicouche (ou MLP, de l’anglais « Multi L ayer P erceptron ») est la version étendue du perceptron original qui contient trois couches ou plus. Ces couches sont également appelées couches entièrement connectées (ou FC, de l’anglais « Fully C onnected » ) et, même si elles ne sont pas utilisées comme entités autonomes, elles sont généralement intégrées comme sous-composants d'autres architectures (comme dans les réseaux CNN). Les réseaux de neurones convolutifs (ou CNN, de l’anglais « Convolutional Neural Networks » ) sont des réseaux de neurones spécialisés principalement dans les applications de traitement d'images. Ils sont notamment basés sur les opérations de convolution (opérations matricielles) couramment utilisées dans le traitement d'images (comme le filtre de Sobel). Les réseaux de neurones récurrents (ou RNN, de l’anglais « R ecurrent Neural Network » ) contiennent des entités de mémoire interne permettant une boucle de rétroaction. Ce principe permet de prendre en compte une relation temporelle dans les données traitées. Par conséquent, la sortie d'une cellule n'est pas seulement influencée par son entrée mais aussi par les calculs précédents, ce qui permet de capturer une certaine relation temporelle inhérente aux données. Les inventeurs ont identifié que les paradigmes actuels pour la mise en œuvre et l'entraînement des algorithmes d’intelligence artificielle des réseaux de neurones sont principalement basés sur des architectures centralisées avec des infrastructures logicielles lourdes telles que des fermes de serveurs, généralement basés sur des GPU et contenant même quelques accélérateurs de calcul FPGA/ASIC. La formation des paramètres d’exécution se fait en ligne et une fois formé, le réseau (et ses paramètres) est transféré vers une cible d'inférence pour une tâche ou une mission dédiée. Sur la base de cette analyse, les inventeurs ont constaté que : Les algorithmes d’intelligence artificielle (en particulier ceux comprenant des réseaux de grande taille) sont difficiles à transposer sur des systèmes embarqués très contraints en termes de taille, de consommation d'énergie et de contraintes de temps réel. Toutes les approches embarquées actuelles sont basées sur l'apprentissage en ligne - exécution hors-ligne expliqué ci-dessus. La formation des réseaux de neurone (i.e. l’obtention de ses paramètres de fonctionnement), qui est la partie qui consomme le plus de temps, de mémoire et de ressources informatiques, n'est pas effectuée directement sur les systèmes embarqués. Les réseaux sont entrainés en ligne, leurs données sont stockées, puis ils sont implémentés tels quels sur la carte électronique de destination. Une fois qu'un réseau de neurones a été conçu, formé et intégré de manière optimale dans un dispositif embarqué, il est difficile de le modifier (pour une autre tâche, pour une nouvelle configuration, une architecture plus performante, ...). En particulier lorsqu'on utilise des FPGA, cette reconfiguration/ré-implémentation du réseau de neurones peut être une tâche longue et complexe. En d’autres termes, les inventeurs ont constaté que la mise en œuvre d’un réseau de neurones dans une architecture embarquée souffre de nombreuses problématiques, au premier rang desquelles le caractère figé du réseau ainsi implémenté. Il est certes possible, même dans un FPGA, de modifier les poids du réseau de neurones, afin de prendre en compte des améliorations de l’apprentissage (réalisé en ligne), mais il est difficilement envisageable de modifier les fonctionnalités du réseau de neurones ainsi obtenu. Parmi les fonctionnalités non modifiables, l’agrandissement de la taille du réseau de neurones pose des problèmes souvent insolubles. De plus, les réseaux de neurones embarqués souffrent de limitations au niveau de l’apprentissage, qui est incompatible avec les exigences de faible consommation électrique et la puissance de calcul limitée de ces systèmes embarqués. Il existe donc un besoin de fournir des solutions de traitement de données à destination de réseaux de neurones sur des architectures embarquées, qui puissent permettre de résoudre les problématiques posées par l’art antérieur. La présente technique permet de proposer une solution visant à remédier à certains inconvénients de l’art antérieur. Selon un premier aspect, l’invention décrit la manière dont les inventeurs ont décidé de formaliser les opérations menées dans le cadre d’une série de calculs. Plus particulièrement, l’invention se rapporte à la sérialisation et la parallélisation de calculs menées sur des données d’entrées pour produire des données de sortie. La série de calculs en question peut être la mise en œuvre d’un ou de plusieurs réseaux de neurones, ou bien tous autres calculs numériques effectués à partir de données d’entrées pour produire des données de sorties. Selon un deuxième aspect, à partir de la modélisation des opérations menées dans le cadre d’une série de calculs, les inventeurs ont défini une méthodologie de création de composants électroniques aptes à mettre en œuvre les séries de calculs en question de manière générique. Selon un troisième aspect, une fois que le composant électronique est matérialisé (i.e. par exemple créé ou fondu), l’invention porte sur une méthode de configuration et d’utilisation de ce composant électronique afin d’exécuter une ou plusieurs séries de calculs modélisés selon la méthodologie définie par les inventeurs. Ainsi, la présente technique se rapporte notamment à une plateforme électronique de traitement de données, comprenant un processeur généraliste et une mémoire dite de niveau 1, ladite plateforme comprenant en outre un composant logique programmable comprenant une mémoire dite de niveau 0, le composant logique programmable étant paramétré de sorte à définir des typologies de calculs exécutables. Ladite plateforme comprend en outre un logiciel d’orchestration s’exécutant sur le processeur généraliste, le logiciel d’orchestration ayant la charge de la fourniture, au composant logique programmable, d’un ensemble de données de configuration de son exécution dans les limites des typologies de calculs exécutables. Dans un mode de réalisation particulier, le composant logique programmable est un FPGA (circuit intégré prédiffusé programmable, ou « Field Programmable Gate Array » en anglais) ou un ASIC (circuit intégré à application spécifique, ou « A pplication Specific Integrated Circuit » en anglais). Dans un mode de réalisation particulier, le composant logique programmable est paramétré de sorte à exécuter des calculs d’inférence pour l’intelligence artificielle. Dans un mode de réalisation particulier, le composant logique programmable est paramétré de sorte à exécuter des calculs d’apprentissage pour l’intelligence artificielle. Dans un mode de réalisation particulier, le logiciel d’orchestration est agencé pour fournir au composant d’exécution une adresse en mémoire de niveau 1 à laquelle l’ensemble de données de configuration est accessible, et pour fournir au composant logique programmable une commande d’exécution. Dans un mode de réalisation particulier, le composant logique programmable est en outre configuré pour extraire les structures de données et les caractéristiques fonctionnelles des calculs à exécuter et configuré pour déterminer comment lire et écrire des données en mémoire de niveau 1 (L1) et déterminer une logique d’exécution à mettre en œuvre. Dans un mode de réalisation particulier la logique d’exécution à mettre en œuvre appartient au groupe comprenant : - un réseau de neurones de type perceptron multicouches ; - un réseau de neurones de type convolutionnel ; - un réseau de neurones récurent. Dans un mode de réalisation particulier, le composant logique programmable est configuré pour copier, au sein de sa mémoire de niveau 0, ledit ensemble de données de configuration, et pour effectuer les calculs requis par les données de configuration de l'ensemble de données de configuration. Dans un mode de réalisation particulier, le composant logique programmable est configuré pour effectuer récursivement le chargement, au sein de la mémoire de niveau 0, de données d’entrée en provenance de la mémoire de niveau 1, puis pour calculer, à partir desdites données d’entrée, des données de sortie et pour copier lesdites données de sortie au sein de la mémoire de niveau 1. La technique proposée vise aussi un procédé d’obtention d’une plateforme électronique telle que décrite précédemment dans l’un quelconque de ses différents modes de réalisation, dans lequel la création du composant logique programmable comprend les étapes suivantes : - l’obtention d’un fichier de paramétrisation du composant logique programmable, comprenant, pour au moins une caractéristique dudit composant logique programmable, une valeur représentative de la capacité du composant logique programmable à disposer de cette caractéristique ; - la compilation du fichier de paramétrisation du composant logique programmable, délivrant d’une part un fichier binaire d’implantation du composant logique programmable, et d’autre part un fichier exécutable d’orchestration du fonctionnement du composant logique programmable ; - la création du composant logique programmable en fonction dudit fichier binaire ; - le chargement dudit fichier exécutable par le processeur généraliste. Selon un autre aspect, la technique proposée vise également un procédé d’utilisation du composant logique programmable d’une plateforme électronique telle que décrite précédemment dans l’un quelconque de ses différents modes de réalisation, ce procédé comprenant une étape de configuration du composant logique programmable à l’aide de paramètres de configuration, et au moins une itération des étapes suivantes : - le chargement d’un ensemble de paramètres d’exécution ; - le chargement d’un ensemble de variables d’exécution ; - le calcul d’au moins un résultat d’exécution en fonction de l’ensemble des paramètres d’exécution et des variables d’exécution ; - l’enregistrement, au sein d’une zone mémoire du composant logique programmable, dudit au moins un résultat d’exécution. En conséquence, la présente technique vise aussi des programmes, susceptibles d’être exécutés par un ordinateur ou par un processeur de données, ces programmes comportant des instructions pour commander l'exécution des étapes des procédés tel que mentionnés ci-dessus. Un programme peut utiliser n’importe quel langage de programmation, et être sous la forme de code source, code objet, ou de code intermédiaire entre code source et code objet, tel que dans une forme partiellement compilée, ou dans n’importe quelle autre forme souhaitable. La présente technique vise aussi un support d'informations lisible par un processeur de données, et comportant des instructions d'un programme tel que mentionné ci-dessus. Le support d'informations peut être n'importe quelle entité ou terminal capable de stocker le programme. Par exemple, le support peut comporter un moyen de stockage, tel qu'une ROM, par exemple un CD ROM ou une ROM de circuit microélectronique, ou encore un moyen d'enregistrement magnétique, par exemple un support mobile (carte mémoire) ou un disque dur ou un SSD. D'autre part, le support d'informations peut être un support transmissible tel qu'un signal électrique ou optique, qui peut être acheminé via un câble électrique ou optique, par radio ou par d'autres moyens. Le programme selon la présente technique peut être en particulier téléchargé sur un réseau de type Internet. Alternativement, le support d'informations peut être un circuit intégré dans lequel le programme est incorporé, le circuit étant adapté pour exécuter ou pour être utilisé dans l'exécution du procédé en question. Selon un mode de réalisation, la présente technique est mise en œuvre au moyen de composants logiciels et/ou matériels. Dans cette optique, le terme "module" peut correspondre dans ce document aussi bien à un composant logiciel, qu'à un composant matériel ou à un ensemble de composants matériels et logiciels. Un composant logiciel correspond à un ou plusieurs programmes d'ordinateur, un ou plusieurs sous-programmes d'un programme, ou de manière plus générale à tout élément d'un programme ou d'un logiciel apte à mettre en œuvre une fonction ou un ensemble de fonctions, selon ce qui est décrit ci-dessous pour le module concerné. Un tel composant logiciel est exécuté par un processeur de données d'une entité physique (terminal, serveur, passerelle, set-top-box, routeur, etc.) et est susceptible d'accéder aux ressources matérielles de cette entité physique (mémoires, supports d'enregistrement, bus de communication, cartes électroniques d'entrées/sorties, interfaces utilisateur, etc.). De la même manière, un composant matériel correspond à tout élément d'un ensemble matériel (ou hardware) apte à mettre en œuvre une fonction ou un ensemble de fonctions, selon ce qui est décrit ci-dessous pour le module concerné. Il peut s'agir d'un composant matériel programmable ou avec processeur intégré pour l'exécution de logiciel, par exemple un circuit intégré, une carte à puce, une carte à mémoire, une carte électronique pour l'exécution d'un micrologiciel (firmware), etc. Chaque composante du système précédemment décrit met bien entendu en œuvre ses propres modules logiciels. Les différents modes de réalisation mentionnés ci-dessus sont combinables entre eux pour la mise en œuvre de la présente technique. Figures D'autres buts, caractéristiques et avantages de l'invention apparaîtront plus clairement à la lecture de la description suivante, donnée à titre de simple exemple illustratif, et non limitatif, en relation avec les figures, parmi lesquelles : illustre le principe général d’un procédé de création d’un composant logique programmable, dans un mode de réalisation particulier de la technique proposée ; illustre le principe général d’un procédé d’utilisation d’un composant logique programmable, dans un mode de réalisation particulier de la technique proposée ; présente un exemple de fichier de paramétrage d’un composant logique programmable, dans un mode de réalisation particulier de la technique proposée ; décrit de manière schématique le résultat d’une opération de paramétrage d’un composant logique programmable, dans un mode de réalisation particulier de la technique proposée ; décrit un exemple d’architecture d’une plate-forme de traitement de données dans un mode de réalisation particulier de la technique proposée ; présente des exemples d’interfaces d’un composant logique programmable ayant des capacités d’entraînement, dans un mode de réalisation particulier de la technique proposée ; présente des exemples d’interfaces d’un composant logique programmable ayant des capacités d’inférence, dans un mode de réalisation particulier de la technique proposée ; décrit un exemple d’interactions entre Manager et Exécuteur, dans un mode de réalisation particulier de la technique proposée ; illustre un exemple d’utilisation d’un composant logique programmable pour la mise en œuvre d’un réseau de neurones MLP multicouches, dans un mode de réalisation particulier de la technique proposée ; illustre un exemple d’utilisation d’un composant logique programmable pour la mise en œuvre d’un réseau de neurones CNN de type Lenet-5, dans un mode de réalisation particulier de la technique proposée ; illustre un exemple d’utilisation d’un composant logique programmable pour la mise en œuvre d’un réseau de neurones RNN de type LSTM, dans un mode de réalisation particulier de la technique proposée ; décrit les étapes du calcul d’un premier élément de données de sortie par un composant logique programmable, dans un mode de réalisation particulier de la technique proposée ; décrit les étapes du calcul d’un deuxième élément de données de sortie par un composant logique programmable, dans un mode de réalisation particulier de la technique proposée. Description détaillée de l’invention 1. Rappels des principes Comme explicité précédemment, l’invention vise à disposer d’une plateforme de calcul, notamment pour l’exécution d’algorithmes d’intelligence artificielle, qui soit polyvalente et peu gourmande en énergie. Pour ce faire, les inventeurs ont mis en œuvre une méthode de création d’un composant de calcul pseudo-générique, ce composant étant associée, au sein d’une plateforme, à un processeur généraliste, pour fournir une solution flexible d’exécution d’algorithmes d’intelligence artificielle, notamment. Le composant pseudo-générique est issu d’un travail de généralisation des calculs, notamment ceux réalisés dans le cas d’algorithmes d’intelligence artificielle, travail qui est présenté par la suite. Le principe général de l’invention consiste à effectuer une conception d’un composant pseudo-générique (également appelé composant logique programmable ou composant d’exécution), cette conception « pseudo générique » consistant à définir les calculs que ce composant d’exécution est en mesure de réaliser. Une fois le composant pseudo-générique paramétré (c’est-à-dire une fois que l’on a délimité les types de calculs que ce que ce composant peut effectuer), on configure ce composant d’exécution à la volée (c’est-à-dire au moment où son utilisation est requise) pour lui faire effectuer des calculs spécifiques. La configuration à la volée du composant consiste en la transmission d’un fichier de configuration. Ce fichier de configuration comprend les paramètres (fonctions, valeurs, coefficients, etc.) nécessaires à la mise en œuvre des calculs, dans les limites de généricité déterminées au moment de la conception. L’organisation de la mise en œuvre du composant pseudo-générique est effectuée par un processeur généraliste, associé, au sein d’une plateforme d’exécution, à ce composant pseudo-générique. Cette plateforme, globalement, peut se présenter sous la forme d’un SOC (de l’anglais pour « système on chip »). La plateforme d’exécution comprend ainsi un processeur généraliste, ayant la capacité d’accéder à une mémoire dite de niveau 1 (L1). Le processeur généraliste dispose également d’un accès à une ou plusieurs interfaces externes, telle que des interfaces réseaux, USB, UART, SPI, etc. Le processeur généraliste exécute un logiciel en charge de l’orchestration des exécutions du composant pseudo-générique. C’est ce logiciel qui fournit le fichier de configuration « à la volée » et des données sur lesquelles les calculs doivent être réalisés. Une fois cette configuration et ces données reçues, le composant pseudo-générique (ou composant logique programmable) effectue les calculs demandés par le fichier de configuration. Pour ce faire, le composant logique programmable met en œuvre conjointement sa propre mémoire (appelée mémoire de niveau 0, ou L0) et la mémoire de niveau 1 de la plateforme. Ainsi, le composant logique programmable dispose également des instructions permettant l’accès en lecture et en écriture à cette mémoire de niveau 1. Ainsi, d’une manière générale, sur la base de la généralisation des calculs effectuée par les inventeurs, le procédé de création du composant logique programmable objet de l’invention comprend, comme illustré sur la dans un mode de réalisation particulier : Une étape d’obtention 11 d’un fichier de paramétrisation du composant logique programmable, comprenant, pour au moins une caractéristique dudit composant logique programmable, une valeur représentative de la capacité du composant logique programmable à disposer de cette caractéristique ; Une étape de compilation 12 du fichier de paramétrisation du composant logique programmable, délivrant, d’une part un fichier binaire (de type « bitstream ») d’implantation du composant logique programmable et d’autre part un fichier exécutable d’orchestration du fonctionnement du composant logique programmable ; Une étape de création 13 du composant logique programmable en fonction du fichier binaire (par exemple opération de flashage du fichier binaire « bitstream » sur un FPGA, ou encore création d’un ASIC sur la base du fichier binaire) ; et Une étape de chargement 14 du fichier exécutable par le processeur généraliste. Ces étapes peuvent conduire à la fabrication (initialisation) d’une plateforme d’exécution intégrée (de type SOC, de l’anglais pour « System On Chip » ) comprenant à la fois le processeur généraliste, de la mémoire de niveau 1 accessible par le processeur généraliste, le composant logique programmable issu du fichier de paramétrisation (ce composant disposant de ressources déterminées à partir du fichier de paramétrisation et disposant d’une mémoire de niveau 0). Muni de ce composant logique programmable et plus généralement de cette plateforme de mise en œuvre, l’invention se rapporte ensuite à la manière dont ce composant est utilisé au sein de la plateforme, notamment pour configurer et exécuter les différentes fonctionnalités d’intelligence artificielle qui y sont implantés. L’invention porte notamment sur la manière dont le composant logique programmable reçoit les données de configuration et exécute les algorithmes d’intelligence artificielle selon les directives fournies par le logiciel s’exécutant sur le processeur généraliste, en réalisant des écritures et lectures de mémoire de niveau 0 et de niveau 1). Les sections suivantes détaillent les différentes caractéristiques du composant pseudo-générique et de la plateforme qui y est associée. 2. Généralisation des calculs En premier lieu, les inventeurs ont défini une formalisation d’opérations menées dans le cadre d’une série de calculs. Les calculs en question peuvent être des calculs matriciels, mais pas uniquement. Plus particulièrement, il est possible de décrire la méthodologie mise en œuvre par les inventeurs en se basant sur l’exemple particulier des réseaux de neurones. Ainsi, sur la base des constatations d’inefficacité, notamment énergétique, détaillées précédemment, les inventeurs ont défini une description générique de réseaux de neurones (a) disposant de capacités d'entraînement en ligne, (b) permettant la configuration et la reconfiguration à la volée pour tout type de réseau de neurone, (c) portable sur tout dispositif embarqué mais ciblant particulièrement les dispositifs FPGA/ASIC et (d) permettant la possibilité d'intégration dans une architecture d'apprentissage fédérée ou distribuée. La base de l’approche des inventeurs repose sur l'affirmation que tous les réseaux neuronaux sont, en fait, des transformations d'un espace multidimensionnel (les dimensions d'entrée) en un autre (les dimensions de sortie). D’une manière générale, tout calcul est une transformation d'un espace multidimensionnel d'entrée en un espace multidimensionnel de sortie. Éventuellement, ces espaces d’entrée et de sortie peuvent être monodimensionnels (une transformation polynomiale à une seule variable par exemple). Plus spécifiquement, deux opérations globales principales sont utilisées pour tout réseau de neurones : - l'inférence : il s'agit de l'opération de prédiction, c'est généralement la partie qui s'exécute sur le composant électronique embarqué une fois que le réseau de neurones à été paramétré et entrainé ; cette inférence peut globalement être définie comme la résolution d’une équation à partir d’une pluralité de variable d’entrées ; - l'apprentissage : c'est l'opération d'apprentissage composée de deux phases. La descente de gradient dans laquelle le but est de propager l'erreur entre la sortie (générée par le réseau de neurones) et la sortie attendue (étiquette, label) à toutes les couches et la seconde phase où l'objectif est de corriger la transformation afin de la rendre plus optimale pour la prochaine étape d'inférence (pour simplifier, mises à jour des coefficients de la transformation). Ces deux phases sont décrites ci-après, et l’on constate qu’elles sont toutes deux équivalentes à un calcul matriciel multidimensionnel, comprenant un ensemble de paramètres d’entrées et de sorties (dimension d’entées, dimensions de sorties) et des paramètres internes (dimensionalité des matrices des couches cachées, poids – c’est-à-dire valeurs - de ces matrices, tailles et valeurs des biais et fonctions d’activation sélectionnées). 2.1 Opérations d'inférence (passe « feedforward ») Pour la phase d'inférence complète (c'est-à-dire la passe « feedforward ») d'un réseau de neurones complexe, en considérant que Output = Y, Input = X, et W les données internes (internes à la transformation complète, généralement appelées les poids), il est possible écrire qu'un réseau de neurones est une fonction f(..) de X et W à Y : Ou plus formellement, avec X représente un n-uplet de nombres réels dans l'ensemble R n (à n dimensions), W représente un n-uplet de nombres réels dans l'ensemble R k (à k dimensions) Y un n-uplet de nombres réels dans l'ensemble R m (avec m dimensions). La transformation d'inférence complète peut être décomposée comme une combinaison de N transformations unitaires et il est possible d’écrire : Les résultats de fournis par ces fonctions f N , f N -1 ,… sont stockés en mémoire comme une couche cachée notée H. Par conséquent : Ainsi, par exemple, une couche MLP (version étendue et complexe du perceptron original) est une transformation d'un vecteur de 1 dimension à un autre de 1 dimension via une multiplication matricielle, une addition vectorielle et l'utilisation d'une fonction d'activation non linéaire. Considérant que cette transformation est notée MLP et est appliquée d'un vecteur X de N valeurs à un vecteur Y de M valeurs. La couche MLP consiste à multiplier X par une matrice de poids W, à ajouter un vecteur de biais b de M valeurs (notons que W et b sont considérés comme les données internes notées globalement W pour la transformation) et à passer tous les résultats dans une fonction d'activation notée φ. Par exemple, si l’on combine deux fonctions MLP, il est possible d’écrire que : En décrivant les réseaux de neurones de cette manière, on construit n'importe quel type de réseau de neurones. Par exemple, l’architecture Lenet5 qui, en utilisant : C pour la transformation de la couche de convolution, SS pour la transformation de sous-échantillonnage et FC pour « fully connected » (c'est-à-dire MLP), X par exemple une image MNIST en entrée et Y la prédiction des chiffres manuscrits peut s'écrire : Les transformations (c'est-à-dire toutes les différentes fonctions f) peuvent être n'importe quel type de cellule de réseau neuronal, par exemple : MLP une transformation de 1 dimension à 1 dimension. Les cellules RNN telles que LSTM, GRU, MGU, STAR ou SRU qui sont une transformation de 1 dimension en 2 dimensions en 2 dimensions (à titre d'illustration, on peut voir un MLP avec une dimension temporelle). Cellules CNN (multidimensions à multidimensions) ou CNN-RNN combinés tels que ConvLSTM. Opérations simples : Buffer (exemple 1D vers 2D tel que d'une couche MLP vers un RNN), Addition ou couche d'agrégation (1D à 1D, 2D à 2D, ...), Sous-échantillonnage (Moyenne, Max, ...) Autres : Filtre de Kalman étendu (EKF) ou Filtre de Kalman noncentré (UKF) Cartes auto-organisatrices (SOM), processus de décision de Markov (MDP), POMDP, ... 2.2 Opérations de rétropropagation En revanche, pour permettre l'apprentissage du réseau neuronal, nous avons besoin des opérations inverses pour mettre à jour toutes les fonctions f en fonction de l'erreur entre la sortie générée Y (issue de la passe d'inférence du réseau neuronal) et la sortie attendue Y*, erreur notée δY : L'objectif de la rétropropagation est de mettre à jour les données internes W pour chaque fonction f , afin d'obtenir un réseau de neurones plus performant à l'itération suivante (c'est-à-dire avec une erreur plus faible). La toute première étape consiste à calculer le gradient de toutes les couches cachées, à l'inverse de l'inférence de la sortie vers l'entrée, par exemple : Ces gradients sont calculés à partir de la description en utilisant une règle de propagation (Daisy Chain Rule), puis utilisés pour mettre à jour les données de transformation interne en utilisant une fonction d'optimisation, notée optim , telle que Stochastic Gradient Descent (SGD) normal et avec momentum, ADAM ou ADAMAX. Ces algorithmes sont basés sur un ensemble de paramètres notés P (ex : le taux d'apprentissage, ces paramètres peuvent être différents pour chaque couche). Ainsi, dans ce calcul de descente de gradient, l’objectif est de mettre à jour les données internes W, qui correspondent aux poids des matrices ainsi qu’aux biais. L’apprentissage (dans lequel on effectue l’opération de rétropropagation) est donc à nouveau un calcul matriciel. En conséquence, pour l’exemple des réseaux de neurones, la mise en œuvre de ceux-ci consiste à fixer un certain nombre de paramètres (nombre de matrices, dimensions de celles-ci, poids, biais, fonctions d’activation, fonctions d’optimisation, etc.) qui permettent d’implémenter complètement un réseau sous la forme d’un composant particulier. Sur cette base, les inventeurs ont travaillé à formaliser une certaine généricité de ces paramètres afin d’implémenter, au sein d’un composant, un ensemble de fonctions génériques permettant la mise en œuvre d’un nombre beaucoup plus important de réseaux de neurones, et d’une manière plus générale un nombre beaucoup plus important de fonctions mathématiques. 2.3 Gestion de la mémoire Cependant, le point de vue conceptuel de dimensions multiples n'est pas applicable à la disposition de la mémoire d'une architecture basée sur un FPGA, un ASIC, un CPU ou un GPU. Toutes les dimensions doivent être converties en une seule et unique dimension. Ainsi, une entité (matrice) à 3 dimensions (DIM1, DIM2 et DIM3) est stockée en format simple (tous les éléments sont stockés en ligne, et adressable en ligne) avec par exemple DIM1 en premier, puis DIM2 et enfin DIM3. Cette disposition aurait pu être implémentée dans un autre ordre DIM3 d'abord, puis DIM2 et enfin DIM1. Le choix de cette disposition des données à stocker en mémoire est important à considérer afin d'y accéder de la manière la plus efficace possible, en particulier dans le cas d'une architecture à plusieurs niveaux de mémoire. Ainsi, sur un dispositif (physique), selon la technique mise au point par les inventeurs, cette mémoire est utilisée pour lire les données disponibles (entrées X et poids W) en fonction de leur emplacement dans la mémoire pour une transformation f et stocker (c'est-à-dire écrire) la sortie Y à un emplacement de mémoire spécifique. La logique de la transformation (tous les opérateurs nécessaires) est implémentée sur le composant pseudo-générique. Celui-ci accède à la mémoire en fonction de paramètres d’accès qui lui sont fournis, charge les données en mémoire, effectues les opérations demandées sur ces données en fonction des paramètres d’exécution fournis, et écrit les résultats obtenus à une adresse spécifique de sa mémoire interne. En d’autres termes, pour un composant pseudo-générique donné, la mise en œuvre d’une d’opération matricielle consiste en un chargement, ligne à ligne ou colonne par colonne, des matrices impliquées dans l’opération matricielle (par exemple une multiplication), puis à la réalisation de l’opération sur chaque terme de la matrice et enfin à l’enregistrement de chacun de ces termes dans une zone mémoire résultante du composant pseudo-générique. D’autres opérations mathématiques peuvent également être appliquées sur les termes de la matrice avant leurs enregistrements si cela est nécessaire. Ainsi, selon l’invention, la mise en œuvre (l’utilisation) d’un composant pseudo-générique pour gérer plusieurs opérations mathématiques différentes consiste en l’exécution d’un procédé comprenant tel qu’illustré en relation avec la , dans un mode de réalisation particulier : une étape de configuration 21 du composant à l’aide de paramètres de configuration ; les paramètres de configuration définissent la manière dont le composant doit s’exécuter ; pour un réseau de neurones, par exemple, les paramètres de configuration définissent la tailles des différentes couches, les fonctions d’activation à utiliser, l’ordre des couches, etc. et au moins une itération des étapes suivantes : une étape de chargement 22 d’un ensemble de paramètres d’exécution : il s’agit typiquement des paramètres des différentes fonctions, comme par exemple les constantes numériques, facteurs, etc. ; dans le cas d’un réseau de neurones, il s’agit typiquement du chargement des poids d’une matrice, de la fonction d’activation, et des éventuels biais associées pour la couche en cours d’exécution ; une étape de chargement 23 d’un ensemble de variables d’exécution ; il s’agit typiquement du chargement des valeurs d’entrées ; dans le cas du réseau de neurones, il s’agit du vecteur ou de la matrice d’entrée de la couche en cours d’exécutions ; au moins une étape de calcul 24 d’au moins un résultat d’exécution en fonction de l’ensemble des paramètres d’exécution et des variables d’exécution ; pour une fonction mathématique classique, il s’agit de calculer l’image de l’ensemble des variables d’exécution à l’aide des paramètres d’exécution ; pour le cas d’un réseau de neurones, il s’agit de calculer la matrice résultat de la couche courante ; une étape d’enregistrement 25, au sein d’une zone mémoire du composant, dudit au moins un résultat d’exécution. Les différentes étapes de ce procédé sont mises en œuvre autant de fois que nécessaire pour la réalisation de l’ensemble des calculs. Dans le cas du réseau de neurones, ces étapes sont mises en œuvre jusqu’à obtenir par exemple d’un ou de plusieurs vecteurs de sorties en fonction des variables d’entrée. 2.4 Mise en œuvre générale Forts de ces développements, les inventeurs ont donc mis au point une méthode de création d’un composant pseudo-générique, au sein d’une plateforme, autorisant la mise en œuvre de plusieurs typologies de calculs par ce seul composant pseudo-générique. Il est alors possible de réaliser plusieurs types de calculs différents (par exemple mettre en œuvre plusieurs réseaux de neurones différents) sans qu’il soit nécessaire de modifier le composant pseudo-générique lui-même. Cette méthode de création est basée sur l’implémentation (manuelle ou automatisée) d’un fichier de paramétrage qui permet de cadrer (de définir) les fonctionnalités possibles du composant. Ce fichier de paramétrage est utilisé pour générer, partir d’un compilateur, deux fichiers : un fichier binaire de type « bitstream », utilisé pour définir la logique programmable du composant pseudo-générique (FPGA ou ASIC) et un fichier exécutable par un processeur. L’architecture finale d’implémentation de ces deux fichiers est une plateforme comprenant un processeur généraliste (CPU), une mémoire gérée par ce processeur et un composant générique, le processeur généraliste et le composant générique échangeant des données par l’intermédiaire d’au moins un bus de données. Le fichier exécutable par le processeur est un fichier dit d’orchestration : il gère la configuration du composant, les données nécessaires à la mise en œuvre du composant (par exemple les données d’entrainement pour un réseau de neurones, qui sont les poids des matrices, les variables, etc.) à partir de la mémoire disponible pour ce processeur. Dans cette architecture, le composant (défini par son fichier « bitstream »), quant à lui, reçoit, de la part du processeur, les données de configuration nécessaires, puis une fois configuré, accède en mémoire L1 aux données d’exécution (variables d’entrées, poids du ou des couches du réseau, etc.). Le composant exécute les opérations qui lui sont instruites par l’intermédiaire du processeur (opérations matricielles). On dispose ainsi d’une plateforme « configurable » comprenant le processeur généraliste, la mémoire associée à ce processeur (appelée mémoire de niveau 1 – L1), un composant « générique » disposant lui-même de sa propre mémoire de travail (appelée mémoire de niveau 0 – L0). Une telle plateforme peut par exemple être mise en œuvre au sein d’un véhicule « intelligent ». Grace au composant « générique », il est possible de configurer des fonctions nouvelles à remplir, par exemple des nouveaux algorithmes d’intelligence artificielle (qui sont des algorithmes de calcul matriciels tels qu’explicités précédemment), qui n’ont pas été prévus à l’origine lors de la fabrication véhicule. Dans les sections suivantes, on décrit un exemple de réalisation d'une telle plateforme orientée vers le traitement de réseaux de neurones artificiels (c’est-à-dire le calcul matriciel). Les inventeurs ont développé la méthode décrite pour disposer, au sein d’un composant « pseudo-générique », des fonctionnalités nécessaires à l’implémentation de plusieurs typologies de réseaux de neurones et ce en limitant l’impact de cette généricité. 3. Paramétrisation initiale du composant pseudo-générique et de la plateforme associée La création d'une plateforme combinée comprend une première étape de paramétrisation discutée dans la présente section. La toute première et initiale étape de cette paramétrisation définit les "limites de généricité" du composant. La généricité ayant un coût, les concepteurs doivent définir ce que le composant pseudo-générique est capable de faire. Un exemple de fichier de paramétrage est illustré en relation avec la , dans un mode de réalisation particulier. Ce fichier est complété par un utilisateur afin de générer un composant pseudo-générique et son logiciel associé. L'utilisateur détermine quel ensemble d'opérateurs, parmi un ensemble prédéterminé d'opérateurs disponibles, doit être inclus dans le composant. Il fixe également des valeurs maximales pour certains paramètres. Les paramètres de ce fichier de paramétrisation sont utilisés pour générer un code VHDL synthétisable à partir d'une description complètement générique d'un composant. En déterminant les opérateurs et les paramètres, l'utilisateur peut ainsi ajuster le composant pseudo-générique résultant à ses besoins spécifiques et supprimer la logique inutile. La taille logique (dans un FPGA ou un ASIC) est alors réduite. La partie paramétrage, comme illustré sur la , permet de définir deux entités : (a). L'entité COBANN SW qui est l'orchestrateur ; (b). L'entité COBANN HW qui contient l'invention principale. C'est le coprocesseur de réseau de neurones artificiels qui effectue les calculs du réseau de neurones attendu sur la base de la méthode décrite précédemment. Les inventeurs obtiennent ainsi une architecture double comprenant un « Processing Sytem » (PS), c'est-à-dire le processeur, associé à la logique ( PL tournant sur un FPGA ou un ASIC) comme décrit dans la . PS : système de traitement à base de processeur (CPU) ; MGR : Manager (logiciel de traitement) pour la configuration du composant à logique programmable ; DH : Gestionnaire de données ; CH : Gestionnaire de configuration ; TH : Gestionnaire d’entrainement ; PER : Périphériques ; PL : composant logique programmable ; Composant FPGA ou bien ASIC ; E1 : exécuteur 1 au sein du composant logique programmable ; E2 : exécuteur 2 au sein du composant logique programmable ; FS : accès au système de fichier ; MC : Contrôleur de mémoire ; Le composant décrit en comprend deux entités. Une entité Manager (également appelé « composant logiciel ») qui est en charge de la gestion globale (configuration, mise à disposition des données) ainsi que des connections avec les différentes interfaces périphériques PER (par exemple des caméras ou des capteurs sur un vrai système embarqué). Une autre entité est le composant Exécuteur E1, E2 (également nommé « composant matériel ») qui peut être unitaire ou multiple (deux sont représentés sur la ). C’est l’Exécuteur qui est configuré par le Manager grâce à la configuration décrite précédemment. Ces composants sont illustrés dans la qui décrit un Manager connectés à deux Exécuteurs. Un de ces exécuteurs a la capacité à faire de l’entraînement en ligne (sur le composant) donc il est capable de faire de la back-propagation (i.e. BP capable). L’autre est uniquement capable de faire de l’inférence (feedforward i.e. FF only) et donc suppose un entraînement hors-ligne (selon le paradigme offline training). Pour rappel, les capacités d’un composant à faire de l’entraînement sont définis durant l’étape de paramétrisation, décrite précédemment. Ainsi, une fois paramétré et synthétisé, le composant matériel pseudo-générique est alors implémenté dans un FPGA, ou dans un ASIC et est contrôlé par le processeur PS (l’ensemble pouvant être intégré au sein d’un SOC). Ce composant matériel est considéré comme ayant au moins deux niveaux de mémoire, à savoir L0 et L1. Comme exposé précédemment, la mémoire L0 est la mémoire interne du composant matériel tel que des mémoires de blocs (BlockRAM – BRAM) sur FPGA. La mémoire L1 est la mémoire externe accessible via le processeur PS telle qu’une mémoire DDR. Grace à cette mémoire étendue, et à la gestion (configuration) de cette mémoire par le composant logiciel (s’exécutant sur le processeur PS), les inventeurs permettent l’utilisation de plus grand réseau de neurones. Il est important de noter que, de par sa construction matérielle, toutes les entités PS et PL accèdent à la même mémoire DDR notée L1. Ce qui implique que les données accessibles au Manager sur le PS sont également accessibles pour les Exécuteurs du PL. Cela est important par la suite en expliquant lorsque l’on considère les interactions entre le Manager (sur le PS) et l’ Exécuteur (sur le PL). Il est également possible de réaliser une implantation de cette architecture sur des FPGAs (et ASIC) uniquement. Dans ce type d’architecture, le composant Manager est directement intégré dans la logique du FPGA (ou de l’ASIC) ainsi que le contrôleur mémoire. Ce composant n’est alors pas nécessairement interfacé avec des périphériques, ni avec un système de fichiers. La totalité des transactions pour la configuration et la gestion des données peut être réalisée par l’intermédiaire d’une interface Ethernet (en 1 Gbits par exemple), ouvrant ainsi les possibilités vers des réseaux de neurones distribués. Le composant pseudo-générique comprend plusieurs interfaces, comme explicité en et en . Une entité Exécuteur possède plusieurs interfaces afin de fonctionner. Un composant ayant des capacités d’entraînement est doté de plus d’interfaces que le composant qui est uniquement capable de l’inférence. Un exécuteur BP capable ( ) est doté de treize interfaces différentes. Il y en a neuf utilisées pour l’inférence (Feed-Forward i.e. FF, ) : (1) config_in, (2) data_in, (3) result_out, (4) transf_data_inout, (6) layers_data_inout, (7) opcode_in, (8) localstate_out et (9) memory_layout_out. Il y en a 4 utilisées pour l’apprentissage (Back-Propagation i.e. BP): (10) label_in, (11) dtransf_data_inout, (12) dlayers_data_inout et (13) random_table_in. Plusieurs interfaces ne sont utilisées que pour l’entrainement des réseaux de neurones (lorsque ces fonctionnalités sont implémentées). Par conséquent, elles ne sont pas présentes lorsque le composant est paramétré uniquement pour l'inférence (calcul des prédictions). [config _ in] contient l'intégralité de la configuration de l'entité d'apprentissage en profondeur (réseau de neurones). Il précise la liste des transformations à appliquer de l'entrée à la sortie. Il définit les caractéristiques de chacun des opérateurs (c'est-à-dire les transformations) tel que la fonction d'activation et comment et où lire les différents opérandes actifs pour cette transformation (c'est-à-dire les données inhérentes à la transformation et les données de couche). [data _ in] ce sont les données qui sont présentées au composant pseudo-générique HW afin d'être traitées. Ce peut être un échantillon unique (c'est-à-dire une image, un flux, etc.) ou plusieurs entrées d'échantillons si le réseau le permet de rétropropager pour l'entraînement (voir section paramétrisation) (noté X dans la généralisation des calculs). [result _ out] il s’agit de la sortie du calcul par anticipation du réseau de neurones (noté Y dans la généralisation des calculs). [transf _ data _ inout] Ceci contient toutes les données de transformations (pondérations) de l'ANN (notées W dans la généralisation des calculs). [layers _ data _ inout] Il s'agit des résultats intermédiaires de chaque couche (noté H dans la généralisation des calculs). [report _ out] Divers indicateurs utilisés pour déterminer la performance du réseau. [opcode _ in] envoyé par le PS pour exécuter le composant pseudo-générique HW. Cela peut être (non exhaustif) : configuration, inférence, apprentissage. [localstate _ out] renvoie l'état du composant pseudo-générique. Il peut être (non exhaustif) : paramétré, Erreur d'objectif atteinte, Erreur d'objectif non atteinte. [memory _ layout _ out] le format et les dimensions des sorties. Comme l'agencement mémoire de chaque couche peut être déduit des transformations, le composant logique programmable fournit l'agencement des résultats au processeur PS. Les interfaces d’entrainement des réseaux de neurones sont : [label _ in] Il s'agit de l'étiquette des données pour la formation, c'est-à-dire qu'il s'agit de la sortie attendue pour le réseau de neurones. Il doit être comparé au résultat ci-dessus pour générer une erreur d'optimisation interne du réseau via la rétropropagation (notée Y dans la généralisation des calculs). [dtransf _ data _ inout] Il s'agit des coefficients delta, utilisés pour le calcul du gradient (noté W dans la généralisation des calculs). [dlayers _ data _ inout] Il s'agit des couches delta, utilisées pour le calcul du gradient (noté H dans la généralisation des calculs) [random _ table _ in] un tableau de valeurs aléatoires (généré par le logiciel s’exécutant sur le processeur PS), pour mélanger les échantillons d'apprentissage. Ainsi, la paramétrisation initiale permet de disposer d’un composant pseudo-générique associé à un processeur généraliste. Les interfaces de l’Exécuteur décrites sont, en conditions opérationnelles, des bus pour des accès à des zones de mémoires de la mémoire externe L1 (donc la DDR). On rappelle que, sur les implémentations SoC, ces données sont accessibles via le gestionnaire de mémoire du PS (le CPU). Comme illustré sur la , le rôle du Manager (MGR) est de procurer à l’Exécuteur (E2, pour l’exemple) les adresses de base mémoires (Adr_Bse) sur lesquels il peut lire/écrire les données liées à ces différentes interfaces. La structure des données à partir de ces adresses de bases est déterminée à partir de la configuration comme cela est expliqué par la suite. 4. Configuration du composant pseudo-générique Comme décrit dans la section généralisation des calculs, un réseau de neurones est considéré comme une combinaison (généralement une succession) de transformations appliquées à une entrée afin de générer une sortie. La configuration du composant logique programmable permet de définir cette succession de transformation de l'entrée vers la sortie. La disposition de la mémoire de l'entrée doit également être définie. Pour chaque transformation, l'utilisateur peut définir le type de transformation (voir une liste ci-dessous), le type de la fonction d'activation, la disposition des données de l'entrée (de la couche). Les différents paramètres des couches de rétropropagation peuvent également être définis, s'ils ont été inclus lors de la phase de paramétrisation. Le fichier de configuration comprend par exemple un identifiant, une taille de réseau de neurones, une structuration des données d’entrée (taille et dimension par exemple), la structuration des couches (pour chaque couche) [type, format des données – interne, entrée, sortie -, fonction d’activation à utiliser, dimension des vecteurs ou des matrices], la structuration de la retro propagation (back-propagation), pour chaque couche de rétropropagation (type d’erreur, paramètres, taux d’apprentissage, moment, régularisation), le nombre de cycles (« epoch »), etc. En résumé, la configuration est utilisée pour définir les types d'opérateurs (c'est-à-dire les transformations) à appliquer et ses caractéristiques, et à quels opérandes ils s'appliquent (opérandes de transformation interne comme les poids et les données de la couche précédente). La configuration peut être stockée dans un fichier. Le processeur PS effectue une initialisation du composant pseudo-générique avec cette configuration avant les calculs. Cette configuration est définie par l'utilisateur, elle peut être déterminée en utilisant des outils d'intelligence artificielle (framework) populaires tel que Pytorch ou TensorFlow. Liste non exhaustive des paramètres de d’inférence (feedforward) : Type de transformation : conv, sub max, sub min, sub avg, sub max, conv w sub, FC, LSTM, STAR, GRU, MGU, transformation de mémoire, agrégation Fonction d'activation : aucune, sigmoïde, tanh, tanh opt, sig int, tanh int, relu, softmax Liste non exhaustive des paramètres de rétropropagation : Type de dégradé descendant : Stochastic Gradient Descent (SGD), Stochastic Gradient Descent with Momentum (SGDM), adam, adamax, etc. Habituellement, la mémoire interne d'un dispositif FPGA (ou même d'un ASIC) est limitée et/ou extrêmement coûteuse. Comme indiqué ci-dessus, l’approche adoptée ne se limite pas à la mémoire locale car il est possible d’utiliser les composants de mémoire externe qui permettent via des opérations d'écriture/lecture de charger et d'exporter les données nécessaires pour chaque opération. L'accès en rafale de la mémoire L0 à L1 est défini dans la phase de paramétrage. 5. Traitement des échanges mémoire / Configuration du composant 5.1. Génération d’une configuration et de données en mémoire L1 La configuration du composant, consiste, une fois le composant « instancié » (c’est-à-dire une fois que l’on a défini les limites de généricité de ce composant et que l’on dispose d’un composant fonctionnel), à permettre au composant d’interagir correctement avec la mémoire L1 sur chacune de ses interfaces de bus mémoire (telles que définies précédemment). Une configuration, dans les limites de généricité de la paramétrisation, est composée de trois éléments principaux : les inputs , les labels et les listes de transformations . Si l’on considère uniquement des réseaux de neurones faisant de l’inférence, alors la configuration ne comprend pas de labels. Nous nous intéressons ici aux données présentées sur l’interface config_in. Cette configuration est par exemple générée à partir d’un fichier XML dont on a défini le formalisme, la structure et les éléments qui le composent. Ce fichier XML est donné en entrée au composant Manager qui génère la (les) bonne(s) structure de données pour l’interface config_in. Il est tout à fait envisageable, de prendre en compte des configurations de type ONNX (Open Neural Network Exchange) ou encore des fichiers spécifiques venant des « framework » (cadre de développement) les plus utilisés tels que Pytorch (et ses modèles enregistrés en « *.pth »). Si on considère des composants entraînés hors-ligne (offline training), les descriptions des modèles intègrent les données des différentes transformations propres au réseau de neurones. Ainsi, l’interface transf_data_inout est aussi constituée en accord avec la configuration de l’interface config_in. En d’autres termes, le manager, sur la base d’un fichier de configuration (interface config_in), informe le composant matériel (Exécuteur) du type ainsi que de la structure et de la localisation (adresses mémoire) des données de transformation (les données des différentes couches présentes sur l’interface transf_data_inout) dans la mémoire L1. Cette configuration permet également à l’exécuteur de connaitre la structure et la localisation des données en entrée (inputs_in et éventuellement labels_in si le composant est capable d’entrainement). Ainsi, l’exécuteur peut mettre en œuvre les fonctions prévues pour le réseau de neurones à partir de la configuration prévue tout en accédant correctement aux données nécessaires à partir de la structure de données et des adresses de base fournis également par cette configuration. Ensuite, l’exécuteur peut réaliser les calculs du réseau de neurone en écrivant/lisant les données intermédiaires pour les différentes couches dans la mémoire L1 (via l’interface layers_data_inout) et fournir le résultat final sur l’interface result_out. L’exécuteur peut également fournir la structure des données (adresses et dimensions) pour les données qu’il génère via l’interface memory_layout_out . 5.2 Configuration de l’Exécuteur Une configuration est ainsi fournie au composant Exécuteur à partir d’une adresse de base donnée. La Manager lui fournit les différentes adresses sur lesquels ces différentes interfaces seront branchées et utilisées. Le Manager lui transmet également un opcode (code d’opération) pour lui indiquer qu’il doit se configurer à partir de ces données présente sur son interface config_in à l’adresse de base fournie. L’Exécuteur détermine donc à partir de la configuration fournie (contenant la description des entrées et des transformations, ainsi que des labels) la façon de lire et d’écrire de façon correcte les données et les résultats dans la DDR (la mémoire L1). Le composant fournit également sur l’interface memory_layout_out la structure des données qu’il génère (typiquement les outputs et les données pour les couches intermédiaires, afin que le manager MGR puisse les lire et les décoder). Lors de la fin de cette phase de configuration, l’Exécuteur retourne son état de configuration et si cet état est correct, alors le composant est prêt à s’exécuter et est configuré à partir de la description fournie. En d’autres termes, l’Exécuteur, lit la configuration à partir des adresses fournies par le Manager, puis il extrait, à partir des adresses fournies, en mémoire L1, les structures de données à utiliser et les caractéristiques fonctionnelles adéquates, puis détermine : comment il effectue les lectures et les écritures en mémoire L1 et quelle est la logique fonctionnelle à appliquer (MLP, CNN, fonctions d’activation, etc.). 5.3 Exemples On illustre la mise en œuvre du procédé de l’invention sur un exemple concret. Pour ce faire, on part du principe que l’on dispose de trois réseaux de neurones différents que l’on souhaite appliquer à partir des mêmes données d’entrées (ici, le cas d’étude historique du MNIST). Ces réseaux sont (1) ANN-1 est un réseau MLP multicouches ; (2) ANN-2 est un réseau CNN de type Lenet-5 et (3) ANN-3 est un réseau RNN (récurrent) de type LSTM. Les hypothèses suivantes sont formulées : Ces trois réseaux sont capables de résoudre le problème de classification du MNIST. Ils prennent en entrée une image grise de taille 28×28 et fournissent en sortie un vecteur de classification de taille 10 qui correspond à la probabilité du chiffre reconnu sur l’image fournie en entrée (entre 0 et 9) ; La DDR considérée (donc la mémoire L1) est assez grande pour contenir toutes les données des trois réseaux. Cela signifie que les données de configuration, les données pour les niveaux intermédiaires et les données de transformations pour chaque réseau sont disponible en mémoire L1 (cette hypothèse est purement rhétorique puisque de nombreuses DDR pour les cartes embarquées peuvent atteindre 16, 32 ou encore 64 Gbits, ce qui est très suffisant pour traiter ce problème illustratif). Les trois réseaux ont été entraînés hors-ligne à l’aide d’un outil (Pytorch, Tensorflow, ...) et ont été sauvegardés au format ONNX dans les fichiers ann1.onnx, ann2.onnx et ann3.onnx. Ces fichiers ont été fournis à l’entité Manager afin de placer les données et les configurations associées dans la mémoire L1. L’Exécuteur a été correctement paramétré avec les fonctionnalités logiques requises pour l’exécution de ces trois types de réseaux. L’Exécuteur a une logique limitée, il ne peut donc gérer l’exécution que d’un seul réseau de neurones à la fois (on peut configurer et exécuter ANN-1 ou ANN-2 ou ANN-3). Ainsi, après une l’étape de génération de la configuration en mémoire L1 et de la copie des données associées, comme illustré en relation avec la (pour le réseau ANN-1), la (pour le réseau ANN-2) et la (pour le réseau ANN-3) le Manager peut configurer l’Exécuteur afin qu’il exécute chacun des réseaux disponibles en mémoire L1. L’Exécuteur fournit, successivement, pour chacun des trois réseaux, sur les interfaces « config_in », « transf_data_inout » et « layers_data_inout », « data-in » les données nécessaires à la mise en œuvre du réseau. Une fois configuré avec ces données, l’Exécuteur réalise les calculs pour lesquels il a été configuré, avec notamment, les calculs matriciels et les fonctions d’activation de la logique implémentée. Les données sont lues/écrites en mémoire L0 pour effectuer les calculs « internes » à l’Exécuteur et lorsque ces calculs sont achevés (ou lorsque la mémoire doit être purgée (par exemple pour un éventuel cycle de calcul suivant), les données sont écrites en mémoire L1 (sur les interfaces « result_out » ou « memory_layout_out »). L’Exécuteur, lit/écrit ses données de fonctionnement à différentes adresses en L1, la configuration associée lui permet d’interpréter la structure mémoire liée à ces entrées/sorties. On peut noter que dans ce cas précis, le composant lit les données d’entrée (data_in), écrira ses données de sortie (result_out) et fournit la structure de ses interfaces mémoires (i.e. memory layout sur l’interface memory_layout_out) à partir des mêmes adresses (donc les mêmes zones mémoires). Il peut être pertinent d’utiliser des zones différentes en particulier si les réseaux de neurones utilisés (et à configurer sur le composant) ont des objectifs/buts différents. 5.4 Exécution de gestion des interactions L0/L1 Une fois configuré tel que décrit précédemment, l’Exécuteur doit mettre en œuvre les opérations pour lesquelles il a été configuré et pour cela il réalise plusieurs opérations de « copie » afin d’acquérir l’ensemble des données (opérandes) nécessaires à la réalisation des opérations configurées en L1 afin d’en disposer en mémoire L0. Inversement, une fois les opérations réalisées, il réalise des opérations de copie des résultats obtenus (par ses calculs) de sa mémoire locale L0 jusqu’en mémoire externe L1. Il est possible d’illustrer ce fonctionnement en considérant l’opération élémentaire d’un réseau MLP sous la forme de l’expression 1 considérant les matrices ou de la forme de l’expression 2 en considérant les éléments (le biais b est un poids particulier faisant partie des données de transformations). (1) (2) Le vecteur X est un vecteur de taille N accessible sur l’interface « layers_data_inout » de la mémoire L1 et de même le vecteur résultat de cette opération noté Y (de taille M ). Les données de transformation W et b sont accessibles sur l’interface « transf_data_inout » de la mémoire L1. Si on considère que N =1000 et M =500, nous pouvons déterminer que la matrice de poids W est de taille M ∗ N =500∗1000 et le vecteur de biais est de taille M = 500. Un découpage possible est donc de copier de la mémoire L1 vers la mémoire locale L0 les données nécessaires pour calculer les éléments de Y de façon unitaire. Ainsi étape par étape, chaque élément y j est calculé en suivant la méthode suivante, comme illustré sur la et la qui présentent respectivement le calcul de l’élément Y 1 puis de l’élément Y 2 : (1) Copie des données de L 1 vers L 0, (2) Calcul et génération du résultat à partir de la logique implémentée ; et (3) Copie du résultat de la mémoire L 0 vers la mémoire externe L 1. Il est à noter que la copie du vecteur d’entrée X ne fait qu’une seule fois pour tous les calculs de Y (car ce vecteur X d’entrée ne change pas). Plateforme électronique de traitement de données, plateforme comprenant un processeur généraliste (PS) et une mémoire dite de niveau 1 (L1), ladite plateforme comprenant en outre un composant logique programmable (PL) comprenant une mémoire dite de niveau 0 (L0), le composant logique programmable étant paramétré de sorte à définir des typologies de calculs exécutables, ladite plateforme comprenant en outre un logiciel d’orchestration s’exécutant sur le processeur généraliste, le logiciel d’orchestration ayant la charge de la fourniture, au composant logique programmable, d’un ensemble de données de configuration de son exécution dans les limites des typologies de calculs exécutables. Plateforme électronique selon la revendication 1, caractérisée en ce que le composant logique programmable est un FPGA ou un ASIC. Plateforme électronique selon la revendication 1, caractérisée en ce que le composant logique programmable est paramétré de sorte à exécuter des calculs d’inférence pour l’intelligence artificielle. Plateforme électronique selon la revendication 1, caractérisée en ce que le composant logique programmable est paramétré de sorte à exécuter des calculs d’apprentissage pour l’intelligence artificielle. Plateforme électronique selon la revendication 1, caractérisée en ce que le logiciel d’orchestration est agencé pour fournir au composant d’exécution une adresse en mémoire de niveau 1 à laquelle l’ensemble de données de configuration est accessible, et pour fournir au composant logique programmable une commande d’exécution. Plateforme électronique selon la revendication 5, caractérisée en ce que le composant logique programmable est en outre configuré pour extraire les structures de données et les caractéristiques fonctionnelles des calculs à exécuter et configuré pour déterminer comment lire et écrire des données en mémoire de niveau 1 (L1) et déterminer une logique d’exécution à mettre en œuvre. Plateforme électronique selon la revendication 6, caractérisée en ce que la logique d’exécution à mettre en œuvre appartient au groupe comprenant : un réseau de neurones de type perceptron multicouches ; un réseau de neurones de type convolutionnel ; un réseau de neurones récurent. Plateforme électronique selon la revendication 5, caractérisée en ce que le composant logique programmable est configuré pour copier, au sein de sa mémoire de niveau 0 (L0), ledit ensemble de données de configuration et pour effectuer les calculs requis par les données de configuration de l'ensemble de données de configuration. Plateforme électronique selon la revendication 6, caractérisée en ce que le composant logique programmable est configuré pour effectuer récursivement le chargement, au sein de la mémoire de niveau 0 (L0), de données d’entrée en provenance de la mémoire de niveau 1 (L1), puis pour calculer, à partir desdites données d’entrée, des données de sortie et pour copier lesdites données de sortie au sein de la mémoire de niveau 1 (L1). Procédé d’obtention d’une plateforme électronique selon la revendication 1, caractérisé en ce que la création du composant logique programmable comprend les étapes suivantes : obtention (11) d’un fichier de paramétrisation du composant logique programmable , comprenant, pour au moins une caractéristique dudit composant logique programmable, une valeur représentative de la capacité du composant logique programmable à disposer de cette caractéristique ; compilation (12) du fichier de paramétrisation du composant logique programmable, délivrant d’une part un fichier binaire d’implantation du composant logique programmable, et d’autre part un fichier exécutable d’orchestration du fonctionnement du composant logique programmable ; création (13) du composant logique programmable en fonction dudit fichier binaire ; chargement (14) dudit fichier exécutable par le processeur généraliste. Procédé d’utilisation du composant logique programmable d’une plateforme électronique selon la revendication 1, caractérisé en ce qu'il comprend une étape de configuration (21) du composant logique programmable à l’aide de paramètres de configuration, et au moins une itération des étapes suivantes : chargement (22) d’un ensemble de paramètres d’exécution ; chargement (23) d’un ensemble de variables d’exécution ; calcul (24) d’au moins un résultat d’exécution en fonction de l’ensemble des paramètres d’exécution et des variables d’exécution ; enregistrement (25), au sein d’une zone mémoire du composant logique programmable, dudit au moins un résultat d’exécution.