TF Lite Interpreter — concetti chiave, interfaccia e inferenza dei modelli

Autore: IT Sectr Pubblicato: 2026-07-18 Tempo di lettura: 6 min

TF Lite Interpreter è un componente chiave di TensorFlow Lite responsabile dell'esecuzione di modelli .tflite su dispositivi mobili e embedded. L'interprete carica la rappresentazione FlatBuffers del modello, alloca i tensori per i dati di input e output, esegue il grafo di calcolo e restituisce il risultato. Secondo il Riferimento API TensorFlow Lite, 2025, l'interprete è disponibile in Java e C++ per Android, Swift e Objective-C per iOS, e tramite binding Python per i test. TF Lite Interpreter supporta i delegati per l'accelerazione hardware tramite GPU, NNAPI e Core ML.

Punti chiave

  • TF Lite Interpreter — un runtime per eseguire modelli .tflite su dispositivi mobili e embedded.
  • L'interprete carica il modello, alloca i tensori ed esegue il grafo di calcolo operatore per operatore.
  • L'API è disponibile in Java, C++, Swift, Objective-C e Python per diverse piattaforme.
  • I delegati GPU, NNAPI e Core ML accelerano l'inferenza fino a 5x rispetto alla CPU.
  • Più interpreti consentono di eseguire più modelli in parallelo in una singola applicazione.

Concetti chiave di TF Lite Interpreter

TF Lite Interpreter è un runtime minimalista che esegue un modello di machine learning sul dispositivo senza infrastruttura server. L'interprete non supporta l'addestramento — solo l'inferenza. Questo lo rende leggero: la dimensione binaria dell'interprete base su Android è di circa 300 KB.

L'interprete lavora con modelli in formato .tflite, basato su FlatBuffers. Alla creazione, l'interprete carica il modello in memoria tramite mmap, fornendo accesso diretto ai dati senza copia. Quindi l'interprete alloca i tensori in base alla descrizione del modello ed è pronto per l'esecuzione.

Ogni istanza dell'interprete non è thread-safe. Per eseguire lo stesso modello in parallelo su più thread, creare istanze separate dell'interprete con copie del modello. Per chiamate sequenziali in un singolo thread, un'istanza dell'interprete può essere riutilizzata.

API dell'interprete su Android e iOS

Su Android, l'interprete è disponibile tramite l'API Java nel pacchetto org.tensorflow.lite.Interpreter. Il metodo principale è run(Object input, Object output), che accetta array multidimensionali o ByteBuffer. Per un controllo più preciso, utilizzare i metodi runForMultipleInputsOutputs() e resizeInput().

Su iOS, l'interprete è disponibile tramite l'API Swift nel modulo TensorFlowLite. L'interfaccia di base è simile ad Android: inizializzazione tramite Interpreter.init(modelPath:), allocazione dei tensori tramite allocateTensors(), esecuzione tramite invoke(). L'API Swift supporta Data e MLMultiTensor come tipi di dati di input.

Confronto API per piattaforma

PiattaformaLinguaggioClasseMetodo di inferenza
AndroidJava / KotlinInterpreterrun(), runForMultipleInputsOutputs()
Android (nativo)C++InterpreterInvoke()
iOSSwift / Obj-CInterpreterinvoke()
Linux / PythonPythonInterpreterget_tensor(), invoke()

Configurazione dei delegati per l'accelerazione hardware

I delegati sono componenti che trasferiscono l'esecuzione delle operazioni a hardware specializzato. Il GPU Delegate utilizza OpenGL ES (Android) e Metal (iOS) per accelerare le operazioni grafiche. Il NNAPI Delegate trasferisce l'esecuzione a NPU, DSP o GPU tramite l'API Android Neural Networks.

Core ML Delegate è disponibile su iOS e traduce le operazioni TFLite nel formato Core ML. Secondo Apple ML Benchmarking, l'utilizzo di Core ML Delegate su iPhone 15 Pro accelera l'inferenza fino a 4x rispetto alla CPU. Il delegato supporta operazioni FP32 e FP16.

XNNPACK Delegate è una soluzione universale per CPU ARM, ottimizzata per processori mobili. Non richiede hardware speciale e supporta INT8, FP16 e FP32. È raccomandato come delegato di base che si attiva su tutti i dispositivi.

Gestione della memoria e dei tensori

L'interprete gestisce i tensori tramite un pool di memoria allocato quando si chiama allocateTensors(). La dimensione del pool è determinata in base alla descrizione del modello nel file .tflite. Dopo l'allocazione, l'interprete non alloca memoria aggiuntiva durante l'inferenza.

