Published on

KI-Modell ONNX exportieren: Inferenz beschleunigen

Authors

TL;DR

ONNX-Export beschleunigt die Inferenz von PyTorch- und TensorFlow-Modellen um den Faktor 3–5 bei gleichbleibender Genauigkeit. Ein BERT-Modell für Textklassifikation antwortet nach dem ONNX-Export in 12 ms statt 45 ms. Die Konvertierung dauert 30 Minuten pro Modell und erfordert keine Änderungen am Trainingscode. GPU-Kosten sinken um 60 %, weil ONNX-Modelle auch auf CPU schnell genug laufen.


Was ONNX ist und warum es wichtig ist

ONNX (Open Neural Network Exchange) ist ein offenes Format für KI-Modelle. Ein in PyTorch trainiertes Modell wird als ONNX-Datei exportiert und läuft dann überall: Windows, Linux, macOS, ARM, x86, GPU, CPU – ohne PyTorch installieren zu müssen.

Für den Mittelstand hat ONNX drei konkrete Vorteile:

  1. Schnellere Inferenz: ONNX Runtime optimiert das Modell automatisch (Operator Fusion, Quantisierung, Graph-Optimierung)
  2. Geringere Abhängigkeiten: Kein PyTorch/TensorFlow in Produktion nötig. ONNX Runtime ist 50 MB statt 2 GB.
  3. Plattformunabhängigkeit: Das gleiche Modell läuft auf dem GPU-Server, dem Edge-Device und dem Desktop-PC

Performance-Vergleich: PyTorch vs. ONNX

Getestet auf einem Standard-Server (8 vCPU, 32 GB RAM, keine GPU):

ModellPyTorchONNX RuntimeSpeedup
BERT-base (Textklassifikation)45 ms12 ms3,8x
ResNet-50 (Bildklassifikation)38 ms9 ms4,2x
DistilBERT (NER)22 ms6 ms3,7x
LSTM (Zeitreihenprognose)8 ms2 ms4,0x
YOLOv8-nano (Objekterkennung)85 ms22 ms3,9x

Der Speedup kommt von drei Optimierungen, die ONNX Runtime automatisch anwendet: Operator Fusion (mehrere Operationen in eine zusammenfassen), Graph-Optimierung (überflüssige Knoten entfernen) und CPU-spezifische Optimierungen (AVX-512, VNNI).

Export-Anleitung: PyTorch zu ONNX

Der Export eines PyTorch-Modells nach ONNX erfordert drei Schritte. Das Modell muss im Evaluation-Modus sein, ein Dummy-Input definiert die Eingabedimensionen, und torch.onnx.export erzeugt die ONNX-Datei.

# ONNX-Export: Checkliste
vorbereitung:
  modell_modus: "model.eval() aufrufen"
  dummy_input: "torch.randn mit korrekten Dimensionen"
  opset_version: 17  # Aktuellste stabile Version
  dynamic_axes: "Batch-Dimension dynamisch setzen"
export:
  befehl: "torch.onnx.export(model, dummy, 'model.onnx', opset_version=17)"
  dauer: "10-60 Sekunden je nach Modellgröße"
  ausgabe: "model.onnx (Datei, 50-500 MB)"
validierung:
  schritt_1: "onnx.checker.check_model('model.onnx')"
  schritt_2: "Inferenz mit ONNX Runtime auf Testdaten"
  schritt_3: "Ergebnis-Vergleich PyTorch vs. ONNX (max. 0.01% Abweichung)"
optimierung:
  quantisierung: "INT8 Quantisierung für 2x zusätzlichen Speedup"
  pruning: "Unwichtige Gewichte auf Null setzen (optional)"

Nach dem Export validieren Sie das Modell: Läuft die Inferenz fehlerfrei? Stimmen die Ergebnisse mit dem PyTorch-Original überein? Eine maximale Abweichung von 0,01 % bei Float32 ist normal und hat keinen Einfluss auf die Modellqualität.

Quantisierung: Nochmal 2x schneller

Nach dem ONNX-Export können Sie das Modell von Float32 auf INT8 quantisieren. Das halbiert die Modellgröße und verdoppelt die Inferenzgeschwindigkeit – bei typischerweise 0,5–1,5 % Genauigkeitsverlust.

Für ein BERT-Modell bedeutet das:

  • Float32 ONNX: 440 MB, 12 ms Inferenz, 91,3 % Accuracy
  • INT8 ONNX: 110 MB, 6 ms Inferenz, 90,8 % Accuracy

