Aller au contenu
> đŸ’» 🧠 Code 1001 > LLM : articles, supports pratiques et ressources > Qu’est-ce que ONNX (Open Neural Network Exchange) ?

Qu’est-ce que ONNX (Open Neural Network Exchange) ?

  • par

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 :

  1. Exportation : Un modÚle entraßné dans un framework (par exemple PyTorch) est converti en fichier .onnx.
  2. DĂ©ploiement (InfĂ©rence) : Le fichier .onnx rĂ©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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *