Microsoft et Facebook ont chacun annoncé le lancement du format ONNX, Open Neural Network Exchange, un standard partagé de représentation de modèles d’intelligence artificielle.

Ils aspirent à créer un écosystème ouvert d’interopérabilité des modèles d’intelligence artificielle.

Aujourd’hui, une entreprise ou une équipe de chercheurs doit choisir dès le début sur quel cadre applicatif va reposer son projet : TensorFlow, Cognitive Toolkit, Caffe2 et bien d’autres.

En changer ensuite est un problème non trivial nécessitant beaucoup de travail.

Comme les cadres applicatifs évoluent rapidement, l’un d’entre eux peut devenir plus adapté à un projet. Parfois, un cadre est mieux adapté à la phase de recherche, et un autre est mieux adapté à la mise en production, un cas de figure que Facebook rencontre souvent avec PyTorch et Caffe2.

C’est pour faciliter l’interopérabilité et l’indépendance que Facebook et Microsoft ont lancé ONNX, avec l’espoir que les autres organisations ayant leurs propres cadres applicatifs (Google et TensorFlow, IBM et SystemML, Amazon etMXNet, etc.), l’adoptent et l’étendent également.

La deuxième motivation est le partage des optimisations. De nombreuses optimisations liées aux réseaux neuronaux sont les mêmes quel que soit le cadre application. Au lieu de réinventer la roue, pourquoi ne pas partager les optimisations ?

Avec ONNX, un développeur peut choisir le cadre applicatif le plus adapté à son projet, les responsables des cadres applicatifs peuvent se concentrer sur l’innovation, et les fabricants de matériels peuvent rationaliser les optimisations.

Dans l’immédiat, les deux entreprises modifient leurs cadres applicatifs Cognitive Toolkit, Caffe2 et PyTorch pour les rendre compatibles avec ONNX, en se concentrant d’abord sur les capacités nécessaires pour l’inférence : modèle extensible de graphe de calcul, définition des opérateurs et des types standards de données.

La version initiale du code source ouvert d’ONNX et de sa documentation est disponible sur GitHub : https://github.com/onnx/onnx.