TF Lite Interpreter, TensorFlow Lite-ın mobil və yerləşdirilmiş cihazlarda .tflite formatında modelləri yerinə yetirmək üçün cavabdeh olan əsas komponentidir. Interpreter modelin FlatBuffers təsvirini yükləyir, giriş və çıxış məlumatları üçün tensorları ayırır, hesablama qrafikini icra edir və nəticəni qaytarır. TensorFlow Lite API Reference, 2025-ə əsasən, Interpreter Android üçün Java və C++, iOS üçün Swift və Objective-C, həmçinin test üçün Python bağlamaları vasitəsilə mövcuddur. TF Lite Interpreter GPU, NNAPI və Core ML vasitəsilə aparat sürətləndirməsi üçün deleqatları dəstəkləyir.
Başlıca
TF Lite Interpreter — server infrastrukturu olmadan cihazda maşın öyrənmə modelini icra edən minimalist icra mühitidir. Interpreter öyrənməni dəstəkləmir — yalnız inferensiya. Bu onu yüngül edir: Android-də əsas interpreter-in ikili ölçüsü təxminən 300 KB təşkil edir.
Interpreter FlatBuffers-ə əsaslanan .tflite formatındakı model ilə işliyir. Yaradılma zamanı Interpreter modeli mmap vasitəsilə yaddaşa yükləyir ki, bu da məlumatlara kopyalamadan birbaşa çıxışı təmin edir. Sonra Interpreter model təsvirinə əsasən tensorları ayırır və icraya hazır olur.
Hər bir Interpreter nümunəsi təhlükəsiz deyil. Bir modeli bir neçə ipdə paralel icra etmək üçün modelin surətləri ilə ayrı Interpreter nümunələri yaradın. Ardıcıl zənglər üçün Interpreter nümunəsi təkrar istifadə edilə bilər.
Android-də Interpreter Java API vasitəsilə org.tensorflow.lite.Interpreter paketində mövcuddur. Əsas metod — run(Object input, Object output) çoxölçülü massivləri və ya ByteBuffer qəbul edir. Daha incə idarəetmə üçün runForMultipleInputsOutputs() və resizeInput() metodlarından istifadə edin.
iOS-da Interpreter Swift API vasitəsilə TensorFlowLite modulunda mövcuddur. Əsas interfeys Android-ə bənzəyir: Interpreter.init(modelPath:) ilə başlatma, allocateTensors() ilə tensorların ayrılması, invoke() ilə icra. Swift API giriş məlumat növləri kimi Data və MLMultiTensor-ı dəstəkləyir.
| Platforma | Dil | Sinif | Inferensiya metodu |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (native) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
Deleqatlar — əməliyyatların icrasını ixtisaslaşdırılmış avadanlığa köçürən komponentlərdir. GPU Delegate qrafik əməliyyatlarını sürətləndirmək üçün OpenGL ES (Android) və Metal (iOS) istifadə edir. NNAPI Delegate icranı Android Neural Networks API vasitəsilə NPU, DSP və ya GPU-ya köçürür.
Core ML Delegate iOS-da mövcuddur və TFLite əməliyyatlarını Core ML formatına çevirir. Apple ML Benchmarking məlumatlarına görə, iPhone 15 Pro-da Core ML Delegate istifadəsi inferensiyanı CPU ilə müqayisədə 4x-ə qədər sürətləndirir. Delegate FP32 və FP16 əməliyyatlarını dəstəkləyir.
XNNPACK Delegate — mobil prosessorlar üçün optimallaşdırılmış ARM CPU üçün universal həll. Xüsusi avadanlıq tələb etmir və INT8, FP16 və FP32-ni dəstəkləyir. Bütün cihazlarda aktivləşən baseline-deleqat kimi tövsiyə olunur.
Interpreter tensorları allocateTensors() çağrıldıqda ayrılan yaddaş hovuzu vasitəsilə idarə edir. Hovuzun ölçüsü .tflite faylındakı model təsvirinə əsasən müyyən edilir. Ayırmadan sonra interpreter inferensiya zamanı əlavə yaddaş ayırmır.
Dinamik giriş ölçüləri olan modellər üçün resizeInput() istifadə edin. Bu metod yeni ölçü nəzərə alınmaqla giriş tensorları üçün yaddaşı yenidən bölüşdürür. Giriş tensorunun ölçüsü dəyişdirildikdən sonra allocateTensors() vasitəsilə təkrar ayırma tələb oluna bilər.
Bir neçə modellə işliyərkən close() vasitəsilə resursları boşaltmaq vacibdir. Boşaldılmayan Interpreterlər, xüsusən məhdud RAM-lı cihazlarda yaddaş sızıntısına səbəb ola bilər. iOS üçün avtomatik istinad sayma ARC, Android üçün try-with-resources və ya aşkər close() çağrısı istifadə edin.
Interpreter ilə işliyərkən ən çox rast gəlinən xətalardan biri tensor ölçülərinin uyğunsuzluğudur. Giriş məlumatları gözlənilən formaya uyğun gəlmirsə, Interpreter Android-də IllegalArgumentException və ya iOS-da runtime xətası atır. inputTensorAt() və outputTensorAt() vasitəsilə ölçüləri yoxlayın.
İkinci geniş yayılmış problem — deleqatdan istifadə edərkən dəstəklənməyən operatorlar. Deleqat operatoru dəstəkləmirsə, Interpreter avtomatik olaraq həmin operator üçün CPU-ya qayıdır. Belə vəziyyətləri aşkarlamaq üçün setCancelled() vasitəsilə loglamanı aktivləşdirin və ya TFLite loglarını yoxlayın.
TFLite profilləşdirmə üçün Benchmark Tool təqdim edir: hər bir operatorun vaxtının ölçülməsi, yaddaş istehlakı, deleqatların müqayisəsi. Benchmark Tool TFLite Support Library tərkibində mövcuddur və birbaşa cihazda işə salına bilər.
GPU Delegate istifadə edərək Android-də Java API ilə modelin icrası nümunəsi. Interpreter GPU deleqatını ehtiva edən seçimlərlə yaradılır. Inferensiya yerinə yetirildikdən sonra nəticə çıxış tensorundan oxunur:
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", "Üst sinif: " + bestClass);
gpu.close();
interpreter.close();
Yerləşdirmədən əvvəl test üçün Python üzərində icra nümunəsi. TFLite Python API-si .tflite yükləməyə, inferensiya yerinə yetirməyə və nəticəni göstərməyə imkan verir. Modelin dəqiqliyini sazlama və yoxlama üçün istifadə olunur:
import tensorflow as tf
import numpy as np
# TFLite modelini fayldan yüklə
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# Giriş və çıxış tensor detallarını al
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Test üçün təsadüfi giriş məlumatı hazırla
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("Çıxış forması:", output_data.shape)
Tez-tez verilən suallar
Android üçün əsas Interpreter təxminən 300 KB yer tutur. Əlavə yaddaş modelin tensorları üçün ayrılır və giriş məlumatlarının ölçüsündən, operatorların sayından və kvantlaşdırma rejimindən asılıdır.
Tək Interpreter nümunəsi təhlükəsiz deyil. Paralel icra üçün modelin ayrı surətləri ilə bir neçə nümunə yaradın. Hər bir nümunə tensorlar üçün öz yaddaşından istifadə edir.
TFLite Support Library — DelegatesApi sinifindən istifadə edin. Müəyyən bir cihazda mövcud deleqatların siyahısını almaq üçün DelegatesApi.getAvailableDelegates() çağrın.
.tflite faylının bütövlüyünü tf.lite.experimental.Analyzer vasitəsilə yoxlayın. Modelin düzgün TFLite versiyası üçün konvertasiya edildiyinə və hədəf cihazda mövcud olan əməliyyatları dəstəklədiyinə əmin olun.
Java API-də resizeInput(int idx, int[] dims) metodundan və ya Swift-də resizeInput(at:to:) metodundan istifadə edin. Ölçü dəyişdirildikdən sonra yaddaşı yenidən bölüşdürmək üçün allocateTensors() çağrın.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun