Déployer des modèles convertis au format ONNX

Dernière mise à jour : 21 févr. 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 permettant de représenter des modèles d'apprentissage profond. Les développeurs peuvent utiliser le format d' ONNX s pour former leurs modèles dans un environnement, 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 vers l'environnement d'exécution d' ONNX

La conversion d'un modèle en un environnement d'exécution d' ONNX s offre plusieurs avantages, en particulier dans le contexte des applications d'apprentissage automatique et d'apprentissage profond. Voici quelques-uns des avantages de la conversion des modèles en environnement d'exécution d' ONNX :

  • Compatibilité inter-plateforme : 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 environnements tels qu' PyTorch ou Tensorflow. Vous pouvez former des modèles dans un environnement et les déployer dans un autre environnement qui prend en charge l'environnement d'exécution d' ONNX .

  • Performances améliorées : l'exécution d' ONNX s optimise les modèles pour l'inférence en appliquant diverses optimisations spécifiques au matériel et aux logiciels, 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 de former des modèles, tels qu' PyTorch, TensorFlow, et scikit-learn dans un seul 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 d' ONNX s :

  1. PyTorch
  2. TensorFlow
  3. CatBoost
  4. LightGBM
  5. XGBoost
  6. Scikit-learn

Conversion des modèles d' PyTorch s au format d' ONNX

Suivez cette procédure pour convertir votre modèle entraîné dans l' PyTorch , au format d' 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 d' PyTorch : Vous pouvez créer un modèle d' PyTorch en utilisant votre propre ensemble de données ou utiliser des modèles fournis par des référentiels de modèles open source externes tels que Hugging Face.

  3. Convertir un modèle d' PyTorch s au format ONNX : Pour convertir un modèle d' PyTorch s au format ONNX :

    a. Préparer le modèle : Assurez-vous que votre modèle d' PyTorch s est en mode évaluation en utilisant la fonction d' 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.

Conversion des modèles d' TensorFlow s au format d' ONNX

Suivez cette procédure pour convertir votre modèle TensorFlow au format ONNX :

  1. Importer des bibliothèques : Commencez par importer les bibliothèques essentielles, telles qu' tf2onnx , pour faciliter la conversion des modèles d' TensorFlow s en ONNX, ainsi que les autres bibliothèques requises pour votre application.

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

  3. Convertir un modèle d' TensorFlow s au format ONNX : Utilisez la commande tf2onnx.convert pour convertir votre modèle d' TensorFlow s créé au format SavedModel au format ONNX . Si vous souhaitez convertir un modèle TensorFlow Lite , utilisez l'indicateur --tflite au lieu de l'indicateur --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 d' CatBoost s au format ONNX

Suivez cette procédure pour convertir votre modèle entraîné dans l 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 d' CatBoost , et les autres bibliothèques requises pour votre application.

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

  3. Convertir un modèle d' CatBoost s au format d' ONNX s : Pour convertir le modèle d' CatBoost s au format d' ONNX s :

    a. Charger le modèle d' CatBoost : Vous pouvez charger le modèle d' 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'
        }
    )
    
  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.

Conversion des modèles d' LightGBM s au format ONNX

Suivez cette procédure pour convertir votre modèle entraîné dans l' LightGBM , au format d' 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 d' LightGBM , et onnxmltools pour la conversion et les autres bibliothèques requises pour votre application.

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

  3. Convertir un modèle d' LightGBM s au format d' ONNX s : Pour convertir le modèle d' LightGBM s au format d' ONNX s :

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

    lgbm_model = pickle.load(file)
    

    b. Exporter le modèle : Utiliser la fonction « Exporter le modèle » ( 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, X.shape[1]]))]
    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 de conversion de modèles d' LightGBM s au format d' ONNX , voir Résolution des problèmes d' 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.

Conversion des modèles d' XGBoost s au format d' ONNX

Suivez cette procédure pour convertir votre modèle entraîné dans l' XGBoost , au format d' ONNX :

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

  2. Créer ou télécharger un modèle d' XGBoost : Vous pouvez créer un modèle d' XGBoost en utilisant votre propre ensemble de données ou utiliser des modèles fournis par des référentiels de modèles open source externes tels que Hugging Face.

  3. Convertir un modèle d' XGBoost s au format ONNX : Pour convertir un modèle d' XGBoost s au format ONNX :

    a. Charger le modèle d' XGboost : Vous pouvez charger le modèle d' XGBoost en utilisant des bibliothèques telles que pickle:

    xgboost_model = pickle.load(file)
    

    b. Exporter le modèle : Utiliser la fonction « Exporter le modèle » ( convert_xgboost ) pour convertir le modèle au format « ONNX ».

    from onnxmltools import convert_xgboost
    from onnxconverter_common.data_types import FloatTensorType
    from onnxmltools.utils import save_model
    
    initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))]
    onnx_model = convert_xgboost(xgboost_model, initial_types=initial_types)
    onnx_model_filename = "xgboost_onnx_model.onnx"
    save_model(onnx_model, onnx_model_filename)
    
  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.

Conversion des modèles d' scikit-learn s au format d' ONNX

Suivez cette procédure pour convertir votre modèle entraîné dans l' scikit-learn , au format d' ONNX :

  1. Importer les bibliothèques : Commencez par importer les bibliothèques essentielles, telles que onnxruntime pour l'exécution du modèle, sklearn pour les fonctionnalités d' scikit-learn , skl2onnx pour la conversion et les autres bibliothèques requises pour votre application.

  2. Créer ou télécharger un modèle d' scikit-learn : Vous pouvez créer un modèle d' scikit-learn en utilisant votre propre ensemble de données ou utiliser des modèles fournis par des référentiels de modèles open source externes tels que Hugging Face.

  3. Convertir un modèle scikit-learn au format ONNX : Pour convertir un modèle scikit-learn au format ONNX :

    a. Charger le modèle d' scikit-learn : Vous pouvez charger le modèle d' scikit-learn en utilisant des bibliothèques telles que pickle:

    sklearn_model = pickle.load(file)
    

    b. Exporter le modèle : Utiliser la fonction « Exporter le modèle » ( to_onnx ) pour convertir le modèle au format « ONNX ».

    from skl2onnx import to_onnx
    onnx_model = to_onnx(sklearn_model, X, target_opset=19)
    
    with open("sklearn_model.onnx", "wb") as f:
       f.write(onnx_model.SerializeToString())
    
  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 convertir vos modèles au format d' 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 opset : La version opset dans l' ONNX , détermine l'ensemble des opérations et leurs spécifications qui sont supportées par le modèle. Il s'agit d'un facteur critique lors de la conversion et du déploiement du modèle.

    Différents environnements d'exécution et frameworks d' ONNX s prennent en charge 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 d' ONNX peut entraîner des erreurs lors de l'inférence. Vous devez vous assurer que la version d' ONNX opset que vous choisissez est prise en charge par votre runtime cible.

Déploiement des modèles convertis au format d' ONNX

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

Pour déployer des modèles convertis au format d' ONNX s depuis l'interface utilisateur, procédez comme suit :

  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 workflows 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 du format PyTorch ou TensorFlow au format ONNX à l'aide de la bibliothèque cliente 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 PyTorch, 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 Tensorflow, 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 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 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
Utiliser le modèle ONNX converti à partir de XGBoost avec ibm- watsonx -ai XGBoost, ONNX Entraîner un modèle XGBoost.
Convertir le modèle XGBoost au format ONNX.
Conserver le modèle converti dans le référentiel d' watsonx.ai.
Déployer le modèle de notation en ligne à l'aide de l'instance APIClient.
Enregistrez des échantillons de partition à l'aide de l'instance APIClient.
Utiliser le modèle ONNX converti à partir de scikit-learn avec ibm- watsonx -ai Scikit-learn, ONNX Former un modèle scikit-learn
Convertir le modèle natif scikit-learn au format ONNX
Effectuer la conversion d'un modèle scikit-learn personnalisé encapsulé dans un pipeline sklearn
Conserver le modèle converti dans le référentiel d'exécution d' watsonx.ai
Déployer le modèle pour la notation en ligne à l'aide de la bibliothèque client
Noter des exemples d'enregistrements à l'aide de la bibliothèque client

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