A TF Lite Interpreter a TensorFlow Lite kulcsfontosságú összetevője, amely a .tflite formátumú modellek végrehajtásáért felelős mobileszközökön és beágyazott eszközökön. Az Interpreter betölti a modell FlatBuffers reprezentációját, allokál tenzorokat a bemeneti és kimeneti adatokhoz, végrehajtja a számítási gráfot és visszaadja az eredményt. A TensorFlow Lite API Reference, 2025 szerint az Interpreter elérhető Java és C++ nyelven Androidhoz, Swift és Objective-C nyelven iOS-hez, valamint Python kötéseken keresztül teszteléshez. TF Lite Interpreter támogatja a delegate-okat a hardveres gyorsításhoz GPU, NNAPI és Core ML segítségével.
Főbb pontok
TF Lite Interpreter egy minimalista futásidejű környezet, amely gépi tanulási modellt futtat az eszközön szerverinfrastruktúra nélkül. Az Interpreter nem támogatja a tanítást — csak inferenciát. Ez könnyűvé teszi: az alap interpreter bináris mérete Androidon körülbelül 300 KB.
Az Interpreter a .tflite formátumú modellel dolgozik, amely a FlatBuffers-en alapul. Létrehozáskor az Interpreter mmap segítségével betölti a modellt a memóriába, ami közvetlen hozzáférést biztosít az adatokhoz másolás nélkül. Ezután az Interpreter allokálja a tenzorokat a modell leírása alapján, és készen áll a végrehajtásra.
Minden Interpreter példány nem szálbiztos. Egy modell párhuzamos végrehajtásához több szálon hozzon létre külön Interpreter példányokat a modell másolataival. Egymást követő hívásokhoz egy szálon az Interpreter példány újra felhasználható.
Androidon az Interpreter Java API segítségével érhető el az org.tensorflow.lite.Interpreter csomagban. A fő metódus — run(Object input, Object output) — többdimenziós tömböket vagy ByteBuffer-t fogad. Finomabb vezérléshez használja a runForMultipleInputsOutputs() és resizeInput() metódusokat.
iOS-en az Interpreter Swift API segítségével érhető el a TensorFlowLite modulban. Az alap interfész hasonló az Androidhoz: inicializálás Interpreter.init(modelPath:), tenzorok allokálása allocateTensors(), végrehajtás invoke(). A Swift API támogatja a Data és MLMultiTensor típusokat bemeneti adattípusokként.
| Platform | Nyelv | Osztály | Inferencia metódus |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (natív) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
A delegate-ok olyan összetevők, amelyek átviszik a műveletek végrehajtását speciális hardverre. A GPU Delegate OpenGL ES (Android) és Metal (iOS) használ a grafikus műveletek gyorsításához. Az NNAPI Delegate az Android Neural Networks API-n keresztül NPU-ra, DSP-re vagy GPU-ra viszi át a végrehajtást.
Core ML Delegate iOS-en érhető el, és a TFLite műveleteket Core ML formátumba fordítja. Az Apple ML Benchmarking szerint a Core ML Delegate használata iPhone 15 Pro-n akár 4x-re gyorsítja az inferenciát a CPU-hoz képest. A delegate támogatja az FP32 és FP16 műveleteket.
Az XNNPACK Delegate egy univerzális megoldás ARM CPU-hoz, mobilos processzorokra optimalizálva. Nem igényel speciális hardvert, és támogatja az INT8, FP16 és FP32 formátumokat. Alapértelmezett delegate-ként ajánlott, amely minden eszközön aktiválódik.
Az Interpreter a tenzorokat egy memóriakészleten keresztül kezeli, amely az allocateTensors() hívásakor allokálódik. A készlet mérete a .tflite fájlban lévő modell leírása alapján kerül meghatározásra. Az allokáció után az interpreter nem allokál további memóriát az inferencia során.
Dinamikus bemeneti méretű modellekhez használja a resizeInput()-t. Ez a metódus újraosztja a memóriát a bemeneti tenzorok számára az új méret figyelembevételével. A bemeneti tenzor méretének megváltoztatása után szükség lehet az allocateTensors()-on keresztüli újraallokációra.
Több modellel való munka során fontos az erőforrások felszabadítása a close()-on keresztül. A fel nem szabadított Interpreter-ek memóriaszivárgáshoz vezethetnek, különösen korlátozott RAM-mal rendelkező eszközökön. iOS-hez használja az automatikus referenciaszámlálást (ARC), Androidhoz a try-with-resources vagy explicit close() hívást.
A leggyakoribb hibák az Interpreterrel való munka során — a tenzorok méreteinek eltérése. Ha a bemeneti adatok nem felelnek meg a várt alaknak, az Interpreter IllegalArgumentException-t dob Androidon vagy futásidejű hibát iOS-en. Ellenőrizze a méreteket az inputTensorAt() és outputTensorAt() segítségével.
A második gyakori probléma — nem támogatott operátorok delegate használatakor. Ha a delegate nem támogat egy operátort, az Interpreter automatikusan visszatér a CPU-hoz az adott operátorhoz. Az ilyen helyzetek észleléséhez kapcsolja be a naplózást a setCancelled()-en keresztül, vagy ellenőrizze a TFLite naplókat.
A TFLite Benchmark Tool-t biztosít a profilozáshoz: az egyes operátorok idejének mérése, memóriafogyasztás, delegate-ok összehasonlítása. A Benchmark Tool a TFLite Support Library részeként érhető el, és közvetlenül az eszközön futtatható.
Példa a modell végrehajtására Androidon Java API-val GPU Delegate használatával. Az Interpreter olyan opciókkal jön létre, amelyek tartalmazzák a GPU delegate-et. Az inferencia végrehajtása után az eredmény a kimeneti tenzorból olvasható ki:
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", "Legfelső osztály: " + bestClass);
gpu.close();
interpreter.close();
Példa a végrehajtásra Pythonban a telepítés előtti teszteléshez. A TFLite Python API lehetővé teszi a .tflite betöltését, az inferencia végrehajtását és az eredmény megjelenítését. Hibakeresésre és a modell pontosságának ellenőrzésére használják:
import tensorflow as tf
import numpy as np
# Töltsd be a TFLite modellt fájlból
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# Szerezd meg a bemeneti és kimeneti tenzor részleteit
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Készíts véletlenszerű bemeneti adatokat teszteléshez
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("Kimeneti alak:", output_data.shape)
Gyakran Ismételt Kérdések
Az alap Interpreter Androidon körülbelül 300 KB helyet foglal. A további memória a modell tenzorai számára allokálódik, és függ a bemeneti adatok méretétől, az operátorok számától és a kvantálási módtól.
Egyetlen Interpreter példány nem szálbiztos. Párhuzamos végrehajtáshoz hozzon létre több példányt a modell külön másolataival. Minden példány saját memóriát használ a tenzorok számára.
Használja a TFLite Support Library — DelegatesApi osztályát. Hívja meg a DelegatesApi.getAvailableDelegates() metódust, hogy megkapja az adott eszközön elérhető delegate-ok listáját.
Ellenőrizze a .tflite fájl integritását a tf.lite.experimental.Analyzer segítségével. Győződjön meg arról, hogy a modell a megfelelő TFLite verzióhoz lett konvertálva, és támogatja a cél-eszközön elérhető műveleteket.
Használja a resizeInput(int idx, int[] dims) metódust a Java API-ban vagy a resizeInput(at:to:) metódust Swift-ben. A méret megváltoztatása után hívja meg az allocateTensors()-t a memória újraosztásához.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is