TF Lite Interpreter ist eine Schlüsselkomponente von TensorFlow Lite, die für die Ausführung von .tflite-Modellen auf mobilen und eingebetteten Geräten verantwortlich ist. Der Interpreter lädt die FlatBuffers-Darstellung des Modells, weist Tensoren für Eingabe- und Ausgabedaten zu, führt den Berechnungsgraphen aus und gibt das Ergebnis zurück. Laut der TensorFlow Lite API-Referenz, 2025 ist der Interpreter für Android in Java und C++, für iOS in Swift und Objective-C sowie über Python-Bindings für Tests verfügbar. TF Lite Interpreter unterstützt Delegaten für Hardwarebeschleunigung über GPU, NNAPI und Core ML.
Wichtige Erkenntnisse
TF Lite Interpreter ist eine minimalistische Laufzeitumgebung, die ein maschinelles Lernmodell auf dem Gerät ohne Serverinfrastruktur ausführt. Der Interpreter unterstützt kein Training — nur Inferenz. Dadurch ist er leichtgewichtig: Die Binärgröße des Basisinterpreters auf Android beträgt etwa 300 KB.
Der Interpreter arbeitet mit Modellen im .tflite-Format, das auf FlatBuffers basiert. Bei der Erstellung lädt der Interpreter das Modell über mmap in den Speicher und ermöglicht so direkten Datenzugriff ohne Kopieren. Anschließend weist der Interpreter Tensoren basierend auf der Modellbeschreibung zu und ist bereit zur Ausführung.
Jede Interpreter-Instanz ist nicht threadsicher. Um dasselbe Modell parallel in mehreren Threads auszuführen, erstellen Sie separate Interpreter-Instanzen mit Kopien des Modells. Für sequenzielle Aufrufe in einem einzelnen Thread kann eine Interpreter-Instanz wiederverwendet werden.
Unter Android ist der Interpreter über die Java-API im Paket org.tensorflow.lite.Interpreter verfügbar. Die Hauptmethode ist run(Object input, Object output), die mehrdimensionale Arrays oder ByteBuffer akzeptiert. Für feinere Steuerung verwenden Sie die Methoden runForMultipleInputsOutputs() und resizeInput().
Unter iOS ist der Interpreter über die Swift-API im Modul TensorFlowLite verfügbar. Die grundlegende Schnittstelle ähnelt Android: Initialisierung über Interpreter.init(modelPath:), Tensorzuweisung über allocateTensors(), Ausführung über invoke(). Die Swift-API unterstützt Data und MLMultiTensor als Eingabedatentypen.
| Plattform | Sprache | Klasse | Inferenzmethode |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (nativ) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
Delegaten sind Komponenten, die die Ausführung von Operationen auf spezialisierte Hardware verlagern. Der GPU-Delegat verwendet OpenGL ES (Android) und Metal (iOS) zur Beschleunigung von Grafikoperationen. Der NNAPI-Delegat verlagert die Ausführung über die Android Neural Networks API auf NPU, DSP oder GPU.
Core ML Delegat ist unter iOS verfügbar und übersetzt TFLite-Operationen in das Core ML-Format. Laut Apple ML Benchmarking beschleunigt die Verwendung des Core ML Delegaten auf dem iPhone 15 Pro die Inferenz um bis zu 4x im Vergleich zur CPU. Der Delegat unterstützt FP32- und FP16-Operationen.
XNNPACK-Delegat ist eine universelle Lösung für ARM-CPUs, optimiert für mobile Prozessoren. Er benötigt keine spezielle Hardware und unterstützt INT8, FP16 und FP32. Er wird als Basisdelegat empfohlen, der auf allen Geräten aktiviert wird.
Der Interpreter verwaltet Tensoren über einen Speicherpool, der beim Aufruf von allocateTensors() zugewiesen wird. Die Poolgröße wird basierend auf der Modellbeschreibung in der .tflite-Datei bestimmt. Nach der Zuweisung weist der Interpreter während der Inferenz keinen zusätzlichen Speicher zu.
Für Modelle mit dynamischen Eingabegrößen verwenden Sie resizeInput(). Diese Methode weist den Speicher für Eingabetensoren entsprechend der neuen Größe neu zu. Nach der Größenänderung eines Eingabetensors kann eine Neuzuweisung über allocateTensors() erforderlich sein.
Bei der Arbeit mit mehreren Modellen ist es wichtig, Ressourcen über close() freizugeben. Nicht freigegebene Interpreter können zu Speicherlecks führen, insbesondere auf Geräten mit begrenztem RAM. Verwenden Sie für iOS die automatische Referenzzählung ARC, für Android try-with-resources oder einen expliziten close()-Aufruf.
Die häufigsten Fehler bei der Arbeit mit dem Interpreter sind Tensor-Dimensionskonflikte. Wenn die Eingabedaten nicht der erwarteten Form entsprechen, wirft der Interpreter unter Android IllegalArgumentException oder unter iOS einen Laufzeitfehler. Überprüfen Sie die Dimensionen über inputTensorAt() und outputTensorAt().
Das zweithäufigste Problem sind nicht unterstützte Operatoren bei Verwendung eines Delegaten. Wenn ein Delegat einen Operator nicht unterstützt, fällt der Interpreter automatisch auf die CPU für diesen Operator zurück. Aktivieren Sie zur Identifizierung solcher Situationen die Protokollierung über setCancelled() oder überprüfen Sie die TFLite-Protokolle.
TFLite bietet ein Benchmark-Tool zur Profilerstellung: Messung der Ausführungszeit jedes Operators, Speicherverbrauch, Delegatenvergleich. Das Benchmark-Tool ist als Teil der TFLite Support Library verfügbar und kann direkt auf dem Gerät ausgeführt werden.
Beispiel für die Ausführung eines Modells auf Android mit der Java-API unter Verwendung des GPU-Delegaten. Der Interpreter wird mit Optionen erstellt, die den GPU-Delegaten einschließen. Nach der Inferenz wird das Ergebnis aus dem Ausgabetensor gelesen:
import org.tensorflow.lite.Interpreter;
import org.tensorflow.lite.gpu.GpuDelegate;
import java.nio.MappedByteBuffer;
MappedByteBuffer model = loadModelFile(context);
GpuDelegate gpu = new GpuDelegate();
Interpreter.Options opts = new Interpreter.Options().addDelegate(gpu);
Interpreter interpreter = new Interpreter.create(model, opts);
float[][] input = preprocessImage(bitmap);
float[][] output = new float[1][1000];
interpreter.run(input, output);
int bestClass = argmax(output[0]);
Log.d("TFLite", "Top-Klasse: " + bestClass);
gpu.close();
interpreter.close();
Beispiel für die Ausführung in Python zum Testen vor der Bereitstellung. Die TFLite Python-API ermöglicht das Laden von .tflite, die Durchführung der Inferenz und die Ausgabe des Ergebnisses. Wird zum Debuggen und zur Überprüfung der Modellgenauigkeit verwendet:
import tensorflow as tf
import numpy as np
# TFLite-Modell aus Datei laden
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# Details zu Eingabe- und Ausgabetensoren abrufen
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Zufällige Eingabedaten für Tests vorbereiten
input_data = np.random.randn(
*input_details[0]["shape"]
).astype(np.float32)
interpreter.set_tensor(input_details[0]["index"], input_data)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]["index"])
print("Ausgabeform:", output_data.shape)
Häufig gestellte Fragen
Der Basisinterpreter für Android belegt etwa 300 KB. Zusätzlicher Speicher wird für Modelltensoren zugewiesen und hängt von der Eingabedatengröße, der Anzahl der Operatoren und dem Quantisierungsmodus ab.
Eine einzelne Interpreter-Instanz ist nicht threadsicher. Für die parallele Ausführung erstellen Sie mehrere Instanzen mit separaten Modellkopien. Jede Instanz verwendet ihren eigenen Speicher für Tensoren.
Verwenden Sie die TFLite Support Library — die Klasse DelegatesApi. Rufen Sie DelegatesApi.getAvailableDelegates() auf, um die Liste der verfügbaren Delegaten auf einem bestimmten Gerät zu erhalten.
Überprüfen Sie die Integrität der .tflite-Datei mit tf.lite.experimental.Analyzer. Stellen Sie sicher, dass das Modell für die richtige TFLite-Version konvertiert wurde und die auf dem Zielgerät verfügbaren Operationen unterstützt.
Verwenden Sie die Methode resizeInput(int idx, int[] dims) in der Java-API oder resizeInput(at:to:) in Swift. Rufen Sie nach der Größenänderung allocateTensors() auf, um den Speicher neu zuzuweisen.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch