EMZETT.
Login

ONNX und Modellexport: Modelle zwischen Frameworks austauschen

Kurz: ONNX ist ein offenes Austauschformat für trainierte Modelle; damit lassen sich in PyTorch oder TensorFlow trainierte Netze unabhängig vom Framework schnell und plattformübergreifend ausführen.

Genauer: Ein Modell wird oft in Python/PyTorch trainiert, soll aber in C++, Java, im Browser, auf dem Handy oder Edge-Gerät laufen. ONNX (Open Neural Network Exchange) beschreibt das Modell als Graph aus Operatoren mit Gewichten in einer Datei.

Im Detail

Export und Ausführen

import torch
modell.eval()
beispiel = torch.randn(1, 3, 224, 224)
torch.onnx.export(modell, beispiel, 'modell.onnx',
                  input_names=['bild'], output_names=['klassen'],
                  dynamic_axes={'bild': {0: 'batch'}}, opset_version=17)
import onnxruntime as ort, numpy as np
sess = ort.InferenceSession('modell.onnx', providers=['CPUExecutionProvider'])
out = sess.run(None, {'bild': np.random.randn(1,3,224,224).astype('float32')})

ONNX Runtime läuft auf CPU, GPU (CUDA, DirectML), NPU, mobil und im Browser (onnxruntime-web, WebGPU/WASM). Prüfe Ergebnisse gegen das Original (np.allclose).

Optimieren

  • Graph-Optimierung: Operatoren verschmelzen, Konstanten falten.
  • Quantisierung (INT8/FP16) für kleinere, schnellere Modelle (siehe Quantisierung).
  • Pruning/Distillation vor dem Export.
  • Batching, feste vs. dynamische Eingabeformen (dynamic_axes).
  • Hardware-Beschleuniger: TensorRT (NVIDIA), OpenVINO (Intel), Core ML (Apple), TFLite (Android/Edge), ncnn.
  • LLMs: GGUF/llama.cpp, safetensors; ONNX-GenAI.
  • Profilieren (Latenz, Speicher) auf Zielhardware.

Formate im Überblick

  • ONNX: neutral, breite Runtime-Unterstützung.
  • TorchScript/torch.export: PyTorch-intern.
  • SavedModel/TFLite: TensorFlow/Edge.
  • Core ML (.mlmodel): Apple.
  • safetensors: sichere Gewichte-Dateien (kein Code-Ausführen wie bei Pickle; Pickle-Dateien aus unbekannter Quelle sind unsicher!).
  • GGUF: Quantisierte LLMs für llama.cpp/Ollama.
  • Hugging Face Hub: Modelle teilen, Model Cards und Lizenzen lesen.

Fallstricke

  • Nicht jeder Operator wird unterstützt; dynamische Kontrollflüsse (if/Schleifen) lassen sich schwer exportieren.
  • Vor-/Nachverarbeitung (Tokenizer, Normalisierung, Skalierung) muss identisch nachgebaut werden: häufige Fehlerquelle!
  • Versionsabhängigkeit (Opset); Genauigkeitsunterschiede FP16/INT8 prüfen.
  • Lizenz des Modells und der Trainingsdaten (kommerzielle Nutzung?).
  • Sicherheit: Modelle aus unbekannter Quelle wie Software behandeln (Signaturen, Hash, safetensors).
  • Wartung: Modell-Versionierung, Monitoring (MLOps), Rollback.

Siehe auch: MLOps, Quantisierung, KI-Frameworks