ONNX (Open Neural Network Exchange)
Format d'échange ouvert pour modèles ML permettant la portabilité entre frameworks et l'optimisation du déploiement en production.
Mis à jour le 27 avril 2026
ONNX (Open Neural Network Exchange) est un format standardisé et open-source conçu pour représenter les modèles d'apprentissage automatique et de deep learning. Développé initialement par Microsoft et Facebook en 2017, ONNX permet aux data scientists et ingénieurs ML de transférer leurs modèles entre différents frameworks (PyTorch, TensorFlow, scikit-learn) et de les déployer sur diverses plateformes matérielles et logicielles sans réécriture complète. Ce standard favorise l'interopérabilité dans l'écosystème ML et accélère le passage de l'expérimentation à la production.
Fondements techniques
- Format de graphe computationnel unifié représentant les opérations et flux de données du modèle avec une sémantique précise
- Spécification complète des opérateurs standards (convolution, normalisation, attention, etc.) garantissant la cohérence entre implémentations
- Support des métadonnées du modèle incluant les dimensions d'entrée/sortie, types de données et informations de version
- Architecture extensible permettant l'ajout d'opérateurs personnalisés pour des cas d'usage spécifiques
Avantages stratégiques
- Portabilité maximale : entraîner dans un framework (PyTorch) et déployer dans un autre (TensorFlow Lite, ONNX Runtime) selon les contraintes
- Optimisation du déploiement : les runtimes ONNX appliquent des optimisations spécifiques au matériel cible (CPU, GPU, edge devices)
- Réduction du vendor lock-in : indépendance vis-à-vis d'un framework particulier et flexibilité dans les choix technologiques
- Accélération du time-to-market : réutilisation de modèles pré-entraînés et simplification des pipelines MLOps
- Écosystème mature : support natif dans Azure ML, AWS SageMaker, Google Cloud AI Platform et nombreux outils tiers
Exemple de conversion
import torch
import torch.nn as nn
import torch.onnx
# Modèle PyTorch simple
class ImageClassifier(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(3, 64, kernel_size=3)
self.relu = nn.ReLU()
self.pool = nn.AdaptiveAvgPool2d((1, 1))
self.fc = nn.Linear(64, 10)
def forward(self, x):
x = self.relu(self.conv1(x))
x = self.pool(x).flatten(1)
return self.fc(x)
# Charger le modèle entraîné
model = ImageClassifier()
model.load_state_dict(torch.load('model_weights.pth'))
model.eval()
# Définir une entrée exemple pour le tracing
dummy_input = torch.randn(1, 3, 224, 224)
# Export vers ONNX
torch.onnx.export(
model,
dummy_input,
'classifier.onnx',
export_params=True,
opset_version=17,
do_constant_folding=True,
input_names=['image'],
output_names=['logits'],
dynamic_axes={
'image': {0: 'batch_size'},
'logits': {0: 'batch_size'}
}
)
print("Modèle exporté : classifier.onnx")Mise en œuvre en production
- Entraîner et valider le modèle dans votre framework de prédilection (PyTorch, TensorFlow, scikit-learn)
- Exporter le modèle au format ONNX en spécifiant la version d'opset compatible avec votre environnement de déploiement
- Valider la conversion avec ONNX Runtime en comparant les prédictions (tolérance numérique acceptée : 1e-5 à 1e-7)
- Optimiser le modèle ONNX avec des techniques comme la quantification, fusion d'opérateurs et graph optimization
- Intégrer ONNX Runtime dans votre infrastructure d'inférence (API REST, gRPC, edge device)
- Monitorer les performances (latence, throughput) et la dérive du modèle avec des outils MLOps standards
Conseil d'expert
Utilisez toujours une validation croisée après conversion ONNX en comparant les outputs du modèle original et converti sur un jeu de test représentatif. Les différences numériques minimes sont normales (précision flottante), mais des écarts significatifs indiquent un problème de conversion. Testez également les cas limites (batch size variable, valeurs nulles) pour garantir la robustesse en production.
Outils et écosystème
- ONNX Runtime : runtime haute performance pour l'inférence multi-plateforme (Microsoft)
- Netron : visualiseur de graphes ONNX pour déboguer et comprendre l'architecture des modèles
- ONNX Model Zoo : bibliothèque de modèles pré-entraînés au format ONNX (vision, NLP, audio)
- ONNXMLTools : suite de convertisseurs pour scikit-learn, XGBoost, LightGBM et autres frameworks
- TensorRT : optimiseur NVIDIA pour modèles ONNX sur GPU avec quantification INT8/FP16
- OpenVINO : toolkit Intel pour déploiement optimisé sur CPU, GPU et VPU
ONNX s'impose comme le standard de facto pour le déploiement de modèles ML à grande échelle. En adoptant ce format, les organisations réduisent les coûts de migration technologique, accélèrent les cycles de déploiement et maximisent les performances d'inférence grâce aux optimisations spécifiques au matériel. Cette standardisation favorise également la collaboration entre équipes data science et engineering, éliminant les frictions liées à la multiplicité des frameworks.
Parlons de votre projet
Besoin d'expertise sur le sujet ?
Nos experts vous accompagnent de la stratégie à la mise en production. Échangeons 30 min sur votre projet.

