TF Lite Interpreter — əsas anlayışlar, interfeys və modellərin işə salınması

Müəllif: IT Sectr Dərc olunub: 2026-07-18 Oxuma vaxtı: 6 dəq

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 — mobil və yerləşdirilmiş cihazlarda .tflite modellərini işə salmaq üçün icra mühitidir.
  • Interpreter modeli yükləyir, tensorları ayırır və hesablama qrafikini operator üzrə operator icra edir.
  • API müxtəlif platformalar üçün Java, C++, Swift, Objective-C və Python-da mövcuddur.
  • GPU, NNAPI və Core ML deleqatları inferensiyanı CPU ilə müqayisədə 5x-ə qədər sürətləndirir.
  • Çoxsaylı interpreterlər bir tətbiqdə bir neçə modeli paralel icra etməyə imkan verir.

TF Lite Interpreter-in əsas anlayışları

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 və iOS-da interpreter API-si

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.

Platformalar üzrə API müqayisəsi

PlatformaDilSinifInferensiya metodu
AndroidJava / KotlinInterpreterrun(), runForMultipleInputsOutputs()
Android (native)C++InterpreterInvoke()
iOSSwift / Obj-CInterpreterinvoke()
Linux / PythonPythonInterpreterget_tensor(), invoke()

Aparat sürətləndirməsi üçün deleqatların konfiqurasiyası

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.

Yaddaş və tensorların idarə edilməsi

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.

Xəta idarə etmə və sazlama

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.

Interpreter vasitəsilə inferensiya nümunələri

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:

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", "Ü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:

python
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

TF Lite Interpreter nə qədər yaddaş istehlak edir?

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.

Interpreteri bir neçə ipdə istifadə etmək olar?

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.

Cihazda hansı deleqatların mövcud olduğunu necə yoxlamaq olar?

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.

Model yüklənərkən Interpreter xəta atarsa nə etməli?

.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.

Interpreter yaradıldıqdan sonra giriş tensorunun ölçüsünü necə dəyişmək olar?

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ə

  • TF Lite Interpreter — mobil cihazlarda .tflite modellərini işə salmaq üçün minimalist icra mühitidir.
  • Interpreter modeli mmap vasitəsilə yükləyir, tensorları ayırır və hesablama qrafikini icra edir.
  • API Java, C++, Swift, Objective-C və Python-da vahid interfeyslə mövcuddur.
  • GPU, NNAPI və Core ML deleqatları inferensiyanı sürətləndirir CPU ilə müqayisədə 5x-ə qədər.
  • Dinamik giriş ölçüləri olan modellər üçün resizeInput() istifadə edin.
  • Yaddaş sızıntılarının qarşısını almaq üçün Interpreteri close() vasitəsilə bağlayın.
  • Benchmark Tool real cihazda performansı profilləşdirməyə kömək edir.

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.

Layihəni müzakirə et

Həm də oxuyun