Home
Login

ONNX Runtime: Ein plattformübergreifender, leistungsstarker Beschleuniger für maschinelles Lernen und Trainings.

MITC++ 16.9kmicrosoft Last Updated: 2025-06-14

ONNX Runtime (ORT)

Einführung

ONNX Runtime (ORT) ist ein plattformübergreifender Beschleuniger für maschinelles Lernen, der darauf abzielt, den Inferenzprozess von ONNX-Modellen (Open Neural Network Exchange) zu beschleunigen. Er wurde von Microsoft entwickelt und ist Open Source. Er unterstützt verschiedene Hardwareplattformen und Betriebssysteme und bietet hochleistungsfähige Inferenzfunktionen.

Kernziele:

  • Beschleunigung der ONNX-Modellinferenz: Erhöhung der Inferenzgeschwindigkeit von ONNX-Modellen durch Optimierung des Ausführungsdiagramms, Nutzung von Hardwarebeschleunigung usw.
  • Plattformübergreifende Unterstützung: Unterstützung von Betriebssystemen wie Windows, Linux, macOS sowie verschiedenen Hardwareplattformen wie CPU, GPU, FPGA.
  • Einfache Integration: Bereitstellung von APIs in verschiedenen Programmiersprachen wie C/C++, Python, Java, C#, um die Integration in verschiedene Anwendungen zu erleichtern.
  • Hohe Leistung: Erzielung einer hohen Inferenzleistung durch verschiedene Optimierungstechniken wie Diagrammoptimierung, Operatorfusion, Speicheroptimierung usw.
  • Erweiterbarkeit: Ermöglicht Benutzern, benutzerdefinierte Operatoren und Ausführungsanbieter zu definieren, um neue Hardwareplattformen und Algorithmen zu unterstützen.

Hauptmerkmale

  • ONNX-Modellunterstützung: Vollständige Unterstützung des ONNX-Standards, wodurch das Laden und Ausführen von Modellen, die der ONNX-Spezifikation entsprechen, möglich ist.
  • Verschiedene Ausführungsanbieter (Execution Providers, EPs):
    • CPU EP: Verwendung der CPU für die Inferenz, Unterstützung verschiedener CPU-Befehlssatzoptimierungen (z. B. AVX2, AVX512).
    • CUDA EP: Verwendung der NVIDIA GPU für die Inferenz, Nutzung der CUDA-Beschleunigung.
    • TensorRT EP: Verwendung von NVIDIA TensorRT für die Inferenz, weitere Optimierung der GPU-Leistung.
    • OpenVINO EP: Verwendung des Intel OpenVINO Toolkits für die Inferenz, Optimierung der Intel CPU- und GPU-Leistung.
    • DirectML EP: Verwendung der Windows DirectML API für die Inferenz, Nutzung der GPU-Ressourcen unter Windows.
    • CoreML EP: Verwendung des Apple CoreML Frameworks für die Inferenz, Optimierung der Leistung auf Apple-Geräten.
    • Andere EPs: Unterstützung weiterer Hardwareplattformen wie ARM NN, ACL usw.
  • Diagrammoptimierung: Automatische Optimierung des ONNX-Modellgraphen, z. B. Operatorfusion, Konstantenfaltung, Knoteneliminierung usw., um die Berechnungsmenge und den Speicherbedarf zu reduzieren.
  • Operatorfusion: Zusammenführen mehrerer Operatoren zu einem Operator, um den Kommunikationsaufwand zwischen den Operatoren zu reduzieren.
  • Quantisierungsunterstützung: Unterstützung der Modellquantisierung, Umwandlung von Gleitkommamodellen in Ganzzahlmodelle, um die Modellgröße und den Berechnungsaufwand zu reduzieren und die Inferenzgeschwindigkeit zu erhöhen.
  • Dynamische Formunterstützung: Unterstützung von ONNX-Modellen mit dynamischen Formen, wodurch die Verarbeitung von Eingabedaten unterschiedlicher Größe möglich ist.
  • Sitzungsoptionen: Bereitstellung umfangreicher Sitzungsoptionen, mit denen verschiedene Aspekte des Inferenzprozesses gesteuert werden können, z. B. Anzahl der Threads, Speicherzuweisung, Diagrammoptimierungsstufe usw.
  • Debugging-Tools: Bereitstellung von Debugging-Tools, die Benutzern bei der Analyse von Leistungsengpässen von ONNX-Modellen helfen können.
  • Leistungsanalyse: Bereitstellung von Leistungsanalyse-Tools, die Benutzern helfen, die Leistungsindikatoren von ONNX-Modellen zu verstehen, z. B. Inferenzzeit, Speicherbedarf usw.
  • Verteilte Inferenz: Unterstützung der verteilten Inferenz, wodurch ONNX-Modelle auf mehreren Geräten zur Inferenz bereitgestellt werden können, um den Inferenzdurchsatz zu erhöhen.

Architektur

