TF Lite Interpreter је кључна компонента TensorFlow Lite-а, одговорна за извршавање модела у .tflite формату на мобилним и уграђеним уређајима. Interpreter учитава FlatBuffers репрезентацију модела, алокира тензоре за улазне и излазне податке, извршава граф прорачуна и враћа резултат. Према TensorFlow Lite API Reference, 2025, Interpreter је доступан на Java и C++ за Android, Swift и Objective-C за iOS, као и преко Python веза за тестирање. TF Lite Interpreter подржава делегате за хардверско убрзање преко GPU, NNAPI и Core ML.
Главно
TF Lite Interpreter је минималистичко окружење за извршавање које покреће модел машинског учења на уређају без серверске инфраструктуре. Interpreter не подржава обуку — само инференцију. То га чини лаганим: бинарна величина основног интерпретера на Android-у износи око 300 KB.
Interpreter ради са моделом у .tflite формату, заснованом на FlatBuffers. Приликом креирања, Interpreter учитава модел у меморију преко mmap-а, што обезбеђује директан приступ подацима без копирања. Затим Interpreter алокира тензоре на основу описа из модела и спреман је за извршење.
Свака инстанца Interpreter-а није безбедна за нити. За паралелно извршавање једног модела у више нити, креирајте засебне инстанце Interpreter-а са копијама модела. За секвенцијалне позиве у једној нити, инстанца Interpreter-а се може поново користити.
На Android-у, Interpreter је доступан преко Java API у пакету org.tensorflow.lite.Interpreter. Главни метод — run(Object input, Object output) — прихвата вишедимензионалне низове или ByteBuffer. За финије управљање користите методе runForMultipleInputsOutputs() и resizeInput().
На iOS-у, Interpreter је доступан преко Swift API у модулу TensorFlowLite. Основни интерфејс је аналоган Android-у: иницијализација преко Interpreter.init(modelPath:), алокација тензора преко allocateTensors(), извршење преко invoke(). Swift API подржава Data и MLMultiTensor као типове улазних података.
| Платформа | Језик | Класа | Метод инференције |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (изворни) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
Делегати су компоненте које пребацују извршавање операција на специјализовани хардвер. GPU Delegate користи OpenGL ES (Android) и Metal (iOS) за убрзање графичких операција. NNAPI Delegate пребацује извршење на NPU, DSP или GPU преко Android Neural Networks API-ја.
Core ML Delegate је доступан на iOS-у и преводи TFLite операције у Core ML формат. Према Apple ML Benchmarking-у, коришћење Core ML Delegate-а на iPhone 15 Pro убрзава инференцију до 4x у поређењу са CPU. Делегат подржава FP32 и FP16 операције.
XNNPACK Delegate је универзално решење за ARM CPU, оптимизовано за мобилне процесоре. Не захтева посебан хардвер и подржава INT8, FP16 и FP32. Препоручује се као основни делегат који се активира на свим уређајима.
Interpreter управља тензорима преко меморијског pool-а који се алокира приликом позива allocateTensors(). Величина pool-а се одређује на основу описа модела у .tflite датотеци. Након алокације, интерпретер не додељује додатну меморију током инференције.
За моделе са динамичким величинама улаза користите resizeInput(). Овај метод прераспоређује меморију за улазне тензоре узимајући у обзир нову величину. Након промене величине улазног тензора, може бити потребна поновна алокација преко allocateTensors().
При раду са више модела важно је ослобађати ресурсе преко close(). Неослобођени Interpreter-и могу довести до цурења меморије, посебно на уређајима са ограниченим RAM-ом. За iOS користите аутоматско бројање референци ARC, за Android — try-with-resources или експлицитни позив close().
Најчешће грешке при раду са Interpreter-ом — неподударање димензија тензора. Ако улазни подаци не одговарају очекиваном облику, Interpreter баца IllegalArgumentException на Android-у или runtime грешку на iOS-у. Проверавајте димензије преко inputTensorAt() и outputTensorAt().
Други чест проблем — неподржани оператори при коришћењу делегата. Ако делегат не подржава оператор, Interpreter аутоматски прелази на CPU за тај оператор. За откривање таквих ситуација укључите логирање преко setCancelled() или проверавајте TFLite логије.
TFLite пружа Benchmark Tool за профилисање: мерење времена сваког оператора, потрошња меморије, поређење делегата. Benchmark Tool је доступан у саставу TFLite Support Library и може се покренути директно на уређају.
Пример извршавања модела на Android-у са Java API коришћењем GPU Delegate-а. Interpreter се креира са опцијама које укључују GPU делегата. Након извршења инференције, резултат се чита из излазног тензора:
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", "Врхунска класа: " + bestClass);
gpu.close();
interpreter.close();
Пример извршавања на Python-у за тестирање пре имплементације. Python API TFLite омогућава учитавање .tflite, извршавање инференције и приказ резултата. Користи се за отклањање грешака и проверу тачности модела:
import tensorflow as tf
import numpy as np
# Учитај TFLite модел из датотеке
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# Добиј детаље улазних и излазних тензора
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Припреми насумичне улазне податке за тестирање
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("Облик излаза:", output_data.shape)
Често постављана питања
Основни Interpreter за Android заузима око 300 KB. Додатна меморија се додељује за тензоре модела и зависи од величине улазних података, броја оператора и начина квантизације.
Једна инстанца Interpreter-а није безбедна за нити. За паралелно извршавање креирајте више инстанци са одвојеним копијама модела. Свака инстанца користи сопствену меморију за тензоре.
Користите TFLite Support Library — класу DelegatesApi. Позовите DelegatesApi.getAvailableDelegates() да бисте добили листу доступних делегата на одређеном уређају.
Проверите интегритет .tflite датотеке преко tf.lite.experimental.Analyzer. Уверите се да је модел конвертован за исправну верзију TFLite-а и да подржава операције доступне на циљном уређају.
Користите метод resizeInput(int idx, int[] dims) у Java API-ју или resizeInput(at:to:) у Swift-у. Након промене величине, позовите allocateTensors() за прерасподелу меморије.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође