Quâest-ce que ONNX (Open Neural Network Exchange) ?ONNX (Open Neural Network Exchange) est une norme ouverte conçue pour unifier et Ă©changer les modĂšles dâapprentissage automatique. LancĂ© en 2017 par Microsoft, Meta (anciennement Facebook) et AWS, il rĂ©sout un problĂšme clĂ© dans le monde de lâIA : le manque de compatibilitĂ© entre diffĂ©rents frameworks (comme PyTorch et TensorFlow), outils et plateformes matĂ©rielles.
En termes simples, ONNX est un âtraducteurâ universel pour les rĂ©seaux neuronaux, permettant aux dĂ©veloppeurs de dĂ©placer librement des modĂšles dâun environnement Ă un autre.
Analogie : Si un rĂ©seau neuronal est un document complexe, ONNX est le format PDF. Vous pouvez crĂ©er un document dans nâimporte quel Ă©diteur (PyTorch, TensorFlow), mais une fois enregistrĂ© au format PDF, il sâouvrira rapidement et de maniĂšre cohĂ©rente sur nâimporte quel appareil grĂące Ă un lecteur universel (ONNX Runtime).
Comment fonctionne ONNX
ONNX reprĂ©sente nâimporte quel modĂšle sous forme de graphe computationnel. Ce graphe est composĂ© de nĆuds (opĂ©rations mathĂ©matiques ou opĂ©rateurs) et dâarĂȘtes (flux de donnĂ©es sous forme de tenseurs). La norme dĂ©finit un ensemble unifiĂ© dâopĂ©rateurs et de formats de donnĂ©es compris par tous les outils compatibles.
Le flux de travail comprend généralement deux étapes clés :
- Exportation : Un modÚle entraßné dans un framework (par exemple PyTorch) est converti en fichier
.onnx. - Déploiement (Inférence) : Le fichier
.onnxrĂ©sultant est exĂ©cutĂ© Ă lâaide dâun environnement dâexĂ©cution spĂ©cialisĂ© et performant : ONNX Runtime.
Avantages clĂ©s dâONNX
Compatibilité des frameworks :
Le principal avantage est la liberté de déplacer les modÚles. Par exemple, vous pouvez entraßner un modÚle avec PyTorch, idéal pour la recherche, puis le déployer avec ONNX Runtime, optimisé pour une exécution rapide en production.
Optimisation matérielle :
Les fabricants de matĂ©riel (NVIDIA, Intel, ARM) fournissent des bibliothĂšques optimisĂ©es pour exĂ©cuter des modĂšles au format ONNX. Cela permet dâatteindre des performances maximales sur diffĂ©rents matĂ©riels sans adapter le modĂšle pour chaque plateforme.
Flexibilité et pérennité :
La norme ne lie pas les dĂ©veloppeurs Ă une seule pile technologique. Si un nouveau framework plus efficace apparaĂźt, les modĂšles existants peuvent ĂȘtre facilement transfĂ©rĂ©s.
ONNX Runtime : Le moteur dâexĂ©cution
ONNX Runtime est un composant clĂ© de lâĂ©cosystĂšme. Il sâagit dâun environnement haute performance pour exĂ©cuter des modĂšles .onnx. DĂ©veloppĂ© par Microsoft, il est open-source et conçu pour maximiser la vitesse de calcul des graphes ONNX sur nâimporte quel appareil, des serveurs puissants aux tĂ©lĂ©phones mobiles. Runtime supporte plusieurs langages (Python, C++, C#, Java) et plateformes (Windows, Linux, Android, iOS).
Exemple pratique : de PyTorch Ă ONNX Runtime
Exporter un modĂšle depuis PyTorch :
import torch
# Votre modÚle entraßné
model = YourSuperModel()
# EntrĂ©e dâexemple pour dĂ©finir la structure du graphe
dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(model, dummy_input, "model.onnx")
Exécuter le modÚle avec ONNX Runtime :
import onnxruntime as ort
import numpy as np
# CrĂ©er une session dâinfĂ©rence
session = ort.InferenceSession("model.onnx")
# PrĂ©parer les donnĂ©es dâentrĂ©e
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)
input_name = session.get_inputs()[0].name
# Obtenir la prédiction
result = session.run(None, {input_name: input_data})
print(result)
ONNX et Hugging Face : Le standard pour le NLP
Pour les modĂšles complexes comme les transformeurs de Hugging Face, lâexportation est simplifiĂ©e avec la bibliothĂšque Optimum, qui agit comme un âpont officielâ gĂ©rant automatiquement tous les dĂ©tails de conversion.
Installer les packages nécessaires :
pip install transformers onnx onnxruntime optimum[onnxruntime]
Exporter et exécuter un modÚle Hugging Face :
from optimum.onnxruntime import ORTModelForSequenceClassification
from transformers import AutoTokenizer, pipeline
model_id = "distilbert-base-uncased-finetuned-sst-2-english"
# Ătape 1 : Exporter le modĂšle en ONNX (une seule fois)
model = ORTModelForSequenceClassification.from_pretrained(model_id, from_transformers=True)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model.save_pretrained("./onnx-model/")
tokenizer.save_pretrained("./onnx-model/")
# Ătape 2 : ExĂ©cuter le modĂšle ONNX optimisĂ©
classifier = pipeline("text-classification", model="./onnx-model/")
result = classifier("ONNX et Hugging Face sont une combinaison puissante !")
print(result) # Sortie : [{'label': 'POSITIVE', 'score': 0.9998...}]
Clé de performance : Optimisation et Quantification
ONNX Runtime ne se contente pas dâexĂ©cuter les modĂšles, il les accĂ©lĂšre. Une des mĂ©thodes principales est la quantification.
En termes simples : câest un processus qui âsimplifieâ les calculs Ă lâintĂ©rieur du modĂšle. Au lieu de calculs haute prĂ©cision (FP32 comme 3.14159), le modĂšle utilise des entiers plus rapides et lĂ©gers de 8 bits (INT8, de -128 Ă 127).
Avantages de la quantification :
- đ Vitesse Ă©levĂ©e : les opĂ©rations entiĂšres sont beaucoup plus rapides.
- đŸ Taille rĂ©duite : le modĂšle devient environ 4 fois plus petit.
- đ EfficacitĂ© Ă©nergĂ©tique : rĂ©duit la consommation dâĂ©nergie, critique pour les appareils mobiles et edge.
OĂč ONNX est utilisĂ©
ONNX est devenu une norme industrielle et est largement appliqué :
- Services cloud : Azure ML, AWS SageMaker, Google Cloud AI.
- Applications desktop et mobiles : ONNX Runtime fonctionne sur Windows, Linux, macOS, Android et iOS.
- Appareils edge : exécution efficace des modÚles IA sur des dispositifs aux ressources limitées (caméras, drones, capteurs industriels).
Limitations
MalgrĂ© ses avantages, il existe des limitations. La conversion dâarchitectures trĂšs complexes ou rĂ©centes peut poser problĂšme si un opĂ©rateur spĂ©cifique nâa pas encore dâĂ©quivalent en ONNX. La communautĂ© travaille activement Ă lâextension du support.
Liens utiles
- Site officiel : https://onnx.ai
- DépÎt GitHub : https://github.com/onnx/onnx
- ONNX Runtime : https://onnxruntime.ai
- Hugging Face Optimum : https://github.com/huggingface/optimum