Modèle ONNX | Échange de réseau neuronal ouvert

ONNX | Échange de réseau neuronal ouvert.

Introduction

ONNX, également connu sous le nom d’Open Neural Network Exchange, est devenu largement reconnu comme un format standardisé qui facilite la représentation des modèles d’apprentissage profond. Son utilisation a gagné une traction significative en raison de sa capacité à promouvoir l’interchangeabilité et la collaboration transparente entre différents frameworks, tels que PyTorch, TensorFlow et Cafe2.

L’un des principaux avantages d’ONNX réside dans sa capacité à assurer la cohérence entre les frameworks. De plus, il offre la possibilité d’exporter et d’importer des modèles en utilisant plusieurs langages de programmation, tels que Python, C++, C# et Java. Cette polyvalence permet aux développeurs de partager et d’utiliser facilement des modèles au sein de la communauté, indépendamment de leur langage de programmation préféré.

Objectifs d’apprentissage

  1. Dans cette section, nous explorerons en détail ONNX, en fournissant un tutoriel complet sur la conversion des modèles au format ONNX. Pour assurer la clarté, le contenu sera organisé en sous-titres distincts.
  2. De plus, nous explorerons différents outils qui peuvent être utilisés pour la conversion des modèles au format ONNX.
  3. Ensuite, nous nous concentrerons sur le processus étape par étape de conversion des modèles PyTorch au format ONNX.
  4. Enfin, nous présenterons un résumé complet, mettant en évidence les principales conclusions et informations sur les capacités d’ONNX.

Cet article a été publié dans le cadre du Data Science Blogathon.

Aperçu détaillé

ONNX, abréviation de Open Neural Network Exchange, est un format disponible gratuitement spécialement conçu pour les modèles d’apprentissage profond. Son objectif principal est de faciliter l’échange et le partage sans problème de modèles entre différents frameworks d’apprentissage profond, tels que TensorFlow et Caffe2, lorsqu’ils sont utilisés avec PyTorch.

Un des avantages notables d’ONNX est sa capacité à transférer des modèles entre différents frameworks avec une préparation minimale et sans avoir besoin de réécrire les modèles. Cette fonctionnalité simplifie grandement l’optimisation et l’accélération des modèles sur différentes plates-formes matérielles, telles que les GPU et les TPU. De plus, elle permet aux chercheurs de partager leurs modèles dans un format standardisé, favorisant la collaboration et la reproductibilité.

Pour faciliter le travail efficace avec les modèles ONNX, ONNX propose plusieurs outils utiles. Par exemple, ONNX Runtime sert de moteur haute performance pour l’exécution des modèles. De plus, le convertisseur ONNX facilite la conversion transparente des modèles entre différents frameworks.

ONNX est un projet en développement actif qui bénéficie de contributions majeures de la part d’acteurs importants de la communauté de l’IA, tels que Microsoft et Facebook. Il bénéficie du soutien de différents frameworks d’apprentissage profond, bibliothèques et partenaires matériels, tels que Nvidia et Intel. De plus, les principaux fournisseurs de services cloud tels que AWS, Microsoft Azure et Google Cloud offrent une prise en charge d’ONNX.

Qu’est-ce qu’ONNX ?

ONNX, également connu sous le nom d’Open Neural Network Exchange, sert de format standardisé pour représenter les modèles d’apprentissage profond. Son objectif principal est de promouvoir la compatibilité entre différents frameworks d’apprentissage profond, tels que TensorFlow, PyTorch, Caffe2 et autres.

Le concept central d’ONNX repose sur une représentation universelle des graphes computationnels. Ces graphes, appelés graphes de données, définissent les composants ou nœuds du modèle et les connexions ou arêtes entre eux. Pour définir ces graphes, ONNX utilise un format de données agnostique du langage et de la plate-forme appelé ProtoBuff. De plus, ONNX intègre un ensemble standardisé de types, de fonctions et d’attributs qui spécifient les calculs effectués dans le graphe, ainsi que les tenseurs d’entrée et de sortie.

ONNX est un projet open source développé conjointement par Facebook et Microsoft. Sa dernière version continue d’évoluer, introduisant des fonctionnalités supplémentaires et étendant le support pour englober les techniques émergentes d’apprentissage profond.

Comment convertir ?

Pour convertir un modèle PyTorch au format ONNX, vous aurez besoin du modèle PyTorch et du code source associé utilisé pour le créer. Ce processus implique d’utiliser PyTorch pour charger le modèle dans Python, de définir des valeurs d’entrée de substitution pour toutes les variables d’entrée et d’utiliser l’exporteur ONNX pour générer le modèle ONNX. Lors de la conversion d’un modèle en ONNX, il est important de prendre en compte les aspects clés suivants. Pour réussir une conversion en utilisant ONNX, suivez les étapes ci-dessous :

1. Commencez par charger le modèle PyTorch dans Python en utilisant la bibliothèque PyTorch.

2. Assignez des valeurs d’entrée par défaut à toutes les variables du modèle. Cette étape garantit que les transformations sont conformes aux exigences d’entrée du modèle.

3. Utilisez l’exportateur ONNX pour générer des modèles ONNX, qui peuvent être exécutés en Python.

Pendant le processus de conversion, il est important de vérifier et de garantir les quatre aspects suivants pour une conversion réussie avec ONNX.

Entraînement du modèle

Avant le processus de conversion, il est nécessaire d’entraîner le modèle à l’aide de frameworks tels que TensorFlow, PyTorch ou Cafe2. Une fois le modèle entraîné, il peut être converti au format ONNX, ce qui permet son utilisation dans différents frameworks ou environnements.

Noms d’entrée et de sortie

Il est important d’attribuer des noms distincts et descriptifs aux tenseurs d’entrée et de sortie dans le modèle ONNX pour garantir une identification précise. Cette convention de dénomination facilite l’intégration fluide et la compatibilité du modèle dans différents frameworks ou environnements.

Gestion des axes dynamiques

Les axes dynamiques sont pris en charge par ONNX, ce qui permet aux tenseurs de représenter des paramètres tels que la taille du lot ou la longueur de la séquence. Il est crucial de gérer soigneusement les axes dynamiques lors du processus de conversion pour maintenir la cohérence et l’utilisabilité du modèle ONNX résultant dans différents frameworks ou environnements.

Évaluation de la conversion

Après avoir converti le modèle au format ONNX, il est recommandé d’effectuer une évaluation. Cette évaluation consiste à comparer les sorties des modèles d’origine et convertis à l’aide d’un ensemble de données d’entrée partagé. En comparant les sorties, les développeurs peuvent garantir l’exactitude et la justesse du processus de conversion, vérifiant l’équivalence du modèle transformé avec l’original.

En suivant ces lignes directrices, les développeurs peuvent convertir avec succès des modèles PyTorch au format ONNX, favorisant l’interopérabilité et permettant leur utilisation dans différents frameworks et environnements.

Outils pour convertir votre modèle en ONNX

Bibliothèques ONNX : Les bibliothèques ONNX offrent des fonctionnalités pour convertir des modèles provenant de différents frameworks, notamment TensorFlow, PyTorch et Caffe2, au format ONNX. Ces bibliothèques sont disponibles dans plusieurs langages de programmation, tels que Python, C++ et C#.

  • ONNX Runtime : ONNX Runtime fonctionne comme un moteur d’inférence open source spécialement conçu pour exécuter des modèles ONNX. Il inclut l’outil onnx2trt, qui permet la conversion de modèles ONNX au format TensorRT. En tirant parti des GPU, en particulier des GPU NVIDIA, le format TensorRT offre des avantages significatifs en termes de performances et d’accélération.

  • Netron : Netron est un navigateur Web open source créé spécifiquement pour visualiser et examiner des modèles de réseaux neuronaux, y compris ceux au format ONNX. De plus, Netron offre la possibilité de convertir des modèles ONNX vers d’autres formats tels que TensorFlow ou CoreML.
  • ONNX-Tensorflow : La bibliothèque ONNX-Tensorflow est un outil de conversion qui simplifie le processus d’importation de modèles ONNX dans TensorFlow, reconnu comme un framework d’apprentissage en profondeur populaire.
  • Optimiseur de modèle : L’optimiseur de modèle est un outil de ligne de commande qui facilite la conversion de modèles entraînés en une représentation intermédiaire (IR). Le moteur d’inférence peut charger et exécuter des modèles dans ce format IR, permettant un déploiement efficace.
  • ONNXmizer : ONNXmizer est un outil créé par Microsoft qui facilite la conversion de différentes représentations de réseaux neuronaux au format ONNX. La version actuelle d’ONNXmizer est compatible avec des frameworks populaires tels que PyTorch et TensorFlow.

Ces outils offrent des ressources précieuses pour convertir des modèles au format ONNX, améliorant l’interopérabilité et permettant une utilisation dans un large éventail de frameworks et de plates-formes.

Comment convertir un modèle PyTorch en ONNX ?

Pour créer un réseau neuronal simple avec 10 points d’entrée et 10 points de sortie en utilisant le module PyTorch NN, suivez ces étapes. Ensuite, convertissez le modèle au format ONNX en utilisant la bibliothèque ONNX.

Étape 1

Commencez par importer les bibliothèques nécessaires, telles que PyTorch et ONNX, pour faciliter le processus de conversion.

import torch
import onnx

Étape 2

Ensuite, définissons l’architecture du modèle. Pour cet exemple, nous utiliserons un réseau feed-forward de base. Créez une instance du modèle et spécifiez l’entrée pour l’instance. Cela nous permettra de procéder au processus de conversion.