Per i modelli con dimensioni di input dinamiche, utilizzare resizeInput(). Questo metodo rialloca la memoria per i tensori di input in base alla nuova dimensione. Dopo il ridimensionamento di un tensore di input, potrebbe essere necessaria una riallocazione tramite allocateTensors().

Quando si lavora con più modelli, è importante liberare le risorse tramite close(). Le istanze dell'interprete non rilasciate possono causare perdite di memoria, specialmente su dispositivi con RAM limitata. Per iOS, utilizzare il conteggio automatico dei riferimenti ARC; per Android, utilizzare try-with-resources o una chiamata esplicita a close().

Gestione degli errori e debug

Gli errori più comuni quando si lavora con l'interprete sono disallineamenti delle dimensioni dei tensori. Se i dati di input non corrispondono alla forma prevista, l'interprete lancia IllegalArgumentException su Android o un errore di runtime su iOS. Verificare le dimensioni tramite inputTensorAt() e outputTensorAt().

Il secondo problema comune sono gli operatori non supportati quando si utilizza un delegato. Se un delegato non supporta un operatore, l'interprete torna automaticamente alla CPU per quell'operatore. Per identificare tali situazioni, abilitare la registrazione tramite setCancelled() o controllare i log TFLite.

TFLite fornisce un strumento di benchmark per la profilazione: misurazione del tempo di esecuzione di ogni operatore, consumo di memoria, confronto dei delegati. Lo strumento di benchmark è disponibile come parte della libreria di supporto TFLite e può essere eseguito direttamente sul dispositivo.

Esempi di inferenza tramite interprete

Esempio di esecuzione di un modello su Android con API Java utilizzando GPU Delegate. L'interprete viene creato con opzioni che includono il delegato GPU. Dopo l'inferenza, il risultato viene letto dal tensore di output:

java
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", "Classe principale: " + bestClass);

gpu.close();
interpreter.close();

Esempio di esecuzione in Python per i test prima del deployment. L'API Python TFLite consente di caricare .tflite, eseguire l'inferenza e produrre il risultato. Utilizzato per il debug e la verifica dell'accuratezza del modello:

python
import tensorflow as tf
import numpy as np

# Caricare il modello TFLite da file
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()

# Ottenere dettagli dei tensori di input e output
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# Preparare dati di input casuali per il test
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 di output:", output_data.shape)

Domande frequenti

Quanta memoria consuma TF Lite Interpreter?

L'interprete base per Android occupa circa 300 KB. La memoria aggiuntiva viene allocata per i tensori del modello e dipende dalla dimensione dei dati di input, dal numero di operatori e dalla modalità di quantizzazione.

Si può usare l'interprete in più thread?

Una singola istanza dell'interprete non è thread-safe. Per l'esecuzione parallela, creare più istanze con copie separate del modello. Ogni istanza utilizza la propria memoria per i tensori.

Come verificare quali delegati sono disponibili sul dispositivo?

Utilizzare la TFLite Support Library — la classe DelegatesApi. Chiamare DelegatesApi.getAvailableDelegates() per ottenere l'elenco dei delegati disponibili su un dispositivo specifico.

Cosa fare se l'interprete lancia un errore durante il caricamento del modello?

Verificare l'integrità del file .tflite tramite tf.lite.experimental.Analyzer. Assicurarsi che il modello sia convertito per la versione corretta di TFLite e supporti le operazioni disponibili sul dispositivo di destinazione.

Come modificare la dimensione del tensore di input dopo aver creato l'interprete?

Utilizzare il metodo resizeInput(int idx, int[] dims) nell'API Java o resizeInput(at:to:) in Swift. Dopo aver modificato la dimensione, chiamare allocateTensors() per riallocare la memoria.

Riepilogo

  • TF Lite Interpreter — un runtime minimalista per eseguire modelli .tflite su dispositivi mobili.
  • L'interprete carica il modello tramite mmap, alloca i tensori ed esegue il grafo di calcolo.
  • L'API è disponibile in Java, C++, Swift, Objective-C e Python con interfaccia unificata.
  • I delegati GPU, NNAPI e Core ML accelerano l'inferenza fino a 5x rispetto alla CPU.
  • Utilizzare resizeInput() per modelli con dimensioni dei dati di input dinamiche.
  • Chiudere l'interprete tramite close() per prevenire perdite di memoria.
  • Benchmark Tool aiuta a profilare le prestazioni sui dispositivi reali.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche