ONNX und Azure Machine Learning

Hier erfahren Sie, wie der Einsatz von Open Neural Network Exchange (ONNX) zur Optimierung der Rückschlüsse Ihres Machine Learning-Modells beitragen kann. Rückschluss oder Modellbewertung ist der Prozess der Verwendung eines bereitgestellten Modells zum Generieren von Vorhersagen für Produktionsdaten.

Zur Optimierung von Machine Learning-Modellen für Rückschlüsse müssen Sie das Modell und die Rückschlussbibliothek so anpassen, dass sie die Hardware ideal nutzen. Diese Aufgabe wird komplex, wenn Sie eine optimale Leistung auf verschiedenen Arten von Plattformen wie Cloud oder Edge, CPU oder GPU usw. erzielen möchten, da jede Plattform unterschiedliche Funktionen und Merkmale aufweist. Die Komplexität erhöht sich, wenn Sie Modelle aus verschiedenen Frameworks haben, die auf verschiedenen Plattformen ausgeführt werden müssen. Es kann zeitaufwendig sein, die verschiedenen Kombinationen von Frameworks und Hardware zu optimieren. Daher besteht eine gute Lösung darin, Ihr Modell einmal in Ihrem bevorzugten Framework zu trainieren und es dann irgendwo in Cloud oder Edge auszuführen – hierbei kommt ONNX ins Spiel.

Was ist ONNX?

Microsoft und eine Gruppe von Partnern haben ONNX als offenen Standard für die Darstellung von Machine Learning-Modellen entwickelt. Modelle aus vielen Frameworks wie TensorFlow, PyTorch, Scikit-learn, Keras, Chainer, MXNet und MATLAB können exportiert oder in das ONNX-Standardformat konvertiert werden. Sobald die Modelle im ONNX-Format vorliegen, können sie auf verschiedenen Plattformen und Geräten ausgeführt werden.

Die ONNX-Runtime ist eine leistungsstarke Rückschluss-Engine für die Bereitstellung von ONNX-Modellen in der Produktionsumgebung. Sie wurde für Cloud und Edge optimiert und funktioniert unter Linux, Windows und Mac. ONNX ist zwar in C++ geschrieben, kann aber dank APIs für C, Python, C#, Java und JavaScript (Node.js) in vielen Umgebungen verwendet werden. Die ONNX Runtime unterstützt sowohl DNN-Modelle (Deep Neural Network) als auch herkömmliche Machine Learning-Modelle und kann mit Beschleunigern für unterschiedliche Hardware integriert werden. Hierzu zählen unter anderem TensorRT (NVIDIA-GPUs), OpenVINO (Intel-Prozessoren) und DirectML (Windows). Durch den Einsatz der ONNX-Runtime können Sie von den umfangreichen Optimierungen, Tests und laufenden Verbesserungen für Produktionsumgebungen profitieren.

Die ONNX-Runtime kommt in weit verbreiteten Microsoft-Diensten wie Bing, Office und Azure KI zum Einsatz. Obwohl Leistungssteigerungen von vielen Faktoren abhängen, verzeichnen diese Microsoft-Dienste eine durchschnittlich 2-fache CPU-Leistungssteigerung. Neben Azure Machine Learning-Diensten wird die ONNX-Runtime auch in anderen Produkten ausgeführt, von denen Machine Learning-Workloads unterstützt werden. Hierzu zählen unter anderem:

ONNX-Flussdiagramm mit Training, Konvertern und Bereitstellung

Beziehen von ONNX-Modellen

Es gibt verschiedene Möglichkeiten, an ONNX-Modelle zu gelangen:

Viele Modelle, z. B. zur Bildklassifizierung, Objekterkennung und Textverarbeitung, können als ONNX-Modelle abgebildet werden. Wenn ein Modell nicht erfolgreich konvertiert werden kann, erstellen Sie ein GitHub-Issue im Repository des verwendeten Konverters. Sie können Ihr bestehendes Modellformat weiter verwenden, bis das Problem behoben ist.

ONNX-Modellimplementierung in Azure

Mit Azure Machine Learning können Sie Ihre ONNX-Modelle bereitstellen, verwalten und überwachen. Wenn Sie den MLOps-Standardbereitstellungsworkflow und die ONNX Runtime verwenden, können Sie einen REST-Endpunkt erstellen, der in der Cloud gehostet wird. Praxisbeispiele finden Sie in diesen Jupyter-Notebooks.

Installation und Verwendung der ONNX Runtime mit Python

Python-Pakete für die ONNX Runtime stehen auf PyPi.org (CPU und GPU) zur Verfügung. Überprüfen Sie vor der Installation unbedingt die Systemanforderungen.

Führen Sie zum Installieren der ONNX-Runtime für Python einen der folgenden Befehle aus:

pip install onnxruntime          # CPU build
pip install onnxruntime-gpu   # GPU build

Um ONNX Runtime in Ihrem Python-Skript aufzurufen, verwenden Sie den folgenden Code:

import onnxruntime
session = onnxruntime.InferenceSession("path to model")

In der dem Modell beiliegenden Dokumentation finden Sie in der Regel die Ein- und Ausgaben für die Verwendung des Modells. Sie können auch ein Visualisierungstool wie Netron einsetzen, um das Modell anzuzeigen. Die ONNX Runtime kann zudem verwendet werden, um Metadaten, Eingaben und Ausgaben des Modells wie folgt abzufragen:

session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name

Um Rückschlüsse zu Ihrem Modell zu erhalten, verwenden Sie run und übergeben die Liste der Ausgaben, die zurückgegeben werden sollen (oder lassen Sie die Liste leer, falls alle gewünscht sind), und eine Zuordnung der Eingabewerte. Als Ergebnis erhalten Sie eine Liste der Ausgaben.

results = session.run(["output1", "output2"], {
                      "input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})

Die vollständige API-Referenz zu Python finden Sie im Dokument zur Referenzdokumentation zu ONNX Runtime.

Beispiele

Erfahren Sie mehr über ONNX, oder leisten Sie einen Beitrag zum Projekt:

Erfahren Sie mehr über die ONNX-Runtime, oder leisten Sie einen Beitrag zum Projekt: