ONNX (Open Neural Network Exchange) ist ein offener Standard, der entwickelt wurde, um Modelle des maschinellen Lernens zu vereinheitlichen und auszutauschen. Er wurde 2017 von Microsoft, Meta (früher Facebook) und AWS gestartet und löst ein zentrales Problem in der Welt der KI: die fehlende Kompatibilität zwischen verschiedenen Frameworks (wie PyTorch und TensorFlow), Werkzeugen und Hardwareplattformen.
Einfach ausgedrückt ist ONNX ein universeller „Übersetzer“ für neuronale Netze, der es Entwicklern ermöglicht, Modelle frei von einer Umgebung in eine andere zu verschieben.
Analogie: Wenn ein neuronales Netz ein komplexes Dokument ist, ist ONNX das PDF-Format. Sie können ein Dokument in jedem Editor erstellen (PyTorch, TensorFlow), aber einmal als PDF gespeichert, öffnet es sich schnell und konsistent auf jedem Gerät mithilfe eines universellen Readers (ONNX Runtime).
Wie funktioniert ONNX?
ONNX stellt jedes Modell als Rechen-Graph dar. Dieser Graph besteht aus Knoten (mathematische Operationen oder Operatoren) und Kanten (Datenflüsse in Form von Tensoren). Der Standard definiert einen einheitlichen Satz von Operatoren und Datenformaten, die alle kompatiblen Werkzeuge verstehen.
Der Arbeitsablauf umfasst typischerweise zwei Hauptschritte:
- Export: Ein in einem Framework (z. B. PyTorch) trainiertes Modell wird in eine
.onnx-Datei konvertiert. - Bereitstellung (Inference): Die resultierende
.onnx-Datei wird mit einer speziellen, leistungsstarken Laufzeitumgebung ausgeführt — ONNX Runtime.
Hauptvorteile von ONNX
Framework-Kompatibilität:
Der größte Vorteil ist die Möglichkeit, Modelle frei zu verschieben. Ein Modell kann z. B. in PyTorch, ideal für Forschung, trainiert und anschließend mit ONNX Runtime bereitgestellt werden, das für schnelle Produktionsläufe optimiert ist.
Hardware-Optimierung:
Hardwarehersteller (NVIDIA, Intel, ARM) bieten optimierte Bibliotheken zur Ausführung von ONNX-Modellen. Dadurch kann maximale Leistung auf unterschiedlicher Hardware erzielt werden, ohne das Modell für jede Plattform anpassen zu müssen.
Flexibilität und Langlebigkeit:
Der Standard bindet Entwickler nicht an einen bestimmten Technologie-Stack. Wenn ein neues, effizienteres Framework erscheint, können bestehende Modelle problemlos übertragen werden.
ONNX Runtime: Die Ausführungs-Engine
ONNX Runtime ist ein zentraler Bestandteil des Ökosystems. Es handelt sich um eine leistungsstarke Laufzeitumgebung für die Ausführung von .onnx-Modellen. Entwickelt von Microsoft, Open Source, optimiert für maximale Geschwindigkeit der ONNX-Graph-Berechnungen auf jedem Gerät — vom leistungsstarken Server bis zum Mobiltelefon. Runtime unterstützt viele Sprachen (Python, C++, C#, Java) und Plattformen (Windows, Linux, Android, iOS).
Praktisches Beispiel: Von PyTorch zu ONNX Runtime
Modell aus PyTorch exportieren:
import torch
# Ihr trainiertes Modell
model = YourSuperModel()
# Beispiel-Eingabedaten zur Definition der Graph-Struktur
dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(model, dummy_input, "model.onnx")
Modell mit ONNX Runtime ausführen:
import onnxruntime as ort
import numpy as np
# Inferenz-Session erstellen
session = ort.InferenceSession("model.onnx")
# Eingabedaten vorbereiten
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)
input_name = session.get_inputs()[0].name
# Vorhersage erhalten
result = session.run(None, {input_name: input_data})
print(result)
ONNX und Hugging Face: Der Goldstandard für NLP
Für komplexe Modelle wie Transformer von Hugging Face wird der Export durch die Bibliothek Optimum vereinfacht, die als „offizielle Brücke“ automatisch alle Details der Konvertierung übernimmt.
Erforderliche Pakete installieren:
pip install transformers onnx onnxruntime optimum[onnxruntime]
Hugging Face-Modell exportieren und ausführen:
from optimum.onnxruntime import ORTModelForSequenceClassification
from transformers import AutoTokenizer, pipeline
model_id = "distilbert-base-uncased-finetuned-sst-2-english"
# Schritt 1: Modell in ONNX exportieren (einmalig)
model = ORTModelForSequenceClassification.from_pretrained(model_id, from_transformers=True)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model.save_pretrained("./onnx-model/")
tokenizer.save_pretrained("./onnx-model/")
# Schritt 2: Optimiertes ONNX-Modell ausführen
classifier = pipeline("text-classification", model="./onnx-model/")
result = classifier("ONNX und Hugging Face sind eine leistungsstarke Kombination!")
print(result) # Ausgabe: [{'label': 'POSITIVE', 'score': 0.9998...}]
Leistungsschlüssel: Optimierung und Quantisierung
ONNX Runtime führt Modelle nicht nur aus, sondern beschleunigt sie. Eine Hauptmethode ist die Quantisierung.
Einfach erklärt: Ein Prozess, der die Mathematik innerhalb des Modells „vereinfacht“. Anstelle von Hochpräzisions-Berechnungen (FP32 z. B. 3.14159) verwendet das Modell schnellere und leichtere 8-Bit-Ganzzahlen (INT8, von -128 bis 127).
Vorteile der Quantisierung:
- 🚀 Hohe Geschwindigkeit: Ganzzahl-Operationen sind viel schneller.
- 💾 Geringere Größe: Das Modell wird etwa 4-mal kleiner.
- 🔋 Energieeffizienz: Reduzierter Energieverbrauch, entscheidend für mobile und Edge-Geräte.
Wo wird ONNX eingesetzt?
ONNX ist zum Industriestandard geworden und wird breit angewendet:
- Cloud-Dienste: Azure ML, AWS SageMaker, Google Cloud AI.
- Desktop- und Mobile-Anwendungen: ONNX Runtime läuft auf Windows, Linux, macOS, Android und iOS.
- Edge-Geräte: Effiziente Ausführung von KI-Modellen auf Geräten mit begrenzten Ressourcen (Kameras, Drohnen, Industriesensoren).
Einschränkungen
Trotz aller Vorteile gibt es Einschränkungen. Die Konvertierung sehr komplexer oder neuer Architekturen kann problematisch sein, wenn ein spezieller Operator noch kein ONNX-Äquivalent hat. Die Community arbeitet aktiv an der Erweiterung der Unterstützung.
Nützliche Links
- Offizielle Website: https://onnx.ai
- GitHub-Repository: https://github.com/onnx/onnx
- ONNX Runtime: https://onnxruntime.ai
- Hugging Face Optimum: https://github.com/huggingface/optimum
Was ist ONNX (Open Neural Network Exchange)?
ONNX (Open Neural Network Exchange) ist ein offener Standard, der entwickelt wurde, um Modelle des maschinellen Lernens zu vereinheitlichen und auszutauschen. Er wurde 2017 von Microsoft, Meta (früher Facebook) und AWS gestartet und löst ein zentrales Problem in der Welt der KI: die fehlende Kompatibilität zwischen verschiedenen Frameworks (wie PyTorch und TensorFlow), Werkzeugen und Hardwareplattformen.
Einfach ausgedrückt ist ONNX ein universeller „Übersetzer“ für neuronale Netze, der es Entwicklern ermöglicht, Modelle frei von einer Umgebung in eine andere zu verschieben.
Analogie: Wenn ein neuronales Netz ein komplexes Dokument ist, ist ONNX das PDF-Format. Sie können ein Dokument in jedem Editor erstellen (PyTorch, TensorFlow), aber einmal als PDF gespeichert, öffnet es sich schnell und konsistent auf jedem Gerät mithilfe eines universellen Readers (ONNX Runtime).
Wie funktioniert ONNX?
ONNX stellt jedes Modell als Rechen-Graph dar. Dieser Graph besteht aus Knoten (mathematische Operationen oder Operatoren) und Kanten (Datenflüsse in Form von Tensoren). Der Standard definiert einen einheitlichen Satz von Operatoren und Datenformaten, die alle kompatiblen Werkzeuge verstehen.
Der Arbeitsablauf umfasst typischerweise zwei Hauptschritte:
- Export: Ein in einem Framework (z. B. PyTorch) trainiertes Modell wird in eine
.onnx-Datei konvertiert. - Bereitstellung (Inference): Die resultierende
.onnx-Datei wird mit einer speziellen, leistungsstarken Laufzeitumgebung ausgeführt — ONNX Runtime.
Hauptvorteile von ONNX
Framework-Kompatibilität:
Der größte Vorteil ist die Möglichkeit, Modelle frei zu verschieben. Ein Modell kann z. B. in PyTorch, ideal für Forschung, trainiert und anschließend mit ONNX Runtime bereitgestellt werden, das für schnelle Produktionsläufe optimiert ist.
Hardware-Optimierung:
Hardwarehersteller (NVIDIA, Intel, ARM) bieten optimierte Bibliotheken zur Ausführung von ONNX-Modellen. Dadurch kann maximale Leistung auf unterschiedlicher Hardware erzielt werden, ohne das Modell für jede Plattform anpassen zu müssen.
Flexibilität und Langlebigkeit:
Der Standard bindet Entwickler nicht an einen bestimmten Technologie-Stack. Wenn ein neues, effizienteres Framework erscheint, können bestehende Modelle problemlos übertragen werden.
ONNX Runtime: Die Ausführungs-Engine
ONNX Runtime ist ein zentraler Bestandteil des Ökosystems. Es handelt sich um eine leistungsstarke Laufzeitumgebung für die Ausführung von .onnx-Modellen. Entwickelt von Microsoft, Open Source, optimiert für maximale Geschwindigkeit der ONNX-Graph-Berechnungen auf jedem Gerät — vom leistungsstarken Server bis zum Mobiltelefon. Runtime unterstützt viele Sprachen (Python, C++, C#, Java) und Plattformen (Windows, Linux, Android, iOS).
Praktisches Beispiel: Von PyTorch zu ONNX Runtime
Modell aus PyTorch exportieren:
import torch
# Ihr trainiertes Modell
model = YourSuperModel()
# Beispiel-Eingabedaten zur Definition der Graph-Struktur
dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(model, dummy_input, "model.onnx")
Modell mit ONNX Runtime ausführen:
import onnxruntime as ort
import numpy as np
# Inferenz-Session erstellen
session = ort.InferenceSession("model.onnx")
# Eingabedaten vorbereiten
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)
input_name = session.get_inputs()[0].name
# Vorhersage erhalten
result = session.run(None, {input_name: input_data})
print(result)
ONNX und Hugging Face: Der Goldstandard für NLP
Für komplexe Modelle wie Transformer von Hugging Face wird der Export durch die Bibliothek Optimum vereinfacht, die als „offizielle Brücke“ automatisch alle Details der Konvertierung übernimmt.
Erforderliche Pakete installieren:
pip install transformers onnx onnxruntime optimum[onnxruntime]
Hugging Face-Modell exportieren und ausführen:
from optimum.onnxruntime import ORTModelForSequenceClassification
from transformers import AutoTokenizer, pipeline
model_id = "distilbert-base-uncased-finetuned-sst-2-english"
# Schritt 1: Modell in ONNX exportieren (einmalig)
model = ORTModelForSequenceClassification.from_pretrained(model_id, from_transformers=True)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model.save_pretrained("./onnx-model/")
tokenizer.save_pretrained("./onnx-model/")
# Schritt 2: Optimiertes ONNX-Modell ausführen
classifier = pipeline("text-classification", model="./onnx-model/")
result = classifier("ONNX und Hugging Face sind eine leistungsstarke Kombination!")
print(result) # Ausgabe: [{'label': 'POSITIVE', 'score': 0.9998...}]
Leistungsschlüssel: Optimierung und Quantisierung
ONNX Runtime führt Modelle nicht nur aus, sondern beschleunigt sie. Eine Hauptmethode ist die Quantisierung.
Einfach erklärt: Ein Prozess, der die Mathematik innerhalb des Modells „vereinfacht“. Anstelle von Hochpräzisions-Berechnungen (FP32 z. B. 3.14159) verwendet das Modell schnellere und leichtere 8-Bit-Ganzzahlen (INT8, von -128 bis 127).
Vorteile der Quantisierung:
- 🚀 Hohe Geschwindigkeit: Ganzzahl-Operationen sind viel schneller.
- 💾 Geringere Größe: Das Modell wird etwa 4-mal kleiner.
- 🔋 Energieeffizienz: Reduzierter Energieverbrauch, entscheidend für mobile und Edge-Geräte.
Wo wird ONNX eingesetzt?
ONNX ist zum Industriestandard geworden und wird breit angewendet:
- Cloud-Dienste: Azure ML, AWS SageMaker, Google Cloud AI.
- Desktop- und Mobile-Anwendungen: ONNX Runtime läuft auf Windows, Linux, macOS, Android und iOS.
- Edge-Geräte: Effiziente Ausführung von KI-Modellen auf Geräten mit begrenzten Ressourcen (Kameras, Drohnen, Industriesensoren).
Einschränkungen
Trotz aller Vorteile gibt es Einschränkungen. Die Konvertierung sehr komplexer oder neuer Architekturen kann problematisch sein, wenn ein spezieller Operator noch kein ONNX-Äquivalent hat. Die Community arbeitet aktiv an der Erweiterung der Unterstützung.
Nützliche Links
- Offizielle Website: https://onnx.ai
- GitHub-Repository: https://github.com/onnx/onnx
- ONNX Runtime: https://onnxruntime.ai
- Hugging Face Optimum: https://github.com/huggingface/optimum