Was jeder ML/AI-Entwickler über ONNX wissen sollte
Einleitung
Das Open Neural Network Exchange Format (ONNX) ist ein neuer Standard zum Austausch von Deep-Learning-Modellen. Es verspricht, Deep-Learning-Modelle portabel zu machen und so Vendor-Lock-in zu verhindern. Lassen Sie uns untersuchen, warum das für den modernen ML/AI-Entwickler von Bedeutung ist.
Das Endergebnis eines trainierten Deep-Learning-Algorithmus ist eine Modelldatei, die die Beziehung zwischen Eingabedaten und Ausgabevorhersagen effizient darstellt. Ein neuronales Netzwerk ist eine der leistungsstärksten Methoden, um solche Vorhersagemodelle zu erzeugen, kann jedoch schwierig in Produktionssysteme integriert werden. Meistens existieren diese Modelle in einem Datenformat wie einer .pth
-Datei oder einer HD5-Datei. Oftmals möchte man diese Modelle portabel machen, damit sie in Umgebungen eingesetzt werden können, die sich von der Trainingsumgebung unterscheiden.
ONNX Überblick
Auf hoher Ebene ist ONNX darauf ausgelegt, die Interoperabilität zwischen Frameworks zu ermöglichen. Es gibt viele exzellente Machine-Learning-Bibliotheken in verschiedenen Sprachen – PyTorch, TensorFlow, MXNet und Caffe sind nur einige der in den letzten Jahren sehr populären Frameworks, aber es gibt noch viele weitere.
Die Idee ist, dass Sie ein Modell mit einem Tool-Stack trainieren und es dann mit einem anderen für Inferenz und Vorhersage bereitstellen können. Um diese Interoperabilität sicherzustellen, müssen Sie Ihr Modell im model.onnx
-Format exportieren, einer serialisierten Darstellung des Modells in einer Protobuf-Datei. Derzeit gibt es native Unterstützung in ONNX für PyTorch, CNTK, MXNet und Caffe2, aber es gibt auch Konverter für TensorFlow und CoreML.
Voraussetzungen für ML/AI-Entwickler
- Grundlegendes Verständnis von Machine Learning (ML) und Deep Learning (DL): Vertrautheit mit Konzepten wie neuronalen Netzwerken, Schichten, Modellen und Trainingsprozessen.
- Kenntnisse über beliebte ML-Frameworks: Erfahrung mit mindestens einem großen ML/DL-Framework wie TensorFlow, PyTorch oder Scikit-learn, da ONNX zur Konvertierung von Modellen zwischen Frameworks verwendet wird.
- Erfahrung mit der Bereitstellung von Modellen: Verständnis der Grundlagen zur Bereitstellung von ML-Modellen in Produktionsumgebungen, da ONNX eine effiziente plattformübergreifende Bereitstellung erleichtert.
- Vertrautheit mit Modelloptimierung: Grundlegendes Verständnis von Techniken zur Optimierung von ML-Modellen für die Leistung, da ONNX häufig zur Effizienzsteigerung verwendet wird.
- Python-Programmierung: Da ONNX stark in Python unterstützt wird, sind Python-Kenntnisse für die Nutzung seiner Tools und Bibliotheken unerlässlich.
ONNX in der Praxis
Stellen Sie sich vor, Sie möchten ein Modell trainieren, um vorherzusagen, ob ein Lebensmittel in Ihrem Kühlschrank noch essbar ist. Sie entscheiden sich, eine Reihe von Fotos von Lebensmitteln in verschiedenen Stadien nach dem Verfallsdatum zu verwenden und diese in ein konvolutionales neuronales Netzwerk (CNN) einzuspeisen, das Bilder von Lebensmitteln analysiert und trainiert, um vorherzusagen, ob die Lebensmittel noch genießbar sind.
Nachdem Sie Ihr Modell trainiert haben, möchten Sie es in einer neuen iOS-App bereitstellen, damit jeder Ihr vortrainiertes Modell verwenden kann, um seine eigenen Lebensmittel auf Sicherheit zu überprüfen. Sie haben Ihr Modell zunächst mit PyTorch trainiert, aber iOS erwartet CoreML innerhalb der App. ONNX ist eine Zwischenrepräsentation Ihres Modells, die es Ihnen ermöglicht, leicht von einer Umgebung zur nächsten zu wechseln.
Mit PyTorch würden Sie Ihr Modell normalerweise mit torch.save(the_model.state_dict(), PATH)
exportieren. Der Export in das ONNX-Austauschformat ist nur eine Zeile mehr:
torch.onnx.export(model, dummy_input, 'SplitModel.proto', verbose=True)
Mit einem Tool wie ONNX-CoreML können Sie Ihr vortrainiertes Modell jetzt problemlos in eine Datei umwandeln, die Sie in XCode importieren und nahtlos in Ihre App integrieren können. Für ein funktionierendes Beispiel lesen Sie diesen exzellenten Beitrag von Stefano Attardi über den Aufbau einer ML-gestützten iOS-App von Anfang bis Ende.
Fazit für ML/AI-Entwickler
Da immer mehr Deep-Learning-Frameworks entstehen und Workflows fortschrittlicher werden, ist die Notwendigkeit für Portabilität wichtiger denn je. ONNX ist ein leistungsstarker und offener Standard, um Framework-Lock-in zu verhindern. Des Weiteren stellt es sicher, dass die von Ihnen entwickelten Modelle langfristig nutzbar bleiben.