TF Lite Interpreter — кључни појмови, интерфејс и покретање модела

Аутор: IT Sectr Објављено: 2026-07-18 Време читања: 6 мин

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 — окружење за извршавање .tflite модела на мобилним и уграђеним уређајима.
  • Interpreter учитава модел, алокира тензоре и извршава граф прорачуна оператор по оператор.
  • API је доступан на Java, C++, Swift, Objective-C и Python за различите платформе.
  • Делегати GPU, NNAPI и Core ML убрзавају инференцију до 5x у поређењу са CPU.
  • Вишеструки интерпретери омогућавају извршавање више модела паралелно у једној апликацији.

Кључни појмови TF Lite Interpreter

TF Lite Interpreter је минималистичко окружење за извршавање које покреће модел машинског учења на уређају без серверске инфраструктуре. Interpreter не подржава обуку — само инференцију. То га чини лаганим: бинарна величина основног интерпретера на Android-у износи око 300 KB.

Interpreter ради са моделом у .tflite формату, заснованом на FlatBuffers. Приликом креирања, Interpreter учитава модел у меморију преко mmap-а, што обезбеђује директан приступ подацима без копирања. Затим Interpreter алокира тензоре на основу описа из модела и спреман је за извршење.

Свака инстанца Interpreter-а није безбедна за нити. За паралелно извршавање једног модела у више нити, креирајте засебне инстанце Interpreter-а са копијама модела. За секвенцијалне позиве у једној нити, инстанца Interpreter-а се може поново користити.

API интерпретера на Android и iOS

На 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 као типове улазних података.

Поређење API-ја по платформама

ПлатформаЈезикКласаМетод инференције
AndroidJava / KotlinInterpreterrun(), runForMultipleInputsOutputs()
Android (изворни)C++InterpreterInvoke()
iOSSwift / Obj-CInterpreterinvoke()
Linux / PythonPythonInterpreterget_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 и може се покренути директно на уређају.

Примери инференције преко Interpreter

Пример извршавања модела на Android-у са Java API коришћењем GPU Delegate-а. Interpreter се креира са опцијама које укључују GPU делегата. Након извршења инференције, резултат се чита из излазног тензора:

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", "Врхунска класа: " + bestClass);

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

Пример извршавања на Python-у за тестирање пре имплементације. Python API TFLite омогућава учитавање .tflite, извршавање инференције и приказ резултата. Користи се за отклањање грешака и проверу тачности модела:

python
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)

Често постављана питања

Колико меморије троши TF Lite Interpreter?

Основни Interpreter за Android заузима око 300 KB. Додатна меморија се додељује за тензоре модела и зависи од величине улазних података, броја оператора и начина квантизације.

Може ли се Interpreter користити у више нити?

Једна инстанца Interpreter-а није безбедна за нити. За паралелно извршавање креирајте више инстанци са одвојеним копијама модела. Свака инстанца користи сопствену меморију за тензоре.

Како проверити који су делегати доступни на уређају?

Користите TFLite Support Library — класу DelegatesApi. Позовите DelegatesApi.getAvailableDelegates() да бисте добили листу доступних делегата на одређеном уређају.

Шта радити ако Interpreter баца грешку при учитавању модела?

Проверите интегритет .tflite датотеке преко tf.lite.experimental.Analyzer. Уверите се да је модел конвертован за исправну верзију TFLite-а и да подржава операције доступне на циљном уређају.

Како променити величину улазног тензора након креирања Interpreter-а?

Користите метод resizeInput(int idx, int[] dims) у Java API-ју или resizeInput(at:to:) у Swift-у. Након промене величине, позовите allocateTensors() за прерасподелу меморије.

Резиме

  • TF Lite Interpreter — минималистичко окружење за извршавање .tflite модела на мобилним уређајима.
  • Interpreter учитава модел преко mmap-а, алокира тензоре и извршава граф прорачуна.
  • API је доступан на Java, C++, Swift, Objective-C и Python са јединственим интерфејсом.
  • Делегати GPU, NNAPI и Core ML убрзавају инференцију до 5x у поређењу са CPU.
  • Користите resizeInput() за моделе са динамичким величинама улазних података.
  • Затварајте Interpreter преко close() да бисте спречили цурење меморије.
  • Benchmark Tool помаже у профилисању перформанси на стварном уређају.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође