TF Lite Interpreter — TensorFlow Lite-ning mobil va o‘rnatilgan qurilmalarda .tflite formatidagi modellarni bajarish uchun mas’ul bo‘lgan asosiy komponenti. Interpreter modelning FlatBuffers ko‘rinishini yuklaydi, kirish va chiqish ma’lumotlari uchun tensorlarni ajratadi, hisoblash grafigini bajaradi va natijani qaytaradi. TensorFlow Lite API Reference, 2025 ga ko‘ra, Interpreter Android uchun Java va C++, iOS uchun Swift va Objective-C, shuningdek test qilish uchun Python bog‘lamalari orqali mavjud. TF Lite Interpreter GPU, NNAPI va Core ML orqali apparat tezlashtirish uchun delegatlarni qo‘llab-quvvatlaydi.
Asosiy
TF Lite Interpreter — server infratuzilmasiz qurilmada mashinani o‘rganish modelini bajaradigan minimalist ish vaqti muhiti. Interpreter o‘rganishni qo‘llab-quvvatlamaydi — faqat inferensiya. Bu uni yengil qiladi: Android-da asosiy interpreter-ning ikkilik hajmi taxminan 300 KB ni tashkil qiladi.
Interpreter FlatBuffers ga asoslangan .tflite formatidagi model bilan ishlaydi. Yaratilish vaqtida Interpreter modelni mmap orqali xotiraga yuklaydi, bu ma’lumotlarga nusxa ko‘chirmasdan to‘g‘ridan-to‘g‘ri kirishni ta’minlaydi. Keyin Interpreter model tavsifiga asoslanib tensorlarni ajratadi va bajarishga tayyor bo‘ladi.
Har bir Interpreter nusxasi ip xavfsiz emas. Bitta modelni bir nechta iplarda parallel bajarish uchun modelning nusxalari bilan alohida Interpreter nusxalarini yarating. Ketma-ket qo‘ng‘iroqlar uchun Interpreter nusxasidan qayta foydalanish mumkin.
Android-da Interpreter Java API orqali org.tensorflow.lite.Interpreter paketida mavjud. Asosiy metod — run(Object input, Object output) — ko‘p o‘lchovli massivlar yoki ByteBuffer ni qabul qiladi. Aniqroq boshqarish uchun runForMultipleInputsOutputs() va resizeInput() metodlaridan foydalaning.
iOS-da Interpreter Swift API orqali TensorFlowLite modulida mavjud. Asosiy interfeys Android-ga o‘xshaydi: Interpreter.init(modelPath:) bilan boshlash, allocateTensors() bilan tensorlarni ajratish, invoke() bilan bajarish. Swift API kirish ma’lumot turlari sifatida Data va MLMultiTensor-ni qo‘llab-quvvatlaydi.
| Platforma | Til | Sinf | Inferensiya metodi |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (mahalliy) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
Delegatlar — operatsiyalarni bajarishni ixtisoslashtirilgan uskunaga o‘tkazadigan komponentlardir. GPU Delegate grafik operatsiyalarni tezlashtirish uchun OpenGL ES (Android) va Metal (iOS) dan foydalanadi. NNAPI Delegate bajarishni Android Neural Networks API orqali NPU, DSP yoki GPU-ga o‘tkazadi.
Core ML Delegate iOS da mavjud va TFLite operatsiyalarini Core ML formatiga tarjima qiladi. Apple ML Benchmarking ma’lumotlariga ko‘ra, iPhone 15 Pro da Core ML Delegate dan foydalanish inferensiyani CPU bilan solishtirganda 4x gacha tezlashtiradi. Delegate FP32 va FP16 operatsiyalarini qo‘llab-quvvatlaydi.
XNNPACK Delegate — mobil protsessorlar uchun optimallashtirilgan ARM CPU uchun universal yechim. Maxsus uskuna talab qilmaydi va INT8, FP16 va FP32-ni qo‘llab-quvvatlaydi. Barcha qurilmalarda faollashtiriladigan baseline-delegat sifatida tavsiya etiladi.
Interpreter tensorlarni allocateTensors() chaqirilganda ajratiladigan xotira hovuzi orqali boshqaradi. Hovuzning hajmi .tflite faylidagi model tavsifiga asoslanib aniqlanadi. Ajratishdan so‘ng interpreter inferensiya vaqtida qo‘shimcha xotira ajratmaydi.
Dinamik kirish o‘lchamli modellar uchun resizeInput() dan foydalaning. Bu metod kirish tensorlari uchun xotirani yangi o‘lchamni hisobga olgan holda qayta taqsimlaydi. Kirish tensorining o‘lchami o‘zgartirilgandan so‘ng allocateTensors() orqali qayta ajratish talab qilinishi mumkin.
Bir nechta modellar bilan ishlaganda close() orqali resurslarni bo‘shatish muhimdir. Bo‘shatilmagan Interpreterlar, ayniqsa cheklangan RAM-li qurilmalarda xotira oqishiga olib kelishi mumkin. iOS uchun avtomatik havola hisoblash ARC, Android uchun try-with-resources yoki aniq close() chaqiruvidan foydalaning.
Interpreter bilan ishlashda eng keng tarqalgan xatolar — tensor o‘lchamlarining mos kelmasligi. Kirish ma’lumotlari kutilgan shaklga mos kelmasa, Interpreter Android-da IllegalArgumentException yoki iOS-da runtime xatosini chiqaradi. inputTensorAt() va outputTensorAt() orqali o‘lchamlarni tekshiring.
Ikkinchi keng tarqalgan muammo — delegatdan foydalanganda qo‘llab-quvvatlanmaydigan operatorlar. Agar delegat operatorni qo‘llab-quvvatlamasa, Interpreter avtomatik ravishda ushbu operator uchun CPU-ga qaytadi. Bunday vaziyatlarni aniqlash uchun setCancelled() orqali loglashni yoqing yoki TFLite loglarini tekshiring.
TFLite profillash uchun Benchmark Tool ni taqdim etadi: har bir operator vaqtini o‘lchash, xotira iste’moli, delegatlarni taqqoslash. Benchmark Tool TFLite Support Library tarkibida mavjud va to‘g‘ridan-to‘g‘ri qurilmada ishga tushirilishi mumkin.
GPU Delegate yordamida Android da Java API bilan modelni bajarish misoli. Interpreter GPU delegatini o‘z ichiga olgan variantlar bilan yaratiladi. Inferensiya bajarilgandan so‘ng natija chiqish tensoridan o‘qiladi:
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", "Yuqori sinf: " + bestClass);
gpu.close();
interpreter.close();
Joylashtirishdan oldin sinov uchun Python da bajarish misoli. TFLite Python API si .tflite ni yuklash, inferensiyani bajarish va natijani ko‘rsatish imkonini beradi. Modelning aniqligini tuzatish va tekshirish uchun ishlatiladi:
import tensorflow as tf
import numpy as np
# TFLite modelini fayldan yukla
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# Kirish va chiqish tensor tafsilotlarini ol
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Sinov uchun tasodifiy kirish ma'lumotlarini tayyorla
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("Chiqish shakli:", output_data.shape)
Tez-tez beriladigan savollar
Android uchun asosiy Interpreter taxminan 300 KB joy egallaydi. Qo‘shimcha xotira model tensorlari uchun ajratiladi va kirish ma’lumotlarining hajmiga, operatorlar soniga va kvantlash rejimiga bog‘liq.
Yagona Interpreter nusxasi ip xavfsiz emas. Parallel bajarish uchun modelning alohida nusxalari bilan bir nechta nusxalar yarating. Har bir nusxa tensorlar uchun o‘z xotirasidan foydalanadi.
TFLite Support Library — DelegatesApi sinfidan foydalaning. Muayyan qurilmada mavjud delegatlar ro‘yxatini olish uchun DelegatesApi.getAvailableDelegates() ni chaqiring.
.tflite faylining yaxlitligini tf.lite.experimental.Analyzer orqali tekshiring. Modelning to‘g‘ri TFLite versiyasi uchun konvertatsiya qilinganiga va maqsadli qurilmada mavjud operatsiyalarni qo‘llab-quvvatlashiga ishonch hosil qiling.
Java API da resizeInput(int idx, int[] dims) metodidan yoki Swift da resizeInput(at:to:) dan foydalaning. Hajm o‘zgartirilgandan so‘ng xotirani qayta taqsimlash uchun allocateTensors() ni chaqiring.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.