ONNX und Azure Machine Learning

In diesem Artikel wird beschrieben, wie Open Neural Network Exchange (ONNX) zur Optimierung des Rückschlusses Ihrer Machine Learning-Modelle beitragen kann. Der Rückschluss oder die Modellbewertung ist der Prozess, bei dem ein bereitgestelltes Modell zum Generieren von Vorhersagen anhand von Produktionsdaten verwendet wird.

Zur Optimierung von Machine Learning-Modellen für Rückschlüsse müssen Sie das Modell und die Rückschlussbibliothek anpassen, um die Hardwarefunktionen optimal nutzen. Diese Aufgabe wird komplex, wenn Sie eine optimale Leistung auf verschiedenen Plattformen wie Cloud, Edge, CPU oder GPU erzielen möchten, da jede Plattform unterschiedliche Funktionen und Merkmale aufweist. Die Komplexität nimmt zu, wenn Sie Modelle aus verschiedenen Frameworks auf unterschiedlichen Plattformen ausführen müssen. Es kann zeitaufwendig sein, die verschiedenen Kombinationen von Frameworks und Hardware zu optimieren.

Eine gute Lösung besteht darin, das Modell einmal in Ihrem bevorzugten Framework zu trainieren und es dann in das ONNX-Format zu exportieren oder zu konvertieren, damit es überall in der Cloud oder am Edge ausgeführt werden kann. Microsoft und eine Gruppe von Partnern haben ONNX als offenen Standard für die Darstellung von Machine Learning-Modellen entwickelt. Sie können Modelle aus vielen Frameworks in das ONNX-Standardformat exportieren oder konvertieren. Zu den unterstützten Frameworks zählen TensorFlow, PyTorch, Scikit-learn, Keras, Chainer, MXNet und MATLAB. Sie können Modelle im ONNX-Format auf verschiedenen Plattformen und Geräten ausführen.

Dieses ONNX-Flussdiagramm zeigt verfügbare Frameworks und Bereitstellungsoptionen.

ONNX-Flussdiagramm mit Training, Konvertern und Bereitstellung

ONNX-Runtime

Die ONNX-Runtime ist eine leistungsstarke Rückschluss-Engine für die Bereitstellung von ONNX-Modellen in der Produktionsumgebung. Die ONNX-Runtime wurde für Cloud und Edge optimiert und funktioniert unter Linux, Windows und macOS. ONNX ist zwar in C++ geschrieben, verfügt aber auch über APIs für C, Python, C#, Java und JavaScript (Node.js) zur Verwendung in diesen Umgebungen.

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 die Verwendung der ONNX-Runtime können Sie von den umfangreichen Optimierungen, Tests und laufenden Verbesserungen für Produktionsumgebungen profitieren.

Weit verbreitete Microsoft-Dienste wie Bing, Office und Azure KI nutzen die ONNX-Runtime. Obwohl Leistungssteigerungen von vielen Faktoren abhängen, verzeichnen diese Microsoft-Dienste durch die Verwendung von ONNX im Durchschnitt eine Verdoppelung der CPU-Leistung. Die ONNX-Runtime wird in Azure Machine Learning und anderen Microsoft-Produkten ausgeführt, die Machine Learning-Workloads unterstützen, z. B.:

Möglichkeiten zum Erhalten von ONNX-Modellen

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

Viele Modelle können als ONNX-Modelle dargestellt werden, z. B. Modelle zur Bildklassifizierung, Objekterkennung und Textverarbeitung. Falls ein Modell nicht erfolgreich konvertiert werden kann, erstellen Sie ein GitHub-Issue im Repository des verwendeten Konverters.

ONNX-Modellimplementierung in Azure

Sie können Ihre ONNX-Modelle in Azure Machine Learning 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.

Python-Pakete für die ONNX-Runtime

Python-Pakete für die ONNX-Runtime (CPU und GPU) sind auf PyPi.org verfügbar. Ü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 die 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.

Mit der ONNX-Runtime können Sie Metadaten, Eingaben und Ausgaben des Modells wie folgt abfragen:

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

Um Rückschlüsse für Ihr Modell auszuführen, verwenden Sie run, und übergeben Sie die Liste der Ausgaben, die zurückgegeben werden sollen, sowie eine Zuordnung der Eingabewerte. Lassen Sie die Ausgabeliste leer, wenn Sie alle Ausgaben erhalten möchten. 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 für die ONNX-Runtime finden Sie in der Dokumentation zur Python-API.