TF Lite Interpreter este componenta cheie a TensorFlow Lite, responsabilă pentru executarea modelelor în format .tflite pe dispozitive mobile și încorporate. Interpreter încarcă reprezentarea FlatBuffers a modelului, alocă tensori pentru datele de intrare și ieșire, execută graful de calcul și returnează rezultatul. Conform TensorFlow Lite API Reference, 2025, Interpreter este disponibil în Java și C++ pentru Android, Swift și Objective-C pentru iOS, precum și prin legături Python pentru testare. TF Lite Interpreter suportă delegați pentru accelerarea hardware prin GPU, NNAPI și Core ML.
Principalele
TF Lite Interpreter este un runtime minimalist care execută un model de învățare automată pe dispozitiv fără infrastructură server. Interpreter nu suportă antrenarea — doar inferența. Acest lucru îl face ușor: dimensiunea binară a interpretorului de bază pe Android este de aproximativ 300 KB.
Interpreter lucrează cu modelul în format .tflite, bazat pe FlatBuffers. La creare, Interpreter încarcă modelul în memorie prin mmap, ceea ce asigură acces direct la date fără copiere. Apoi Interpreter alocă tensorii pe baza descrierii din model și este gata de execuție.
Fiecare instanță Interpreter nu este sigură pentru fire de execuție. Pentru executarea paralelă a unui model în mai multe fire, creați instanțe Interpreter separate cu copii ale modelului. Pentru apeluri secvențiale într-un singur fir, instanța Interpreter poate fi reutilizată.
Pe Android, Interpreter este disponibil prin Java API în pachetul org.tensorflow.lite.Interpreter. Metoda principală — run(Object input, Object output) — acceptă array-uri multidimensionale sau ByteBuffer. Pentru un control mai fin, utilizați metodele runForMultipleInputsOutputs() și resizeInput().
Pe iOS, Interpreter este disponibil prin Swift API în modulul TensorFlowLite. Interfața de bază este similară cu Android: inițializare prin Interpreter.init(modelPath:), alocarea tensorilor prin allocateTensors(), execuție prin invoke(). Swift API suportă Data și MLMultiTensor ca tipuri de date de intrare.
| Platformă | Limbaj | Clasă | Metodă de inferență |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (nativ) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
Delegații sunt componente care transferă executarea operațiilor către echipamente specializate. GPU Delegate utilizează OpenGL ES (Android) și Metal (iOS) pentru accelerarea operațiilor grafice. NNAPI Delegate transferă execuția către NPU, DSP sau GPU prin Android Neural Networks API.
Core ML Delegate este disponibil pe iOS și traduce operațiile TFLite în format Core ML. Conform Apple ML Benchmarking, utilizarea Core ML Delegate pe iPhone 15 Pro accelerează inferența de până la 4x comparativ cu CPU. Delegatul suportă operații FP32 și FP16.
XNNPACK Delegate este o soluție universală pentru ARM CPU, optimizată pentru procesoare mobile. Nu necesită echipament special și suportă INT8, FP16 și FP32. Este recomandat ca delegat de bază care se activează pe toate dispozitivele.
Interpreter gestionează tensorii printr-un pool de memorie care este alocat la apelul allocateTensors(). Dimensiunea pool-ului este determinată pe baza descrierii modelului din fișierul .tflite. După alocare, interpretorul nu alocă memorie suplimentară în timpul inferenței.
Pentru modelele cu dimensiuni dinamice ale intrărilor utilizați resizeInput(). Această metodă realocă memoria pentru tensorii de intrare ținând cont de noua dimensiune. După modificarea dimensiunii tensorului de intrare, poate fi necesară realocarea prin allocateTensors().
La lucrul cu mai multe modele este important să eliberați resursele prin close(). Interpretorii neliberați pot duce la scurgeri de memorie, în special pe dispozitive cu RAM limitată. Pentru iOS utilizați numărarea automată a referințelor ARC, pentru Android — try-with-resources sau apelul explicit close().
Cele mai frecvente erori la lucrul cu Interpreter — nepotrivirea dimensiunilor tensorilor. Dacă datele de intrare nu corespund formei așteptate, Interpreter aruncă IllegalArgumentException pe Android sau runtime error pe iOS. Verificați dimensiunile prin inputTensorAt() și outputTensorAt().
A doua problemă comună — operatori nesuportați la utilizarea delegatului. Dacă delegatul nu suportă un operator, Interpreter revine automat la CPU pentru acel operator. Pentru a identifica astfel de situații, activați logarea prin setCancelled() sau verificați logurile TFLite.
TFLite oferă Benchmark Tool pentru profilare: măsurarea timpului fiecărui operator, consumul de memorie, compararea delegaților. Benchmark Tool este disponibil ca parte a TFLite Support Library și poate fi rulat direct pe dispozitiv.
Exemplu de execuție a modelului pe Android cu Java API utilizând GPU Delegate. Interpreter este creat cu opțiuni care includ delegatul GPU. După executarea inferenței, rezultatul este citit din tensorul de ieșire:
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", "Clasa de top: " + bestClass);
gpu.close();
interpreter.close();
Exemplu de execuție pe Python pentru testare înainte de implementare. Python API TFLite permite încărcarea .tflite, executarea inferenței și afișarea rezultatului. Este utilizat pentru depanare și verificarea acurateții modelului:
import tensorflow as tf
import numpy as np
# Încărcați modelul TFLite din fișier
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# Obțineți detaliile tensorilor de intrare și ieșire
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Pregătiți date aleatoare de intrare pentru testare
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("Forma ieșirii:", output_data.shape)
Întrebări frecvente
Interpreterul de bază pentru Android ocupă aproximativ 300 KB. Memoria suplimentară este alocată pentru tensorii modelului și depinde de dimensiunea datelor de intrare, numărul de operatori și modul de cuantizare.
O singură instanță Interpreter nu este sigură pentru fire de execuție. Pentru executare paralelă, creați mai multe instanțe cu copii separate ale modelului. Fiecare instanță utilizează propria memorie pentru tensori.
Utilizați TFLite Support Library — clasa DelegatesApi. Apelați DelegatesApi.getAvailableDelegates() pentru a obține lista delegaților disponibili pe un anumit dispozitiv.
Verificați integritatea fișierului .tflite prin tf.lite.experimental.Analyzer. Asigurați-vă că modelul a fost convertit pentru versiunea corectă de TFLite și suportă operațiile disponibile pe dispozitivul țintă.
Utilizați metoda resizeInput(int idx, int[] dims) în Java API sau resizeInput(at:to:) în Swift. După modificarea dimensiunii, apelați allocateTensors() pentru realocarea memoriei.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și