Utiliser et porter des modèles au format ONNX
Le format ONNX (Open Neural Network Exchange) permet de transférer des modèles entre différents frameworks de deep learning tout en optimisant les performances d’inférence, en particulier sur des architectures CPU et GPU, pour des applications d’inférence plus rapides. Ce format est donc essentiel pour MLOps, car il améliore l’efficacité et la portabilité des modèles.
Étapes pour porter un modèle au format ONNX et l’utiliser
-
Installer les packages nécessaires
Pour convertir un modèle en ONNX, vous aurez besoin de packages comme
onnx
,onnxruntime
, et éventuellement detransformers
pour les modèles Hugging Face.Terminal window pip install onnx onnxruntime transformers -
Charger le modèle et l’exporter en ONNX
Voici un exemple avec un modèle Hugging Face en utilisant PyTorch :
from transformers import AutoTokenizer, AutoModelForSequenceClassificationimport torch# Charger le modèle et le tokenizermodel_name = "bert-base-uncased"model = AutoModelForSequenceClassification.from_pretrained(model_name)tokenizer = AutoTokenizer.from_pretrained(model_name)# Préparer un exemple de données pour l'exporttext = "Ceci est un exemple de texte"inputs = tokenizer(text, return_tensors="pt")# Exporter vers ONNXtorch.onnx.export(model,(inputs["input_ids"], inputs["attention_mask"]),"model.onnx",input_names=["input_ids", "attention_mask"],output_names=["output"],dynamic_axes={"input_ids": {0: "batch_size"}, "attention_mask": {0: "batch_size"}}) -
Vérifier le modèle ONNX
Utilisez la bibliothèque ONNX pour vérifier que le modèle a bien été exporté et pour inspecter les détails :
import onnx# Charger le modèle ONNXonnx_model = onnx.load("model.onnx")# Vérifier le modèle pour s'assurer qu'il est valideonnx.checker.check_model(onnx_model)print("Le modèle ONNX est valide.") -
Utiliser ONNX Runtime pour l’inférence
ONNX Runtime optimise les performances et peut être utilisé avec du code Python pour réaliser des inférences :
import onnxruntime as ortimport numpy as np# Charger le modèle avec ONNX Runtimeort_session = ort.InferenceSession("model.onnx")# Préparer les entréesinputs_onnx = {"input_ids": inputs["input_ids"].numpy(),"attention_mask": inputs["attention_mask"].numpy()}# Exécuter l'inférenceoutputs = ort_session.run(None, inputs_onnx)print("Résultats de l'inférence ONNX:", outputs) -
Déployer le modèle ONNX
Les modèles ONNX peuvent être déployés sur différentes plateformes cloud (Azure, AWS) ou intégrés dans des applications via des frameworks comme FastAPI. Pour Azure, par exemple, vous pouvez utiliser Azure Machine Learning pour gérer le déploiement en tant que service d’inférence.
Conseils pour l’utilisation de modèles ONNX
- Optimisation des performances : ONNX Runtime propose des options d’optimisation (comme
ort.InferenceSession(..., providers=['CPUExecutionProvider'])
pour CPU ouCUDAExecutionProvider
pour GPU) pour accélérer le traitement. - Compatibilité du modèle : Assurez-vous que les opérations utilisées par votre modèle sont supportées par ONNX avant la conversion.
- Utiliser Hugging Face Optimum : Cette extension simplifie la conversion des modèles Hugging Face vers ONNX et optimise l’inférence.
Conclusion
Le portage de modèles vers le format ONNX est une étape stratégique en MLOps pour améliorer la vitesse et la flexibilité de déploiement des modèles. Grâce à ONNX et ONNX Runtime, vous pouvez exécuter des modèles optimisés pour diverses applications et plateformes, ce qui améliore l’efficacité et la portabilité dans le pipeline de production de modèles.