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 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.
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.
| Platforma | Język | Klasa | Metoda inferencji |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (natywny) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
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.
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().
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ł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:
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:
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
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.
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.
Użyj TFLite Support Library — klasy DelegatesApi. Wywołaj DelegatesApi.getAvailableDelegates() aby uzyskać listę dostępnych delegatów na konkretnym urządzeniu.
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.
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
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.
Przeczytaj również