ONNX und Azure Machine Learning: Erstellen und Beschleunigen von ML-Modellen

Erfahren Sie, wie der Einsatz von Open Neural Network Exchange (ONNX) zur Optimierung des Rückschlusses Ihres Machine Learning-Modells beitragen kann. Rückschlüsse oder Modellbewertungen stellen die Phase dar, in der das bereitgestellte Modell für die Vorhersage verwendet wird (meist für Produktionsdaten).

Die Optimierung von Machine Learning-Modellen hinsichtlich Rückschlüssen (oder Modellbewertungen) ist schwierig, da Sie das Modell und die Rückschlussbibliothek so anpassen müssen, dass sie das Beste aus den Möglichkeiten der Hardware machen. Das Problem wird extrem kompliziert, wenn Sie eine optimale Leistung auf verschiedenen Arten von Plattformen (Cloud/Edge, CPU/GPU usw.) erzielen möchten, da jede davon unterschiedliche Fähigkeiten und Eigenschaften hat. Die Komplexität steigt, wenn Sie Modelle aus einer Vielzahl von Frameworks haben, die auf einer Vielzahl von Plattformen ausgeführt werden müssen. Es ist sehr zeitaufwendig, die verschiedenen Kombinationen von Frameworks und Hardware zu optimieren. Eine Lösung, die ein einmaliges Training in Ihrem bevorzugten Framework und die Ausführung überall in der Cloud oder am Edge ermöglicht, ist erforderlich. An dieser Stelle tritt ONNX auf den Plan.

Microsoft und eine Gruppe von Partnern haben ONNX als offenen Standard für die Darstellung von Machine Learning-Modellen entwickelt. Modelle aus zahlreichen Frameworks wie TensorFlow, PyTorch, SciKit-Learn, Keras, Chainer, MXNet, MATLAB und SparkML können exportiert oder in das ONNX-Standardformat konvertiert werden. Sobald die Modelle im ONNX-Format vorliegen, können sie auf einer Vielzahl von 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. Sie ist zwar in C++ geschrieben, kann aber dank APIs für C, Python, C#, Java und JavaScript (Node.js) in einer Vielzahl von Umgebungen verwendet werden. Die ONNX-Runtime unterstützt sowohl DNN-Modelle als auch herkömmliche ML-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 Cognitive Services zum Einsatz. Leistungssteigerungen hängen zwar von einer Reihe von Faktoren ab, aber diese Microsoft-Dienste konnten bei der CPU einen Leistungszuwachs um durchschnittlich das Doppelte verzeichnen. 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

Abrufen 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. Sollte bei Ihnen ein Problem mit einem nicht erfolgreich konvertierbaren Modell auftreten, melden Sie dies im GitHub-Repository des verwendeten Konverters. Sie können Ihr bestehendes Formatmodell weiter verwenden, bis das Problem behoben ist.

Bereitstellen von ONNX-Modellen in Azure

Mit Azure Machine Learning können Sie Ihre ONNX-Modelle bereitstellen, verwalten und überwachen. Wenn Sie den Standardbereitstellungsworkflow und ONNX Runtime verwenden, können Sie einen REST-Endpunkt erstellen, der in der Cloud gehostet wird. Sehen Sie sich am Ende dieses Artikels ein Beispiel für ein Jupyter Notebook an, um es selbst auszuprobieren.

Installieren und Verwenden der ONNX-Runtime mit Python

Python-Pakete für die ONNX-Runtime stehen auf PyPi.org (CPU, GPU) zur Verfügung. Lesen Sie vor der Installation 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 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 (lassen Sie sie 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

Beispiele für Python-Notebooks, von denen ONNX-Modelle erstellt und bereitgestellt werden, finden Sie unter how-to-use-azureml/deployment/onnx.

Informationen zum Ausführen von Notebooks finden Sie im Artikel Verwenden von Jupyter-Notebooks zum Erkunden des Azure Machine Learning-Diensts.

Beispiele für die Verwendung in anderen Sprachen finden Sie im GitHub-Repository für die ONNX-Runtime.

Weitere Informationen

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: