L'Open Neural Network Exchange (ONNX) est un écosystème open-source et un format standard pour représenter des modèles d'apprentissage automatique. Il fournit une représentation commune pour les algorithmes d'IA, permettant aux modèles d'être transférés entre différents frameworks, outils, et plateformes matérielles. Gouverné par une communauté collaborative d'entreprises technologiques et d'organisations de recherche, ONNX vise à rationaliser le développement et le déploiement de réseaux de neurones et d'autres systèmes d'apprentissage automatique.
ONNX est disponible sur GitHub, où ses spécifications, opérateurs, et outils sont maintenus. Le format définit un modèle de graphe de calcul extensible, des opérateurs intégrés, et des types de données standard, se concentrant principalement sur l'inférence (évaluation) plutôt que sur l'entraînement. Il utilise Protocol Buffers comme format de conteneur, assurant une sérialisation efficace et une compatibilité entre langages et systèmes.
Historique
ONNX a été initialement développé sous le nom de code « Toffee » par l'équipe PyTorch chez Facebook. En septembre 2017, il a été renommé ONNX et annoncé publiquement par Facebook et Microsoft. L'annonce a positionné le format comme un moyen de favoriser l'interopérabilité dans le domaine en pleine croissance de apprentissage profond.
Dans les mois suivant le lancement, plusieurs grandes entreprises technologiques ont déclaré leur soutien à l'initiative, notamment IBM, Huawei, Intel, AMD, Arm, et Qualcomm. En octobre 2017, Microsoft a élargi son engagement en annonçant que son Cognitive Toolkit et sa plateforme Project Brainwave s'intégreraient avec ONNX. L'année suivante, le projet a obtenu un soutien institutionnel plus large: en novembre 2019, ONNX a été accepté comme projet diplômé sous la Linux Foundation AI, une décision qui a solidifié sa gouvernance et son statut open-source. En octobre 2020, Zetane Systems a rejoint l'écosystème ONNX comme membre, élargissant encore la communauté.
Intent
L'objectif principal d'ONNX est de permettre l'interopérabilité des frameworks. Les développeurs peuvent créer des modèles dans un framework, comme PyTorch ou TensorFlow, et les exporter vers le format ONNX pour une utilisation dans un autre environnement. Cette capacité est particulièrement précieuse à différentes étapes du pipeline de développement, y compris l'entraînement, la conception d'architecture, l'évaluation de modèles, et le déploiement sur des appareils mobiles ou embarqués. En découplant la représentation des modèles des piles logicielles spécifiques, ONNX réduit le verrouillage fournisseur et simplifie la collaboration entre équipes.
Un autre objectif clé est l'optimisation partagée. ONNX fournit une représentation commune que les fournisseurs de matériel et les développeurs de logiciels peuvent utiliser pour appliquer des optimisations de performance aux modèles de réseaux de neurones sur plusieurs frameworks simultanément. Cela signifie qu'une seule technique d'optimisation, comme la fusion d'opérateurs ou la quantification, peut bénéficier à des modèles provenant de différentes sources, accélérant l'exécution sur GPU, CPU, et accélérateurs IA spécialisés.
Format et Structure
Les modèles ONNX sont représentés comme des graphes acycliques dirigés (DAGs, où chaque nœud correspond à un appel d'opérateur. Les nœuds ont des entrées et des sorties définies, formant un graphe de flux de données qui décrit le calcul. Le graphe est accompagné de métadonnées qui documentent des propriétés telles que la version du modèle, l'auteur, et les informations d'entraînement. Les opérateurs intégrés sont garantis d'être disponibles sur chaque framework conforme à ONNX, assurant un niveau de base de fonctionnalité à travers les implémentations.
Le format est extensible, permettant d'ajouter des opérateurs personnalisés et des types de données pour des cas d'utilisation spécialisés. Cette flexibilité a fait d'ONNX un pont entre les frameworks de recherche comme PyTorch et les environnements de production, ainsi qu'entre les appareils de périphérie et l'infrastructure cloud.
Écosystème et Adoption
ONNX a grandi pour inclure des contributions d'un large éventail d'organisations, y compris des fournisseurs de cloud, des entreprises de semi-conducteurs, et des laboratoires de recherche. Ces partenaires ont développé des outils pour convertir des modèles vers et depuis ONNX, ainsi que des moteurs d'exécution qui exécutent les graphes ONNX efficacement. L'écosystème prend en charge les frameworks majeurs tels que PyTorch et TensorFlow, permettant une transition fluide de l'entraînement au déploiement.
Les fournisseurs de matériel utilisent ONNX comme cible commune pour l'optimisation. En appliquant un réglage de performance aux graphes ONNX, ils peuvent atteindre un large public de modèles sans adapter des solutions à chaque framework. Cela a fait d'ONNX un composant clé dans le déploiement de modèles sur des appareils allant des téléphones mobiles aux serveurs cloud.
La Linux Foundation AI héberge le projet, fournissant une gouvernance neutre vis-à-vis des fournisseurs et favorisant la collaboration entre concurrents. Cette structure reflète d'autres initiatives IA open-source et assure que la norme évolue avec des contributions de multiples parties prenantes.
Contenu et Structure Technique
À son cœur, ONNX définit un modèle de graphe de calcul extensible. Chaque graphe est une liste de nœuds qui forment une structure acyclique, où les nœuds ont des entrées et des sorties, et chaque nœud représente un appel à un opérateur. Le graphe est documenté avec des métadonnées, qui peuvent inclure des informations sur le but du modèle, sa version, et son auteur. Les opérateurs intégrés, tels que la multiplication matricielle, la convolution, et les fonctions d'activation, sont spécifiés pour être disponibles sur tout framework prenant en charge ONNX, assurant la cohérence.
Le format de conteneur est Protocol Buffers, un mécanisme de sérialisation neutre en langage qui est compact et largement pris en charge. Ce choix facilite l'échange de modèles à travers divers environnements de programmation, y compris C++, Python, et Java.
Flux de Travail Opérationnel
Un flux de travail ONNX typique implique d'entraîner un modèle dans un framework unique, comme PyTorch ou TensorFlow, puis de l'exporter vers le format ONNX. Ce processus d'exportation capture le graphe de calcul du modèle, y compris ses opérateurs et paramètres, dans un fichier standardisé. Une fois au format ONNX, le modèle peut être chargé dans d'autres systèmes pour des tests, une validation, ou un déploiement en production.
Parce qu'ONNX est indépendant du matériel, le même fichier de modèle peut être exécuté sur différents environnements d'exécution, y compris CPU, GPU, et puces IA personnalisées. Cette flexibilité est essentielle pour les applications IA modernes, où l'entraînement pourrait se produire sur des clusters haute performance mais l'inférence doit s'exécuter sur des appareils de périphérie avec des ressources limitées. La représentation commune facilite également l'analyse comparative et la comparaison de modèles à travers les frameworks.
Écosystème et Adoption
ONNX a été adopté par un large éventail d'organisations dans l'industrie de l'IA, y compris des fournisseurs de cloud, des fabricants de puces, et des développeurs de logiciels. Sa gouvernance sous la Linux Foundation AI a aidé à assurer la transparence et une évolution dirigée par la communauté. Les spécifications du projet sont versionnées et maintenues publiquement, permettant des contributions de chercheurs et d'ingénieurs du monde entier.
Voir Aussi
Catégories
- machine-learning
- open-source
- interopérabilité
- réseaux-de-neurones