Der Genauigkeitsverlust von 0,5 % ist für die meisten Mittelstands-Use-Cases irrelevant. Dafür läuft das Modell auf einem €50/Monat-Server statt auf einer €500/Monat-GPU. Die Kostenplanung sollte ONNX-Optimierung von Anfang an einplanen.

GPU-Kosten senken: Von GPU zu CPU

Der größte Kostenhebel von ONNX: Viele Modelle, die in PyTorch eine GPU brauchen, laufen als ONNX-Modell schnell genug auf CPU.

Beispiel Textklassifikation: Ein Mittelständler betreibt ein BERT-Modell für Angebotsklassifikation. In PyTorch: 45 ms auf CPU (zu langsam für Echtzeit), 8 ms auf GPU. In ONNX: 12 ms auf CPU (schnell genug), GPU nicht mehr nötig.

Kosteneinsparung: GPU-Server (€500/Monat) → CPU-Server (€80/Monat) = €420/Monat = €5.040/Jahr. Bei drei Modellen: €15.120/Jahr. Mehr dazu im ROI-Rechner.

ONNX in Produktion: Deployment-Optionen

Option 1: FastAPI + ONNX Runtime. Einfachste Variante für ein einzelnes Modell. Ein Python-Script mit FastAPI und onnxruntime. Deployment als Docker-Container.

Option 2: NVIDIA Triton. Für mehrere Modelle auf einem Server. Triton lädt ONNX-Modelle nativ und bietet Dynamic Batching, Model Versioning und Monitoring.

Option 3: Edge-Deployment. ONNX-Modelle laufen auf Raspberry Pi, Jetson Nano und Smartphones. Ideal für Szenarien ohne Netzwerkverbindung. Der KI-Implementierungsguide beschreibt Edge-Szenarien im Detail.

Kompatibilität: Was sich exportieren lässt

Nicht jedes PyTorch-Modell lässt sich problemlos exportieren. Dynamische Kontrollflüsse (if-Statements basierend auf Eingabewerten) und custom Operatoren können Probleme machen.

Gut exportierbar: BERT, GPT-2, ResNet, EfficientNet, YOLOv5/v8, LSTM, GRU, Transformer-Encoder Eingeschränkt: Modelle mit dynamischen Schleifen, custom CUDA Kernels Nicht exportierbar: Modelle mit Python-Logik in der Forward-Methode

Für 90 % der Modelle im Mittelstands-Einsatz (Klassifikation, NER, Prognose, Bilderkennung) funktioniert der Export reibungslos.

Häufige Fragen

Verliere ich Genauigkeit beim ONNX-Export?

Bei Float32-Export: Nein. Die maximale Abweichung liegt bei 0,001–0,01 % durch Rundungsunterschiede. Bei INT8-Quantisierung: 0,5–1,5 % Genauigkeitsverlust, der für die meisten Use Cases irrelevant ist.

Kann ich ONNX-Modelle weiter trainieren?

Nein. ONNX ist ein reines Inferenz-Format. Das Training bleibt in PyTorch oder TensorFlow. Nach dem Training exportieren Sie die neue Version als ONNX. Der KI-Leitfaden beschreibt den ML-Lifecycle.

Unterstützt ONNX auch LLMs?

Ja, aber mit Einschränkungen. Modelle bis 1–3B Parameter (TinyLlama, Phi-2) lassen sich exportieren und beschleunigen. Größere Modelle (7B+) profitieren mehr von vLLM oder TGI als von ONNX Runtime.

Wie groß ist eine ONNX-Datei?

Ungefähr gleich groß wie das PyTorch-Modell: BERT-base ~440 MB, ResNet-50 ~100 MB, YOLOv8-nano ~6 MB. Mit INT8-Quantisierung: 25 % der Originalgröße.

Muss mein Team ONNX lernen?

Der Export ist ein einmaliger Schritt pro Modell. Data Scientists trainieren weiterhin in PyTorch. Nur der DevOps-/MLOps-Engineer muss die ONNX-Runtime-Konfiguration kennen – ein halber Tag Einarbeitung.

📖 Verwandte Artikel

Weitere interessante Beiträge zu ähnlichen Themen

Bereit für KI im Mittelstand?

Nutzen Sie unsere 10 kostenlosen KI-Tools und Praxis-Guides – oder sprechen Sie direkt mit unseren Experten.

Pexon Consulting – KI-Beratung für den Mittelstand | Scaly Academy – Geförderte KI-Weiterbildung (KI-Spezialist, KI-Experte, Workflow-Automatisierung)