Partager via


ONNX et Azure Machine Learning

Cet article décrit comment Open Neural Network Exchange (ONNX) peut vous aider à optimiser les inférences de vos modèles de Machine Learning. L’inférence, ou le 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érentes plateformes telles que le cloud, la périphérie, l’UC ou le GPU, car chaque plateforme a des fonctionnalités et des caractéristiques différentes. La complexité augmente si vous devez exécuter des modèles à partir de différents frameworks sur différentes plateformes. Il peut être très chronophage d’optimiser toutes les différentes combinaisons d’infrastructures et de matériel.

Une solution utile consiste à entraîner votre modèle une fois dans votre infrastructure préférée, puis à l’exporter ou à la convertir en ONNX afin qu’il puisse s’exécuter n’importe où sur le cloud ou la périphérie. Microsoft et une communauté de partenaires ont créé ONNX : cette norme ouverte représente les modèles Machine Learning. Vous pouvez exporter ou convertir des modèles depuis de nombreux frameworks au format ONNX standard. Les frameworks pris en charge incluent TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet et MATLAB. Vous pouvez exécuter des modèles au format ONNX sur différentes plateformes et appareils.

Ce diagramme de flux ONNX montre les infrastructures disponibles et les options de déploiement.

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

ONNX Runtime

ONNX Runtime est un moteur d’inférence haute performance pour le déploiement de modèles ONNX en production. Le runtime ONNX est optimisé pour le cloud et la périphérie, et fonctionne sur Linux, Windows et macOS. ONNX est écrit en C++, mais a également des API C, Python, C#, Java et JavaScript (Node.js) à utiliser dans ces 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.

Les services Microsoft à grande échelle tels que Bing, Office et Azure AI utilisent ONNX Runtime. Bien que les gains de performances dépendent de nombreux facteurs, ces services Microsoft signalent un gain moyen de performances de 2x sur l’UC à l’aide d’ONNX. ONNX Runtime s’exécute dans Azure Machine Learning et d’autres produits Microsoft qui prennent en charge les charges de travail Machine Learning, notamment :

Méthodes d’obtention de modèles ONNX

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

Vous pouvez représenter de nombreux modèles comme ONNX, notamment la classification d’images, la détection d’objets et les modèles de traitement de texte. Si vous ne pouvez pas convertir votre modèle avec succès, faites un fichier d’un problème GitHub dans le référentiel du convertisseur que vous avez utilisé.

Déploiement de modèle ONNX dans Azure

Vous pouvez déployer, gérer et surveiller vos modèles ONNX dans Azure Machine Learning. En utilisant un workflow de déploiement MLOps standard avec ONNX Runtime, vous pouvez créer un point de terminaison REST hébergé dans le cloud.

Packages Python pour ONNX Runtime

Les packages Python pour processeur et GPU d’ONNX Runtime sont disponibles sur PyPi.org. 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 le code suivant :

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 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 et un mappage des valeurs d’entrée. Laissez la liste de sortie vide si vous souhaitez toutes les sorties. 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 la référence complète de l’API ONNX Runtime, consultez la documentation de l’API Python.