TF Lite Interpreter — kluczowe pojęcia, interfejs i uruchamianie modeli

Autor: IT Sectr Opublikowano: 2026-07-18 Czas czytania: 6 min

TF Lite Interpreter to kluczowy komponent TensorFlow Lite odpowiedzialny za wykonywanie modeli w formacie .tflite na urządzeniach mobilnych i wbudowanych. Interpreter ładuje reprezentację modelu w FlatBuffers, alokuje tensory dla danych wejściowych i wyjściowych, wykonuje graf obliczeń i zwraca wynik. Według TensorFlow Lite API Reference, 2025, Interpreter jest dostępny w Javie i C++ dla Androida, Swift i Objective-C dla iOS, a także przez Python bindings do testowania. TF Lite Interpreter wspiera delegaty do przyspieszenia sprzętowego przez GPU, NNAPI i Core ML.

Najważniejsze

  • TF Lite Interpreter — środowisko wykonawcze do uruchamiania modeli .tflite na urządzeniach mobilnych i wbudowanych.
  • Interpreter ładuje model, alokuje tensory i wykonuje graf obliczeń operator po operatorze.
  • API dostępne w Java, C++, Swift, Objective-C i Python dla różnych platform.
  • Delegaty GPU, NNAPI i Core ML przyspieszają inferencję do 5x w porównaniu z CPU.
  • Wielokrotne interpretery pozwalają na wykonywanie wielu modeli równolegle w jednej aplikacji.

Kluczowe pojęcia TF Lite Interpreter

TF Lite Interpreter to minimalistyczne środowisko wykonawcze, które uruchamia model uczenia maszynowego na urządzeniu bez infrastruktury serwerowej. Interpreter nie wspiera uczenia — tylko inferencję. Dzięki temu jest lekki: rozmiar binarny podstawowego interpretera na Androidzie wynosi około 300 KB.

Interpreter działa z modelem w formacie .tflite, opartym na FlatBuffers. Podczas tworzenia Interpreter ładuje model do pamięci przez mmap, co zapewnia bezpośredni dostęp do danych bez kopiowania. Następnie Interpreter alokuje tensory na podstawie opisu z modelu i jest gotowy do wykonania.

Każda instancja Interpretera nie jest bezpieczna wątkowo. Do równoległego wykonywania jednego modelu w wielu wątkach utwórz osobne instancje Interpretera z kopiami modelu. Do sekwencyjnych wywołań w jednym wątku instancję Interpretera można używać wielokrotnie.

API interpretera na Android i iOS

Na Androidzie Interpreter jest dostępny przez Java API w pakiecie org.tensorflow.lite.Interpreter. Główna metoda to run(Object input, Object output), która przyjmuje wielowymiarowe tablice lub ByteBuffer. Do bardziej precyzyjnego sterowania używaj metod runForMultipleInputsOutputs() i resizeInput().

Na iOS Interpreter jest dostępny przez Swift API w module TensorFlowLite. Podstawowy interfejs jest analogiczny do Androida: inicjalizacja przez Interpreter.init(modelPath:), alokacja tensorów przez allocateTensors(), wykonanie przez invoke(). Swift API obsługuje Data i MLMultiTensor jako typy danych wejściowych.

Porównanie API według platform

PlatformaJęzykKlasaMetoda inferencji
AndroidJava / KotlinInterpreterrun(), runForMultipleInputsOutputs()
Android (natywny)C++InterpreterInvoke()
iOSSwift / Obj-CInterpreterinvoke()
Linux / PythonPythonInterpreterget_tensor(), invoke()

Konfiguracja delegatów do przyspieszenia sprzętowego

Delegaty to komponenty, które przenoszą wykonanie operacji na specjalistyczny sprzęt. GPU Delegate używa OpenGL ES (Android) i Metal (iOS) do przyspieszenia operacji graficznych. NNAPI Delegate przenosi wykonanie na NPU, DSP lub GPU przez Android Neural Networks API.

Core ML Delegate jest dostępny na iOS i tłumaczy operacje TFLite na format Core ML. Według Apple ML Benchmarking, użycie Core ML Delegate na iPhone 15 Pro przyspiesza inferencję do 4x w porównaniu z CPU. Delegat obsługuje operacje FP32 i FP16.

XNNPACK Delegate to uniwersalne rozwiązanie dla ARM CPU, zoptymalizowane dla procesorów mobilnych. Nie wymaga specjalnego sprzętu i obsługuje INT8, FP16 i FP32. Zalecany jako baseline-delegat, który aktywuje się na wszystkich urządzeniach.

Zarządzanie pamięcią i tensorami

Interpreter zarządza tensorami przez pulę pamięci, która jest alokowana przy wywołaniu allocateTensors(). Rozmiar puli jest określany na podstawie opisu modelu w pliku .tflite. Po alokacji interpreter nie przydziela dodatkowej pamięci podczas inferencji.

