0 / 0
Retourner à la version anglaise de la documentation
Déployer des modèles convertis au format ONNX
Dernière mise à jour : 21 janv. 2025
Déployer des modèles convertis au format ONNX

Vous pouvez déployer et inférer des modèles d'apprentissage automatique à partir de PyTorch ou TensorFlow qui sont enregistrés dans différents formats et convertis au format Open Neural Network Exchange (ONNX). ONNX est un format open-source pour représenter les modèles d'apprentissage profond. Les développeurs peuvent utiliser le format ONNX pour entraîner leurs modèles dans un cadre, tel que PyTorch ou TensorFlow, puis l'exporter pour l'exécuter dans un autre environnement avec des caractéristiques de performance différentes. Le format ONNX fournit une solution puissante pour convertir un modèle d'apprentissage automatique en ONNX et effectuer des inférences en utilisant le runtime ONNX.

Avantages de la conversion des modèles en runtime ONNX

La conversion d'un modèle en runtime ONNX offre plusieurs avantages, en particulier dans le contexte des applications d'apprentissage automatique et d'apprentissage profond. Les avantages de la conversion des modèles en runtime ONNX sont les suivants :

  • Compatibilité multiplateforme : ONNX fournit un format standard pour représenter les modèles d'apprentissage automatique, ce qui facilite le déploiement des modèles dans différents cadres tels que PyTorch ou Tensorflow. Vous pouvez former des modèles dans un framework et les déployer dans un autre framework qui supporte le runtime ONNX.

  • Amélioration des performances : Le moteur d'exécution ONNX optimise les modèles pour l'inférence en appliquant diverses optimisations spécifiques au matériel et au logiciel, telles que les optimisations de graphes. En outre, il prend en charge l'exécution sur différents matériels, tels que les CPU et les GPU, ce qui garantit une utilisation efficace des ressources.

  • Interopérabilité : ONNX permet d'entraîner des modèles, tels que PyTorch, TensorFlow, et scikit-learn dans un cadre, puis de les exporter pour les exécuter dans un autre environnement, ce qui rationalise les flux de travail. Il fait tomber les barrières entre les différents cadres d'apprentissage profond, permettant aux développeurs de tirer parti des forces des différentes bibliothèques sans être enfermés dans un seul écosystème.

Cadres de conversion pris en charge

Vous pouvez convertir les modèles d'apprentissage automatique qui utilisent les frameworks suivants au format ONNX :

  1. PyTorch
  2. TensorFlow
  3. CatBoost
  4. LightGBM

Convertir les modèles PyTorch au format ONNX

Suivez ce processus pour convertir votre modèle formé dans PyTorch au format ONNX :

  1. Importer les bibliothèques : Commencez par importer les bibliothèques essentielles, telles que onnxruntime pour l'exécution du modèle, torch pour les fonctionnalités de PyTorch et d'autres bibliothèques nécessaires à votre application.

  2. Créer ou télécharger un modèle PyTorch : Vous pouvez créer un modèle PyTorch en utilisant votre propre ensemble de données ou en utilisant des modèles fournis par des dépôts de modèles open source externes tels que Hugging Face.

  3. Convertir le modèle PyTorch au format ONNX : Pour convertir le modèle PyTorch au format ONNX :

    a. Préparez le modèle : Assurez-vous que votre modèle PyTorch est en mode évaluation en utilisant la fonction model.eval(). Vous pouvez avoir besoin d'un tenseur d'entrée fictif pour correspondre à la forme du modèle.

    b. Exporter le modèle : Utilisez la fonction torch.onnx.export pour convertir le modèle au format ONNX.

  4. Vérifier la conversion : Après avoir converti le modèle, vérifiez qu'il fonctionne comme prévu en utilisant la bibliothèque onnx.

Convertir les modèles TensorFlow au format ONNX

Suivez ce processus pour convertir votre modèle TensorFlow au format ONNX :

  1. Importer les bibliothèques : Commencez par importer les bibliothèques essentielles, telles que tf2onnx pour faciliter la conversion des modèles TensorFlow vers ONNX, et d'autres bibliothèques nécessaires à votre application.

  2. Télécharger le modèle TensorFlow : Vous devez télécharger le modèle TensorFlow créé en externe et les données utilisées pour l'entraînement du modèle.

  3. Convertir un modèle TensorFlow au format ONNX : Utilisez la commande tf2onnx.convert pour convertir votre modèle TensorFlow créé au format SavedModel au format ONNX. Si vous souhaitez convertir un modèle TensorFlow Lite, utilisez l'option --tflite au lieu de l'option --saved-model.

Remarque :

Keras et les fonctions tf peuvent être directement converties dans Python en utilisant les fonctions tf2onnx.convert.from_keras ou tf2onnx.convert.from_function.

  1. Vérifier la conversion : Après avoir converti le modèle, vérifiez qu'il fonctionne comme prévu en utilisant la bibliothèque onnx.

Conversion des modèles CatBoost au format ONNX

Suivez ce processus pour convertir votre modèle formé dans CatBoost au format ONNX :

  1. Importer les bibliothèques : Commencez par importer les bibliothèques essentielles, telles que onnxruntime pour l'exécution du modèle, catboost pour les fonctionnalités CatBoost et d'autres bibliothèques nécessaires à votre application.

  2. Créer ou télécharger un modèle CatBoost : Vous pouvez créer un modèle CatBoost en utilisant votre propre ensemble de données ou en utilisant des modèles fournis par des dépôts de modèles open source externes tels que Hugging Face.

  3. Convertir le modèle CatBoost au format ONNX : Pour convertir le modèle CatBoost au format ONNX :

    a. Charger le modèle CatBoost : Vous pouvez charger le modèle CatBoost en utilisant des bibliothèques telles que pickle :

    catboost_model = pickle.load(file)
    

    b. Exporter le modèle : Utilisez la fonction catboost_model.save_model avec le paramètre de format défini sur onnx pour convertir le modèle au format ONNX.

    catboost_model.save_model(
        onnx_model_name,
        format="onnx",
        export_parameters={
            'onnx_domain': 'ai.catboost',
            'onnx_model_version': 1,
            'onnx_doc_string': 'test model for Regressor',
            'onnx_graph_name': 'CatBoostModel_for_Regression'
        }
    )
    

    c. Vérifier la conversion : Après avoir converti le modèle, vérifiez qu'il fonctionne comme prévu en utilisant la bibliothèque onnx.

Conversion des modèles LightGBM au format ONNX

Suivez ce processus pour convertir votre modèle formé dans LightGBM au format ONNX :

  1. Importer les bibliothèques : Commencez par importer les bibliothèques essentielles, telles que onnxruntime pour l'exécution du modèle, lightgbm pour les fonctionnalités de LightGBM et onnxmltools pour la conversion, ainsi que d'autres bibliothèques nécessaires à votre application.

  2. Créer ou télécharger un modèle LGBM : Vous pouvez créer un modèle LightGBM en utilisant votre propre ensemble de données ou en utilisant des modèles fournis par des dépôts de modèles open source externes tels que Hugging Face.

  3. Convertir le modèle LGBM au format ONNX : Pour convertir le modèle LightGBM au format ONNX :

    a. Charger le modèle LightGBM : Vous pouvez charger le modèle LightGBM en utilisant des bibliothèques telles que pickle :

    lgbm_model = pickle.load(file)
    

    b. Exporter le modèle : Utilisez la fonction convert_lightgbm pour convertir le modèle au format ONNX.

    from onnxmltools import convert_lightgbm
    from skl2onnx.common.data_types import FloatTensorType
    from onnxmltools.utils import save_model      
    
    initial_types = [("float_input", FloatTensorType([None, lgbm_model.num_feature()]))]
    onnx_model = convert_lightgbm(model=lgbm_model, initial_types=initial_types)
    onnx_model_filename = "lgbm_model.onnx"
    save_model(onnx_model, onnx_model_filename)
    
    Astuce :

    Pour résoudre les problèmes liés à la conversion des modèles LightGBM au format ONNX, voir Troubleshooting watsonx.ai Runtime.

  4. Vérifier la conversion : Après avoir converti le modèle, vérifiez qu'il fonctionne comme prévu en utilisant la bibliothèque onnx.

Autres considérations

Voici quelques considérations supplémentaires pour la conversion de vos modèles au format ONNX :

  • Axes dynamiques : Les axes dynamiques peuvent être utilisés par un modèle pour gérer des formes d'entrée variables, telles que des tailles de lots ou des longueurs de séquences dynamiques, ce qui est utile pour les modèles déployés dans des applications où les dimensions d'entrée peuvent varier. Utilisez des axes dynamiques si votre modèle gère des tailles d'entrée variables, telles que la taille d'un lot dynamique ou la longueur d'une séquence.

    Les axes dynamiques réduisent également la charge de mémoire car ils peuvent être utilisés avec plusieurs entrées et sorties pour s'adapter dynamiquement sans réexporter le modèle. Vous pouvez spécifier les axes dynamiques lors de l'exportation du modèle dans PyTorch ou TensorFlow.

  • Version de l'opset : La version de l'opset dans ONNX détermine l'ensemble des opérations et leurs spécifications qui sont prises en charge par le modèle. Il s'agit d'un facteur critique lors de la conversion et du déploiement du modèle.

    Les différents runtimes et frameworks ONNX supportent des versions spécifiques d'opset. Les anciennes versions d'opset peuvent manquer de fonctionnalités ou d'optimisations présentes dans les versions plus récentes. L'incompatibilité entre la version opset d'un modèle et le runtime ONNX peut provoquer des erreurs lors de l'inférence. Vous devez vous assurer que la version de l'opset ONNX que vous choisissez est supportée par votre runtime cible.

