Freigeben über


ONNX und Azure Machine Learning

In diesem Artikel wird beschrieben, wie der Open Neural Network Exchange (ONNX) dazu beitragen kann, die Ableitung Ihrer Machine Learning-Modelle zu optimieren. Ableitungen oder Modellbewertungen sind 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 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 wird in C++ geschrieben, verfügt aber auch über C-, Python-, C#-, Java- und JavaScript-APIs (Node.js), die Sie in diesen Umgebungen verwenden können.

ONNX Runtime unterstützt sowohl deep neural networks (DNN) als auch herkömmliche Machine Learning-Modelle. Es integriert sich mit Beschleunigern auf verschiedener Hardware, wie TensorRT auf NVIDIA GPUs, OpenVINO auf Intel-Prozessoren und DirectML unter 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 Leistungsgewinne von vielen Faktoren abhängen, erzielen diese Microsoft-Dienste durchschnittlich eine 2-fache Leistungssteigerung auf der CPU, da sie ONNX verwenden. 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 Abrufen von ONNX-Modellen

Sie können ONNX-Modelle auf verschiedene Arten abrufen:

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. Mithilfe eines standardmäßigen MLOps-Bereitstellungsworkflows mit ONNX-Runtime 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 CPU - und GPU ONNX-Runtime sind auf PyPi.org verfügbar. Überprüfen Sie die Systemanforderungen vor der Installation.

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.