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 :
- PyTorch
- TensorFlow
- CatBoost
- LightGBM
Convertir les modèles PyTorch au format ONNX
Suivez ce processus pour convertir votre modèle formé dans PyTorch au format ONNX :
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.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.
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.
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 :
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.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.
Convertir un modèle TensorFlow au format ONNX : Utilisez la commande
tf2onnx.convert
pour convertir votre modèle TensorFlow créé au formatSavedModel
au format ONNX. Si vous souhaitez convertir un modèle TensorFlow Lite, utilisez l'option--tflite
au lieu de l'option--saved-model
.
Keras
et les fonctions tf
peuvent être directement converties dans Python en utilisant les fonctions tf2onnx.convert.from_keras
ou tf2onnx.convert.from_function
.
- 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 :
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.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.
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 suronnx
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 :
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 etonnxmltools
pour la conversion, ainsi que d'autres bibliothèques nécessaires à votre application.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.
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.
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 :
Dans votre espace de déploiement, accédez à l'onglet Assets.
Recherchez votre modèle dans la liste des ressources, cliquez sur l'icône Menu et sélectionnez Déployer.
Sélectionnez le type de déploiement pour votre modèle. Choisissez entre les options de déploiement en ligne et par lots.
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.
Sélectionnez une spécification matérielle pour votre modèle.
Sélectionnez une configuration et une spécification logicielle pour votre modèle.
Cliquez sur Créer.
Test du modèle
Suivez ces étapes pour tester les modèles déployés convertis au format ONNX :
- Dans votre espace de déploiement, ouvrez l'onglet Déploiements et cliquez sur le nom du déploiement.
- Cliquez sur l'onglet Test pour saisir un texte d'invite et obtenir une réponse du poste déployé.
- 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.
- 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 :
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