Die Architektur von ONNX Runtime umfasst hauptsächlich die folgenden Teile:

  1. Frontend: Verantwortlich für das Laden des ONNX-Modells und dessen Umwandlung in die interne Darstellung von ONNX Runtime.
  2. Diagrammoptimierer (Graph Optimizer): Verantwortlich für die Optimierung des ONNX-Modellgraphen, z. B. Operatorfusion, Konstantenfaltung usw.
  3. Ausführer (Executor): Verantwortlich für die Ausführung des ONNX-Modellgraphen, wobei Operatoren je nach Ausführungsanbieter verschiedenen Hardwareplattformen zur Ausführung zugewiesen werden.
  4. Ausführungsanbieter (Execution Provider): Verantwortlich für die Ausführung von Operatoren auf einer bestimmten Hardwareplattform, z. B. CPU, GPU, FPGA usw.
  5. Sitzung (Session): Verantwortlich für die Verwaltung des Lebenszyklus des ONNX-Modells, einschließlich des Ladens des Modells, der Optimierung des Modells, der Ausführung des Modells, der Freigabe von Ressourcen usw.

Verwendung

  1. Installation von ONNX Runtime: ONNX Runtime kann über pip installiert werden, z. B.: pip install onnxruntime (CPU-Version) oder pip install onnxruntime-gpu (GPU-Version).
  2. Laden des ONNX-Modells: Verwenden Sie onnxruntime.InferenceSession, um das ONNX-Modell zu laden.
  3. Vorbereiten der Eingabedaten: Konvertieren Sie die Eingabedaten in ein Format, das von ONNX Runtime akzeptiert wird, z. B. NumPy-Arrays.
  4. Ausführen der Inferenz: Verwenden Sie die Methode InferenceSession.run(), um die Inferenz auszuführen und die Ausgaberesultate abzurufen.

Beispielcode (Python):

import onnxruntime
import numpy as np

# Laden des ONNX-Modells
session = onnxruntime.InferenceSession("model.onnx")

# Abrufen der Eingabe- und Ausgabeinformationen
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name

# Vorbereiten der Eingabedaten
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)

# Ausführen der Inferenz
output_data = session.run([output_name], {input_name: input_data})

# Drucken der Ausgaberesultate
print(output_data)

Anwendungsbereiche

  • Bilderkennung: Beschleunigung der Inferenz von Aufgaben wie Bildklassifizierung, Objekterkennung, Bildsegmentierung usw.
  • Natürliche Sprachverarbeitung: Beschleunigung der Inferenz von Aufgaben wie Textklassifizierung, maschinelle Übersetzung, Textgenerierung usw.
  • Spracherkennung: Beschleunigung der Inferenz von Aufgaben wie Spracherkennung, Sprachsynthese usw.
  • Empfehlungssysteme: Beschleunigung der Inferenz von Empfehlungsmodellen, Erhöhung der Empfehlungseffizienz.
  • Andere Aufgaben des maschinellen Lernens: Kann die Inferenz verschiedener Aufgaben des maschinellen Lernens beschleunigen, z. B. Regression, Clustering usw.

Vorteile

  • Hohe Leistung: Erzielung einer hohen Inferenzleistung durch verschiedene Optimierungstechniken.
  • Plattformübergreifend: Unterstützung verschiedener Betriebssysteme und Hardwareplattformen.
  • Einfache Integration: Bereitstellung von APIs in verschiedenen Programmiersprachen.
  • Flexibel und erweiterbar: Ermöglicht Benutzern, benutzerdefinierte Operatoren und Ausführungsanbieter zu definieren.
  • Aktive Community: Verfügt über eine aktive Community, in der technischer Support eingeholt und Erfahrungen ausgetauscht werden können.

Einschränkungen

  • Abhängigkeit vom ONNX-Modellformat: Es können nur Modelle im ONNX-Format ausgeführt werden, andere Modellformate müssen in das ONNX-Format konvertiert werden.
  • Die Unterstützung einiger Operatoren ist möglicherweise unvollständig: Für einige spezielle Operatoren ist die Unterstützung von ONNX Runtime möglicherweise unvollständig, sodass Benutzer benutzerdefinierte Operatoren definieren müssen.
  • Erfordert eine gewisse Konfiguration und Optimierung: Um die beste Leistung zu erzielen, ist möglicherweise eine gewisse Konfiguration und Optimierung von ONNX Runtime erforderlich.

Zusammenfassung

ONNX Runtime ist ein leistungsstarker Beschleuniger für maschinelles Lernen, der Benutzern helfen kann, den Inferenzprozess von ONNX-Modellen zu beschleunigen und die Anwendungsleistung zu verbessern. Er bietet Vorteile wie hohe Leistung, Plattformübergreifung, einfache Integration, Flexibilität und Erweiterbarkeit und eignet sich für verschiedene Aufgaben des maschinellen Lernens.

Alle detaillierten Informationen sind der offiziellen Website zu entnehmen (https://github.com/microsoft/onnxruntime)