Cette page a été traduite automatiquement.
Merci de bien vouloir compléter un sondage de 1 minute concernant la qualité de cette traduction.
Un processus productif pour déployer de minuscules réseaux neuronaux sur des microcontrôleurs
Par Danilo Pau, STMicroelectronics, et Brenda Zhuang, MathWorks
Les applications de Machine Learning et de Deep Learning sont de plus en plus déplacées du cloud vers des appareils embarqués proches de l’origine des données. Alors que le marché de l’informatique périphérique se développe rapidement, plusieurs facteurs stimulent la croissance de l’intelligence artificielle périphérique (Edge AI), notamment l’évolutivité, la demande croissante d’applications d’IA en temps réel et la disponibilité d’appareils en périphérie à faible coût complétés par des chaînes d’outils logicielles robustes et productives. De plus, il est nécessaire d’éviter de transmettre des données sur un réseau, soit pour des raisons de sécurité, soit simplement pour minimiser les coûts de communication.
L’Edge AI englobe une large gamme de dispositifs, de capteurs, de microcontrôleurs, de multi-microprocesseurs sur puce, de processeurs d'application et de systèmes dédiés sur puce, y compris des serveurs Edge relativement puissants et des modules IoT. La communauté de référence, la Fondation tinyML, créée en 2019, se concentre sur le développement de modèles de Machine Learning et leur déploiement sur des appareils embarqués aux ressources extrêmement restreintes, dotés de budgets limités en termes de mémoire, de puissance de traitement et de consommation d'énergie. TinyML ouvre des opportunités uniques, notamment des applications pouvant être alimentées par des batteries bon marché ou même de petits panneaux solaires, ainsi que des applications à grande échelle qui traitent les données localement sur du matériel à faible coût. Bien entendu, TinyML présente également divers défis. L’un de ces défis concerne les développeurs de Machine Learning et de systèmes embarqués qui doivent optimiser les performances et l’empreinte des applications, ce qui nécessite une maîtrise à la fois de l’IA et des systèmes embarqués.
Dans un tel contexte, cet article décrit un cadre pratique pour le design et le déploiement de réseaux neuronaux profonds sur des appareils périphériques. Basé sur des produits MATLAB® et Simulink®, avec des outils Edge AI de STMicroelectronics®, le framework aide les équipes à développer rapidement leur expertise en matière de Deep Learning et de déploiement en périphérie, leur permettant de surmonter les obstacles courants rencontrés avec TinyML. Cela leur permet à leur tour de créer et d'évaluer rapidement des applications TinyML de preuve de concept. Dans les premières étapes du workflow, les équipes utilisent MATLAB pour créer un réseau de Deep Learning, ajuster les hyperparamètres avec l’optimisation bayésienne, utiliser la distillation des connaissances et compresser le réseau avec l’élagage et la quantification. Dans la dernière étape, les développeurs utilisent la technologie ST Edge AI Core intégrée dans le ST Edge AI Developer Cloud—un service en ligne gratuit pour le développement de l'IA sur les microcontrôleurs et microprocesseurs 32 bits de STMicroelectronics (STM32, Stellar), ou encore sur les capteurs équipés d'IA intégrée—pour évaluer l'utilisation des ressources et la vitesse d'inférence pour le réseau de Deep Learning déployé (Figure 1).
Design de réseau, apprentissage et optimisation des hyperparamètres
Une fois que les ingénieurs ont rassemblé, prétraité et préparé l'ensemble de données à utiliser dans l'application de Deep Learning, l'étape suivante consiste à former et à évaluer les modèles candidats, qui peuvent inclure des modèles pré-entraînés, tels que NASNet, SqueezeNet, Inception-v3 et ResNet-101, ou des modèles que l'ingénieur en Machine Learning a construits de manière interactive à l'aide de l’application Deep Network Designer (Figure 2). Plusieurs modèles fournissent des exemples qui peuvent être utilisés pour démarrer le développement, y compris des exemples de modèles pour l’image, la vidéo, le son, et la classification des nuages de points de données lidar, la détection d'objet, l’estimation de la pose et la segmentation de forme d'onde.
Les performances d’un réseau de Deep Learning dépendent fortement à la fois des paramètres qui régissent sa formation et de ceux qui décrivent son architecture réseau. Exemples de ces hyperparamètres qui incluent le taux d'apprentissage et la taille du lot, ainsi que le nombre de couches, le type de couches et les connexions entre les couches. Un réglage approprié des hyperparamètres peut conduire à des modèles qui atteignent une plus grande précision et de meilleures performances, même dans les environnements aux ressources limitées dans lesquels s'exécutent les applications TinyML. Cependant, la sélection et le réglage précis des valeurs des hyperparamètres pour trouver la combinaison qui optimise les performances peuvent être une tâche difficile et longue.
L'optimisation bayésienne est bien adaptée à l'optimisation des hyperparamètres des réseaux de Deep Learning de classification et de régression, car elle explore efficacement l'espace des hyperparamètres à haute dimension pour trouver des configurations optimales ou presque optimales. Dans MATLAB, le développeur de Machine Learning peut utiliser la fonction Bayesopt
permettant de trouver les meilleures valeurs d'hyperparamètres à l'aide de l'optimisation bayésienne. Par exemple, il peut fournir un ensemble d’hyperparamètres à évaluer (tels que le nombre de couches convolutives, le taux d’apprentissage initial, l’élan et la régularisation L2) et une fonction objective (telle que l’erreur de validation) à minimiser. La fonction peut ensuite utiliser les résultats de Bayesopt
pour sélectionner un ou plusieurs ensembles de configurations d'hyperparamètres à explorer plus en détail dans les phases suivantes du workflow.
Distillation des connaissances
Les équipements embarqués aux ressources restreintes disposent d'une mémoire disponible limitée. La distillation des connaissances est une approche permettant de réduire l’empreinte d’un réseau de Deep Learning tout en conservant un niveau de précision élevé. Cette technique utilise un réseau enseignant plus large et plus précis pour apprendre à un réseau apprenant plus petit à faire des prédictions. La clé est de sélectionner des fonctions de perte dans les architectures de réseau enseignant-apprenant.
Les réseaux formés aux étapes précédentes peuvent être utilisés comme modèle enseignant. Un réseau apprenant est une version plus petite mais similaire du modèle enseignant. En règle générale, le modèle apprenant contient moins de blocs convolution-batchnorm-ReLU. Pour tenir compte de la réduction dimensionnelle, des couches de pooling maximales ou un pooling moyen global sont ajoutés dans le réseau apprenant. Ces modifications réduisent considérablement le nombre d’apprenants par rapport au réseau enseignant.
Une fonction de perte de distillation des connaissances doit être définie pour former le réseau apprenant. Il est déterminé à partir de l'entrée du réseau apprenant, du réseau enseignant, des données d'entrée avec une cible correspondante et de l'hyperparamètre de température. Empiriquement, la fonction de perte consiste en une moyenne pondérée de 1) la perte dure, qui est la perte d'entropie croisée entre les sorties du réseau apprenant et la véritable étiquette ; et 2) la perte douce, qui est la perte d'entropie croisée du SoftMax avec la température entre les logits du réseau apprenant et celui du réseau enseignant.
Le réseau apprenant formé préserve mieux la précision du réseau enseignant et permet de réduire les paramètres pouvant être appris, ce qui le rend plus adapté au déploiement sur des appareils embarqués.
Compression et optimisation des modèles
Un design efficace et une optimisation des hyperparamètres pendant la phase d’apprentissage constituent une première étape essentielle ; cependant, elles ne suffisent pas à garantir le déploiement sur les appareils périphériques. L’optimisation post-formation via l’élagage et la quantification du modèle est donc importante pour réduire davantage l’empreinte mémoire et les besoins de calcul d’un réseau neuronal profond.
L’une des méthodes les plus efficaces de compression réseau est la quantification. Cela est dû au fait que les données sont acquises avec une précision entière, car aucun capteur de grand volume ne génère de représentations à virgule flottante. Avec la quantification, l'objectif est de réduire l'empreinte mémoire nécessaire pour stocker les paramètres du réseau et d'augmenter la vitesse de calcul en représentant les poids et les activations du modèle avec un nombre réduit de bits. Cela peut impliquer, par exemple, de remplacer des nombres à virgule flottante de 32 bits par des entiers de 8 bits, là encore lorsque cela est possible, en n’acceptant qu’une dégradation marginale de la précision des prédictions. La quantification permet une utilisation parcimonieuse de la mémoire intégrée, ce qui est essentiel pour les capteurs, les microcontrôleurs et les microprocesseurs à ressources limitées (Figure 3) en périphérie. De plus, les opérations sur les entiers sont généralement plus rapides sur le matériel que les opérations à virgule flottante, ce qui entraîne une amélioration des performances d'inférence sur les microcontrôleurs. Cela conduit à des modèles consommant moins d’énergie, ce qui les rend encore plus adaptés au déploiement sur des appareils alimentés par batterie ou à consommation d’énergie limitée tels que les téléphones mobiles et les appareils IoT. Alors que la quantification post-formation est censée introduire certaines pertes de précision, les outils de quantification de MATLAB sont conçus pour minimiser l'impact sur la précision du modèle. Des techniques telles que le réglage fin et l’étalonnage sont utilisées pour maintenir les performances du modèle quantifié. Dans MATLAB, la fonction dlquantizer
simplifie le processus de quantification des poids, des biais et des activations d'un réseau neuronal profond en valeurs entières de 8 bits.
Les techniques d’élagage, en revanche, visent à réduire la complexité d’un réseau en minimisant la redondance opérationnelle. Ceci est fondamental pour réduire considérablement la complexité des calculs. L’idée est d’identifier et de supprimer les connexions, les poids, les filtres ou même les couches entières qui ont peu d’effet sur les prédictions du réseau. La projection est une technique propriété de MATLAB utilisée pour optimiser les réseaux neuronaux en supprimant sélectivement les poids ou les connexions moins importants. Ce processus réduit la complexité du modèle, ce qui se traduit par une taille de modèle plus petite et des temps d'inférence plus rapides sans compromettre de manière significative la performance. Alors que l'élagage régulier implique généralement une suppression simple basée sur un seuil des poids de faible ampleur, la projection peut intégrer des critères et des méthodes plus sophistiqués pour garantir que les caractéristiques essentielles du réseau sont préservées. De plus, la projection vise souvent à maintenir les propriétés géométriques de l’espace de poids, ce qui conduit à des modèles potentiellement plus efficaces et plus robustes par rapport aux méthodes d’élagage traditionnelles.
Analyse comparative sur ST Edge AI Developer Cloud
Une fois le design initial du réseau, l’optimisation des hyperparamètres, la distillation et la compression dans MATLAB terminés, l’étape suivante du workflow consiste à évaluer la performance de ce design sur un microcontrôleur ou un microprocesseur. Plus précisément, les ingénieurs doivent évaluer les besoins en mémoire flash et en RAM du réseau ainsi que la vitesse d’inférence, entre autres facteurs.
ST Edge AI Developer Cloud est conçu pour rationaliser cette étape du workflow en permettant un benchmark rapide des réseaux sur les appareils ST Edge. Pour utiliser ce service pour une application TinyML développée dans MATLAB, vous devez d'abord exporter le réseau au format ONNX. Après avoir téléchargé le fichier ONNX généré sur ST Edge AI Developer Cloud, les ingénieurs peuvent sélectionner le ou les appareils ST sur lesquels exécuter les tests de performance (Figure 4).
Une fois l’analyse comparative terminée, ST Edge AI Developer Cloud fournit un rapport détaillant les résultats (Figure 5). Les outils d'analyse des performances fournis par ST Edge AI Developer Cloud offrent une variété d'informations détaillées, notamment sur l'utilisation de la mémoire, la vitesse de traitement, l'utilisation des ressources et la précision du modèle. Les développeurs reçoivent des informations sur la consommation de RAM et de mémoire flash, avec une répartition de l'allocation de mémoire pour différentes couches et composants du modèle. De plus, les outils fournissent le temps d’exécution pour chaque couche et le temps d’inférence global, ainsi qu’une analyse temporelle détaillée pour identifier et optimiser les opérations lentes. Les statistiques d'utilisation des ressources, y compris l'utilisation du processeur et de l'accélérateur matériel, ainsi que les mesures de consommation d'énergie, aident à optimiser l'efficacité énergétique.
Après avoir examiné les résultats de référence, les ingénieurs peuvent identifier la meilleure marche à suivre pour les prochaines étapes. Si le design du réseau s'adapte confortablement aux contraintes d’un dispositif de périphérie donné avec des temps d'inférence faibles, ils peuvent explorer les possibilités d'utiliser un périphérique plus petit ou d'augmenter la précision de prédiction avec un réseau un peu plus grand et plus complexe. D'un autre côté, si le design du réseau est trop grand, entraînant des temps d'inférence lents en raison de l'utilisation de Flash ou de RAM externe, l'équipe peut alors rechercher un dispositif plus puissant en termes de calcul avec plus de Flash et de RAM intégrés, ou elle peut effectuer des optimisations d'hyperparamètres supplémentaires, une distillation des connaissances, un élagage et des itérations de quantification avec MATLAB pour compresser davantage le réseau. Le ST Edge AI Developer Cloud offre également une génération de code automatisée pour rationaliser le déploiement de modèles d'IA sur les appareils ST. Cette fonctionnalité convertit les modèles d'IA formés en code C optimisé compatible avec les capteurs, microcontrôleurs et microprocesseurs de STMicroelectronics.
De l'analyse comparative au déploiement
L’étape finale du workflow est le déploiement sur un capteur, un microcontrôleur ou un microprocesseur. Avec les résultats de l'analyse comparative en main, les ingénieurs peuvent prendre une décision éclairée sur le choix d'une plate-forme, comme un Kit de découverte STM32 pour évaluer leur application TinyML sur du matériel réel, par exemple.
Selon l’application, ils peuvent avoir besoin d’intégrer le réseau neuronal profond à d’autres composants, comme un contrôleur, et de les intégrer dans un système plus vaste avant le déploiement. Pour ces cas d'utilisation, ils peuvent étendre davantage le workflow, en modélisant les autres composants dans Simulink, en exécutant des simulations au niveau système pour valider le design et en générant du code C/C++ pour le déploiement sur des appareils STM32 à l'aide Embedded Coder® et avec le support de Embedded Coder pour STM32.
Publié en 2024