ONNX et Azure Machine Learning

Découvrez comment Open Neural Network Exchange (ONNX) peut aider à optimiser l’inférence de votre modèle Machine Learning. L’inférence, ou scoring de modèle, est le processus consistant à utiliser un modèle déployé pour générer des prédictions sur des données de production.

L’optimisation des modèles Machine Learning pour l’inférence exige que vous ajustiez le modèle et la bibliothèque d’inférence pour tirer le meilleur parti des capacités matérielles. Cette tâche devient complexe si vous souhaitez obtenir des performances optimales sur différents genres de plateformes telles que cloud ou périphérie, UC ou GPU, et ainsi de suite, car chaque plateforme a des capacités et des caractéristiques différentes. La complexité s’accroît si vous avez des modèles issus de diverses infrastructures qui doivent s’exécuter sur différentes plateformes. Il peut être très chronophage d’optimiser toutes les différentes combinaisons d’infrastructures et de matériel. Par conséquent, une solution utile consiste à entraîner votre modèle une seule fois dans votre infrastructure préférée, puis à l’exécuter n’importe où sur le cloud ou dans la périphérie. C’est là qu’intervient ONNX.

Qu’est-ce qu’ONNX ?

Microsoft et une communauté de partenaires ont créé ONNX : cette norme ouverte représente les modèles Machine Learning. Les modèles de nombreuses infrastructures, notamment TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet et MATLAB, peuvent être exportés ou convertis au format ONNX standard. Une fois les modèles au format ONNX, ils peuvent s’exécuter sur diverses plateformes et appareils.

ONNX Runtime est un moteur d’inférence haute performance pour le déploiement de modèles ONNX en production. Il est optimisé pour le cloud et les appareils Edge, et il fonctionne sur Linux, Windows et Mac. Bien qu’ONNX soit écrit en C++ , il dispose également d’API C, Python, C# , Java et JavaScript (Node.js) pour une utilisation dans de nombreux environnements. ONNX Runtime prend en charge aussi bien les réseaux neuronaux profonds (DNN) que les modèles Machine Learning traditionnels, et s’intègre avec les accélérateurs sur différents matériels, comme TensorRT sur les GPU Nvidia, OpenVINO sur les processeurs Intel, et DirectML sur Windows. Grâce à ONNX Runtime, vous pouvez tirer parti de vastes optimisations à l’échelle de la production, des tests et des améliorations en cours.

Runtime ONNX est utilisé dans les services Microsoft populaires comme Bing, Office et Azure AI. Bien que les gains de performances dépendent de nombreux facteurs, ces services Microsoft présentent un gain moyen de performances de 100 % sur UC. En plus des services Azure Machine Learning, le runtime ONNX s’exécute également dans d’autres produits fonctionnant avec les charges de travail Machine Learning, notamment :

Organigramme ONNX montrant l’entraînement, les convertisseurs et le déploiement

Comment obtenir des modèles ONNX ?

Vous pouvez obtenir des modèles ONNX de plusieurs façons :

De nombreux modèles, y compris la classification d’images, la détection d’objet et le traitement de texte, peuvent être représentés en tant que modèles ONNX. Si vous rencontrez un problème avec un modèle dont la conversion échoue, soumettez un problème GitHub dans le dépôt du convertisseur que vous avez utilisé. Vous pouvez continuer à utiliser votre format de modèle existant jusqu’à ce que le problème soit résolu.

Déploiement de modèle ONNX dans Azure

Avec Azure Machine Learning, vous pouvez déployer, gérer et superviser vos modèles ONNX. En utilisant le workflow de déploiement MLOps standard et ONNX Runtime, vous pouvez créer un point de terminaison REST hébergé dans le cloud. Pour obtenir des exemples pratiques, consultez ces notebooks Jupyter.

Installation et utilisation d’ONNX Runtime avec Python

Les packages Python pour ONNX Runtime sont disponibles sur PyPi.org (UC et GPU). Veillez à passer en revue la configuration requise avant l’installation.

Pour installer ONNX Runtime pour Python, utilisez l’une des commandes suivantes :

pip install onnxruntime          # CPU build
pip install onnxruntime-gpu   # GPU build

Pour appeler ONNX Runtime dans votre script Python, utilisez :

import onnxruntime
session = onnxruntime.InferenceSession("path to model")

La documentation qui accompagne le modèle indique généralement les entrées et sorties pour l’utilisation du modèle. Vous pouvez également utiliser un outil de visualisation tel que Netron pour afficher le modèle. ONNX Runtime vous permet également d’interroger les métadonnées, entrées et sorties du modèle de la manière suivante :

session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name

Pour effectuer une inférence sur votre modèle, utilisez run et passez la liste des sorties à retourner (ou laissez la liste vide si vous souhaitez toutes les retourner) et un mappage des valeurs d’entrée. Le résultat est une liste des sorties.

results = session.run(["output1", "output2"], {
                      "input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})

Pour obtenir des informations de référence complètes sur l’API Python, consultez les documents de référence sur ONNX Runtime.

Exemples

Apprenez-en davantage sur ONNX ou contribuez au projet :

Apprenez-en davantage sur ONNX Runtime ou contribuez au projet :