# Définition du modèle PyTorch
class MyModel(torch.nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.fc = torch.nn.Linear(10, 10)

    def forward(self, x):
        x = self.fc(x)
        return x

# Création d'une instance
model = MyModel()

Étape 3

Pour exporter le modèle au format ONNX et l’enregistrer sous le nom “mymodel.onnx”, vous pouvez utiliser la fonction torch.onnx.export(). Voici un exemple.

# Définition de l'exemple d'entrée
example_input = torch.randn(1, 10)

# Exportation au format ONNX
torch.onnx.export(model, example_input, "mymodel.onnx")

Étape 4

Après avoir exporté le modèle, vous pouvez utiliser le module onnx.checker pour vérifier la cohérence du modèle et vérifier les formes des tenseurs d’entrée et de sortie.

import onnx
model = onnx.load("mymodel.onnx")
onnx.checker.check_model(model)

La fonction onnx.checker.check_model() lèvera une exception s’il y a des erreurs dans le modèle. Sinon, elle renverra None.

Étape 5

Pour garantir l’équivalence entre le modèle original et le modèle ONNX converti, vous pouvez comparer leurs sorties.

# Comparer la sortie du modèle original et du modèle converti en ONNX pour garantir leur équivalence.
original_output = model(example_input)
onnx_model = onnx.load("mymodel.onnx")
onnx.checker.check_model(onnx_model)
rep = onnx.shape_inference.infer_shapes(onnx_model)
onnx.checker.check_shapes(rep)
ort_session = onnxruntime.InferenceSession(onnx_model.SerializeToString())
ort_inputs = {ort_session.get_inputs()[0].name: example_input.numpy()}
ort_outs = ort_session.run(None, ort_inputs)
np.testing.assert_allclose(original_output.detach().numpy(), ort_outs[0], rtol=1e-03, atol=1e-05)
print("Sortie originale:", original_output)
print("Sortie du modèle Onnx:", ort_outs[0])

Conclusion

ONNX joue un rôle vital dans la promotion de l’interopérabilité des modèles en offrant un format standardisé pour convertir des modèles entraînés dans un framework pour une utilisation dans un autre. Cette intégration transparente des modèles élimine la nécessité de les re-entraîner lors de la transition entre différents frameworks, bibliothèques ou environnements.

Points clés

  • Pendant le processus de transformation, il est crucial d’assigner des noms uniques et descriptifs aux tenseurs d’entrée et de sortie du modèle. Ces noms jouent un rôle important pour identifier les entrées et sorties dans le format ONNX.
  • Un autre aspect important à prendre en compte lors de la conversion d’un modèle en ONNX est la gestion de l’accès dynamique. Les axes dynamiques peuvent être utilisés pour représenter des paramètres dynamiques tels que la taille du lot ou la longueur de la séquence dans un modèle. Une gestion appropriée des axes dynamiques doit être assurée pour garantir la cohérence et l’utilisabilité entre les frameworks et les environnements.
  • Plusieurs outils open source sont disponibles pour faciliter la conversion de modèles au format ONNX. Ces outils comprennent les bibliothèques ONNX, ONNX Runtime, Natron, ONNX-TensorFlow et ModelOptimizer. Chaque outil a ses propres forces uniques et prend en charge différents frameworks sources et cibles.
  • En exploitant les capacités d’ONNX et en utilisant ces outils, les développeurs peuvent augmenter la flexibilité et l’interopérabilité de leurs modèles d’apprentissage profond, permettant une intégration et un déploiement transparents sur différents frameworks et environnements.

Questions fréquemment posées

Les médias présentés dans cet article n’appartiennent pas à Analytics Vidhya et sont utilisés à la discrétion de l’auteur.

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI

Les chercheurs de Microsoft présentent LoRAShear Une nouvelle approche efficace de l'intelligence artificielle pour élaguer structurellement les LLM et récupérer les connaissances.

Les LLM peuvent traiter de vastes quantités de données textuelles et récupérer rapidement des informations pertinente...

AI

La bataille pour l'IA open-source à la suite de l'IA générative

Découvrez l'évolution de la nature du débat sur l'IA open-source alors que les géants de la technologie et les pratic...

AI

Applications de conversation avec de grands modèles linguistiques comprenant la séquence des entrées utilisateur, des instructions et des réponses

Cet article explique comment les entrées des utilisateurs sont traitées, converties en invitations, envoyées aux LLMs...

AI

Exploiter XGBoost pour la prévision de séries temporelles

Permettre à l'algorithme puissant de prévoir à partir de vos données.

Informatique

Les voitures autonomes «incompétentes» causent des ravages à San Francisco.

À San Francisco, les véhicules autonomes de Cruise et Waymo qui subissent une formation "rigoureuse" sur le...