Inference Engine
Eine Inferenz-Engine führt trainierte Modelle auf Zielhardware aus und nutzt dafür fusionierte Schichten, geringere Genauigkeit und optimierte Kernel. So funktioniert sie, und das sind die gängigen Engines.
Eine Inferenz-Engine ist eine Software, die ein trainiertes neuronales Netz ausführt, um Vorhersagen für neue Daten zu erstellen. Sie übernimmt ein exportiertes Modell aus einem Trainingsframework, üblicherweise als Berechnungsgraph wie eine ONNX-Datei, optimiert diesen Graphen für einen bestimmten Prozessor und führt ihn mit möglichst geringer Inferenzlatenz und möglichst wenig Arbeitsspeicher aus. Es gibt Engines für jede Hardwareklasse, von GPU-Systemen in Rechenzentren bis hin zu Smartphones und Mikrocontrollern. Bei der Modellbereitstellung ist die Engine die Komponente, die jede Vorhersage berechnet.
Wie Inferenz-Engines Modelle beschleunigen#
Ein bereitgestelltes Modell aktualisiert seine Gewichte nie. Daher kann eine Engine alles weglassen, was das Training benötigt, etwa gespeicherte Aktivierungen für die Rückpropagierung, und den Graphen frei umschreiben. Sie berechnet alle Teile vor, die nur von Konstanten abhängen, fasst Abfolgen von Schichten wie Faltung, Normalisierung und Aktivierung zu einzelnen Kernels zusammen, damit Zwischenergebnisse im schnellen Speicher auf dem Chip bleiben, und plant die Speichernutzung so, dass Puffer wiederverwendet werden. Die numerische Genauigkeit kann durch Modellquantisierung auf FP16 oder INT8 reduziert werden; für INT8 werden die Aktivierungsbereiche anhand von Beispieldaten gemessen. Engines wie TensorRT messen dann auf dem tatsächlichen Gerät die Laufzeit mehrerer Kernel-Kandidaten für jede Schicht und behalten den schnellsten bei. Das Ergebnis ist somit an diese Hardware gebunden:
Das Falten der Batch-Normalisierung in die vorhergehende Faltung ist eine der gängigsten Umschreibungen. Bei der Inferenz skaliert und verschiebt die Normalisierung jeden Kanal nur um feste Werte. Diese Werte lassen sich daher in die Gewichte und den Bias der Faltung einrechnen. PyTorch bietet dieselbe Transformation unter fuse_conv_bn_eval an:
import torch
from torch.nn.utils.fusion import fuse_conv_bn_eval
torch.manual_seed(0)
# A trained convolution followed by batch normalization (random statistics here)
conv = torch.nn.Conv2d(16, 32, kernel_size=3, padding=1).eval()
bn = torch.nn.BatchNorm2d(32).eval()
bn.running_mean.uniform_(-1, 1)
bn.running_var.uniform_(0.5, 2.0)
# Fold the normalization's scale and shift into the convolution's weights and bias
fused = fuse_conv_bn_eval(conv, bn)
# One layer now replaces two and produces the same output
x = torch.randn(1, 16, 64, 64)
with torch.inference_mode():
diff = (bn(conv(x)) - fused(x)).abs().max().item()
print(f"Max difference after fusing: {diff:.1e}")Die Ausgabe zeigt eine maximale Abweichung von 2.1e-06, die auf Rundung bei Gleitkommazahlen zurückzuführen ist: Die einzelne zusammengefasste Schicht berechnet dieselbe Funktion wie die beiden ursprünglichen Schichten, benötigt dafür aber nur einen statt zwei Durchläufe durch den Speicher.
Gängige Inferenz-Engines#
- TensorRT: NVIDIAs Engine für Rechenzentrums-GPUs und Jetson-Module. Sie erstellt einen Ausführungsplan für ein bestimmtes GPU-Modell und eine bestimmte TensorRT-Version. Ändert sich eines von beiden, müssen die Engines neu erstellt werden.
- OpenVINO: Intels Toolkit für CPUs, integrierte und diskrete GPUs sowie NPUs.
- ONNX Runtime: Microsofts plattformübergreifende Engine für ONNX-Modelle. Sie übergibt Aufgaben an Hardware-Backends, sogenannte Ausführungsanbieter, darunter CUDA, TensorRT, OpenVINO und Core ML.
- LiteRT: Googles Laufzeitumgebung, früher TensorFlow Lite, für Android, Embedded Linux und Mikrocontroller, mit Delegaten für mobile GPUs und NPUs.
- Core ML: Apples Framework für die Ausführung auf dem Gerät, das die Arbeit auf CPU, GPU und Neural Engine verteilt.
- vLLM: Eine Open-Source-Engine für große Sprachmodelle, die Anfrageplanung und paginierten Speicher für den Attention-Cache ergänzt, damit viele Nutzer gleichzeitig bedient werden können.
Die Ultralytics YOLO API wählt die Engine anhand der geladenen Datei aus. Daher führt derselbe predict-Aufruf einen .pt-Checkpoint mit PyTorch aus, eine .onnx-Datei mit ONNX Runtime, eine .engine-Datei mit TensorRT oder einen OpenVINO-Ordner mit OpenVINO. Der Export von Ultralytics YOLO26 nach OpenVINO und das Laden des Ergebnisses wechseln die Engine, ohne dass anderer Code geändert werden muss:
from ultralytics import YOLO
# Das PyTorch-Modell in das OpenVINO-Format exportieren
model = YOLO("yolo26n.pt")
path = model.export(format="openvino") # creates 'yolo26n_openvino_model/'
# Beim Laden des exportierten Ordners werden Vorhersagen mit der OpenVINO-Engine ausgeführt
ov_model = YOLO(path)
results = ov_model("https://ultralytics.com/images/bus.jpg")
results[0].save(filename="bus_openvino.jpg")Inferenz-Engines im Vergleich zu verwandten Begriffen#
- PyTorch und andere Trainingsframeworks: Sie halten den Graphen flexibel und zeichnen Operationen für Gradienten auf, damit Modelle entworfen und trainiert werden können. Sie führen auch Inferenz aus, verursachen dabei aber mehr zusätzlichen Aufwand als eine Engine, die für ein bestimmtes Gerät entwickelt wurde.
- ONNX: Ein Dateiformat, das den Graphen und die Gewichte eines Modells beschreibt. ONNX Runtime und TensorRT sind Engines, die dieses Format einlesen.
- Modellbereitstellung: Eine oder mehrere Engines werden als Netzwerkdienst mit API, Anfragenbündelung und Versionsverwaltung eingebunden. Genau das macht NVIDIA Dynamo-Triton, ehemals Triton Inference Server, für TensorRT-, ONNX-Runtime- und PyTorch-Modelle.
- Inferenz-Engine für Expertensysteme: Die ältere Bedeutung des Begriffs aus der regelbasierten KI. Dabei wendet die Inferenz-Engine Vorwärts- oder Rückwärtsverkettung auf Wenn-dann-Regeln einer Wissensbasis an.