Dla modeli z dynamicznymi rozmiarami wejść używaj resizeInput(). Ta metoda realokuje pamięć dla tensorów wejściowych z uwzględnieniem nowego rozmiaru. Po zmianie rozmiaru tensora wejściowego może być konieczna ponowna alokacja przez allocateTensors().

Podczas pracy z wieloma modelami ważne jest zwalnianie zasobów przez close(). Niezwolnione Interpretery mogą prowadzić do wycieków pamięci, szczególnie na urządzeniach z ograniczoną pamięcią RAM. Dla iOS używaj automatycznego zliczania referencji ARC, dla Android — try-with-resources lub jawne wywołanie close().

Obsługa błędów i debugowanie

Najczęstsze błędy podczas pracy z Interpreterem to niezgodność wymiarów tensorów. Jeśli dane wejściowe nie odpowiadają oczekiwanemu kształtowi, Interpreter wyrzuca IllegalArgumentException na Androidzie lub runtime error na iOS. Sprawdzaj wymiary przez inputTensorAt() i outputTensorAt().

Drugi częsty problem to nieobsługiwane operatory przy użyciu delegata. Jeśli delegat nie obsługuje operatora, Interpreter automatycznie wraca do CPU dla tego operatora. Do wykrywania takich sytuacji włącz logowanie przez setCancelled() lub sprawdzaj logi TFLite.

TFLite udostępnia Benchmark Tool do profilowania: pomiar czasu każdego operatora, zużycie pamięci, porównanie delegatów. Benchmark Tool jest dostępny w składzie TFLite Support Library i może być uruchomiony bezpośrednio na urządzeniu.

Przykłady inferencji przez Interpreter

Przykład wykonania modelu na Androidzie z Java API z użyciem GPU Delegate. Interpreter jest tworzony z opcjami zawierającymi delegat GPU. Po wykonaniu inferencji wynik jest odczytywany z tensora wyjściowego:

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", "Główna klasa: " + bestClass);

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

Przykład wykonania na Python do testowania przed wdrożeniem. Python API TFLite pozwala załadować .tflite, wykonać inferencję i wyświetlić wynik. Służy do debugowania i sprawdzania dokładności modelu:

python
import tensorflow as tf
import numpy as np

# Załaduj model TFLite z pliku
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()

# Pobierz szczegóły tensorów wejściowych i wyjściowych
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# Przygotuj losowe dane wejściowe do testowania
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("Kształt wyjścia:", output_data.shape)

Często zadawane pytania

Ile pamięci zużywa TF Lite Interpreter?

Podstawowy Interpreter dla Androida zajmuje około 300 KB. Dodatkowa pamięć jest alokowana dla tensorów modelu i zależy od rozmiaru danych wejściowych, liczby operatorów i trybu kwantyzacji.

Czy można używać Interpretera w wielu wątkach?

Pojedyncza instancja Interpretera nie jest bezpieczna wątkowo. Do równoległego wykonywania utwórz wiele instancji z oddzielnymi kopiami modelu. Każda instancja używa własnej pamięci dla tensorów.

Jak sprawdzić, które delegaty są dostępne na urządzeniu?

Użyj TFLite Support Library — klasy DelegatesApi. Wywołaj DelegatesApi.getAvailableDelegates() aby uzyskać listę dostępnych delegatów na konkretnym urządzeniu.

Co zrobić, gdy Interpreter wyrzuca błąd przy ładowaniu modelu?

Sprawdź integralność pliku .tflite przez tf.lite.experimental.Analyzer. Upewnij się, że model został skonwertowany dla właściwej wersji TFLite i obsługuje operacje dostępne na docelowym urządzeniu.

Jak zmienić rozmiar tensora wejściowego po utworzeniu Interpretera?

Użyj metody resizeInput(int idx, int[] dims) w Java API lub resizeInput(at:to:) w Swift. Po zmianie rozmiaru wywołaj allocateTensors() do realokacji pamięci.

Podsumowanie

  • TF Lite Interpreter — minimalistyczne środowisko wykonawcze do uruchamiania modeli .tflite na urządzeniach mobilnych.
  • Interpreter ładuje model przez mmap, alokuje tensory i wykonuje graf obliczeń.
  • API dostępne w Java, C++, Swift, Objective-C i Python z jednolitym interfejsem.
  • Delegaty GPU, NNAPI i Core ML przyspieszają inferencję do 5x w porównaniu z CPU.
  • Używaj resizeInput() dla modeli z dynamicznymi rozmiarami danych wejściowych.
  • Zamykaj Interpreter przez close() aby zapobiec wyciekom pamięci.
  • Benchmark Tool pomaga profilować wydajność na rzeczywistym urządzeniu.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również