Déployer des modèles convertis au format ONNX

Utilisez la spécification logicielle onnxruntime_opset_19 pour déployer votre modèle d'apprentissage automatique converti au format ONNX. Vous devez spécifier la spécification du logiciel et le type de modèle lorsque vous enregistrez le modèle dans le référentiel watsonx.ai Runtime. Pour plus d'informations, voir les spécifications des logiciels pris en charge.

Pour déployer des modèles convertis au format ONNX à partir de l'interface utilisateur, suivez les étapes suivantes :

  1. Dans votre espace de déploiement, accédez à l'onglet Assets.

  2. Recherchez votre modèle dans la liste des ressources, cliquez sur l'icône Menu et sélectionnez Déployer.

  3. Sélectionnez le type de déploiement pour votre modèle. Choisissez entre les options de déploiement en ligne et par lots.

  4. Saisissez un nom pour votre déploiement et, éventuellement, un nom de service, une description et des balises.

    Remarque :
    • Utilisez le champ Serving name pour spécifier un nom pour votre déploiement au lieu de l'ID de déploiement.
    • Le nom de service doit être unique dans l'espace de noms.
    • Le nom de service ne doit contenir que les caractères suivants : a-z,0-9,_] et doit comporter au maximum 36 caractères.
    • Dans les flux de travail où votre modèle de base personnalisé est utilisé périodiquement, envisagez d'attribuer à votre modèle le même nom de service à chaque fois que vous le déployez. Ainsi, après avoir supprimé puis redéployé le modèle, vous pouvez continuer à utiliser le même point de terminaison dans votre code.

  5. Sélectionnez une spécification matérielle pour votre modèle.

  6. Sélectionnez une configuration et une spécification logicielle pour votre modèle.

  7. Cliquez sur Créer.

Test du modèle

Suivez ces étapes pour tester les modèles déployés convertis au format ONNX :

  1. Dans votre espace de déploiement, ouvrez l'onglet Déploiements et cliquez sur le nom du déploiement.
  2. Cliquez sur l'onglet Test pour saisir un texte d'invite et obtenir une réponse du poste déployé.
  3. Saisissez les données de test dans l'un des formats suivants, en fonction du type de bien que vous avez déployé :
    • Texte : Saisir les données d'entrée du texte pour générer un bloc de texte en sortie.
    • JSON : Saisir des données d'entrée JSON pour générer une sortie au format JSON.
  4. Cliquez sur Générer pour obtenir des résultats basés sur votre demande.

Exemples de blocs-notes

Les exemples de notebooks suivants montrent comment déployer des modèles d'apprentissage automatique convertis de PyTorch ou TensorFlow au format ONNX en utilisant la bibliothèque client Python :

Exemples de blocs-notes
Bloc-notes Infrastructure Descriptif
Convertir un réseau de neurones ONNX d'axes fixes en axes dynamiques et l'utiliser avec watsonx ONNX Configurer l'environnement
Créer et exporter le modèle ONNX de base
Convertir le modèle d'axes fixes en axes dynamiques
Persister le modèle ONNX converti
Déployer et noter le modèle ONNX
Nettoyer
Résumé et prochaines étapes
Utiliser le modèle ONNX converti de PyTorch avec watsonx ONNX Créer un modèle PyTorch avec un ensemble de données.
Convertir le modèle PyTorch au format ONNX
Persister le modèle converti dans le référentiel Watson Machine Learning.
Déployer le modèle pour la notation en ligne à l'aide de la bibliothèque client.
Evaluer des enregistrements d'échantillon à l'aide d'une bibliothèque client
Utiliser un modèle ONNX converti à partir de TensorFlow pour reconnaître des chiffres écrits à la main avec watsonx ONNX Téléchargez un modèle TensorFlow formé en externe avec un ensemble de données.
Convertir le modèle TensorFlow au format ONNX
Persister le modèle converti dans le référentiel Watson Machine Learning.
Déployer le modèle pour la notation en ligne à l'aide de la bibliothèque client.
Evaluer des enregistrements d'échantillon à l'aide d'une bibliothèque client
Utiliser le modèle ONNX converti à partir de CatBoost ONNX Modèle entraîné CatBoost.
Convertir le modèle CatBoost au format ONNX.
Persister le modèle converti dans le référentiel Watson Machine Learning.
Déployer le modèle pour la notation en ligne à l'aide de la bibliothèque client.
Evaluer des enregistrements d'échantillon à l'aide d'une bibliothèque client
Utiliser le modèle ONNX converti à partir de LightGBM ONNX Entraîner un modèle LightGBM
Convertir le modèle LightGBM au format ONNX
Persister le modèle converti dans le référentiel watsonx.ai Runtime
Déployer le modèle pour l'évaluation en ligne à l'aide de la bibliothèque client
Évaluer les enregistrements de l'échantillon à l'aide de la bibliothèque client

Sujet parent : Déployer des ressources d'apprentissage automatique