TF Lite Interpreter হল TensorFlow Lite-এর একটি মূল উপাদান যা মোবাইল এবং এম্বেডেড ডিভাইসে .tflite মডেল নির্বাহ করার জন্য দায়ী। Interpreter মডেলের FlatBuffers উপস্থাপনা লোড করে, ইনপুট এবং আউটপুট ডেটার জন্য টেনসর বরাদ্দ করে, গণনা গ্রাফ নির্বাহ করে এবং ফলাফল ফেরত দেয়। TensorFlow Lite API Reference, 2025 অনুসারে, Interpreter Android-এর জন্য Java এবং C++, iOS-এর জন্য Swift এবং Objective-C এবং পরীক্ষার জন্য Python বাইন্ডিং-এর মাধ্যমে উপলব্ধ। TF Lite Interpreter GPU, NNAPI এবং Core ML-এর মাধ্যমে হার্ডওয়্যার এক্সিলারেশনের জন্য ডেলিগেট সমর্থন করে।
মূল বিষয়
TF Lite Interpreter একটি ন্যূনতম রানটাইম যা সার্ভার পরিকাঠামো ছাড়াই ডিভাইসে মেশিন লার্নিং মডেল নির্বাহ করে। Interpreter প্রশিক্ষণ সমর্থন করে না — শুধুমাত্র ইনফারেন্স। এটি এটিকে হালকা করে তোলে: Android-এ বেস ইন্টারপ্রেটারের বাইনারি আকার প্রায় 300 KB।
Interpreter FlatBuffers-এর উপর ভিত্তি করে .tflite ফরম্যাটে মডেল নিয়ে কাজ করে। তৈরি করার সময়, Interpreter mmap-এর মাধ্যমে মডেলটি মেমোরিতে লোড করে, যা কপি না করেই ডেটাতে সরাসরি অ্যাক্সেস প্রদান করে। তারপর Interpreter মডেল বর্ণনার উপর ভিত্তি করে টেনসর বরাদ্দ করে এবং নির্বাহের জন্য প্রস্তুত হয়।
প্রতিটি Interpreter ইনস্ট্যান্স থ্রেড-সেফ নয়. একই মডেল একাধিক থ্রেডে সমান্তরালভাবে নির্বাহ করতে, মডেলের পৃথক কপি সহ আলাদা Interpreter ইনস্ট্যান্স তৈরি করুন। একটি থ্রেডে অনুক্রমিক কলের জন্য, Interpreter ইনস্ট্যান্স পুনরায় ব্যবহার করা যেতে পারে।
Android-এ, Interpreter org.tensorflow.lite.Interpreter প্যাকেজে Java API-এর মাধ্যমে উপলব্ধ। প্রধান পদ্ধতি হল run(Object input, Object output), যা বহু-মাত্রিক অ্যারে বা ByteBuffer গ্রহণ করে। আরও সূক্ষ্ম নিয়ন্ত্রণের জন্য, runForMultipleInputsOutputs() এবং resizeInput() পদ্ধতি ব্যবহার করুন।
iOS-এ, Interpreter TensorFlowLite মডিউলে Swift API-এর মাধ্যমে উপলব্ধ। মৌলিক ইন্টারফেস Android-এর অনুরূপ: Interpreter.init(modelPath:) এর মাধ্যমে আরম্ভকরণ, allocateTensors()-এর মাধ্যমে টেনসর বরাদ্দ, invoke()-এর মাধ্যমে নির্বাহ। Swift API ইনপুট ডেটা টাইপ হিসেবে Data এবং MLMultiTensor সমর্থন করে।
| প্ল্যাটফর্ম | ভাষা | ক্লাস | ইনফারেন্স পদ্ধতি |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (নেটিভ) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
ডেলিগেট হল উপাদান যা অপারেশন নির্বাহ বিশেষায়িত হার্ডওয়্যারে স্থানান্তর করে। GPU Delegate গ্রাফিক্স অপারেশন ত্বরান্বিত করতে OpenGL ES (Android) এবং Metal (iOS) ব্যবহার করে। NNAPI Delegate Android Neural Networks API-এর মাধ্যমে NPU, DSP বা GPU-তে নির্বাহ স্থানান্তর করে।
Core ML Delegate iOS-এ উপলব্ধ এবং TFLite অপারেশন Core ML ফরম্যাটে অনুবাদ করে। Apple ML Benchmarking অনুসারে, iPhone 15 Pro-তে Core ML Delegate ব্যবহার CPU-এর তুলনায় ইনফারেন্স 4x পর্যন্ত দ্রুত করে। ডেলিগেট FP32 এবং FP16 অপারেশন সমর্থন করে।
XNNPACK Delegate হল ARM CPU-এর জন্য একটি সার্বজনীন সমাধান, মোবাইল প্রসেসরের জন্য অপ্টিমাইজড। এটির বিশেষ হার্ডওয়্যারের প্রয়োজন নেই এবং এটি INT8, FP16 এবং FP32 সমর্থন করে। এটি বেসলাইন ডেলিগেট হিসেবে সুপারিশ করা হয় যা সমস্ত ডিভাইসে সক্রিয় হয়।
Interpreter মেমোরি পুল-এর মাধ্যমে টেনসর পরিচালনা করে যা allocateTensors() কল করার সময় বরাদ্দ হয়। পুলের আকার .tflite ফাইলে মডেল বর্ণনার উপর ভিত্তি করে নির্ধারিত হয়। বরাদ্দের পরে, ইন্টারপ্রেটার ইনফারেন্সের সময় অতিরিক্ত মেমোরি বরাদ্দ করে না।
গতিশীল ইনপুট আকারযুক্ত মডেলের জন্য, resizeInput() ব্যবহার করুন। এই পদ্ধতি নতুন আকার অনুযায়ী ইনপুট টেনসরের জন্য মেমোরি পুনরায় বরাদ্দ করে। ইনপুট টেনসরের আকার পরিবর্তনের পরে, allocateTensors()-এর মাধ্যমে পুনরায় বরাদ্দের প্রয়োজন হতে পারে।
একাধিক মডেল নিয়ে কাজ করার সময় close()-এর মাধ্যমে সম্পদ মুক্ত করা গুরুত্বপূর্ণ। মুক্ত না করা Interpreter মেমোরি লিক হতে পারে, বিশেষ করে সীমিত RAM-যুক্ত ডিভাইসে। iOS-এর জন্য, স্বয়ংক্রিয় রেফারেন্স কাউন্টিং ARC ব্যবহার করুন, Android-এর জন্য — try-with-resources বা স্পষ্ট close() কল ব্যবহার করুন।
Interpreter নিয়ে কাজ করার সময় সবচেয়ে সাধারণ ত্রুটিগুলি হল টেনসর মাত্রার অমিল। যদি ইনপুট ডেটা প্রত্যাশিত আকারের সাথে মেলে না, তাহলে Interpreter Android-এ IllegalArgumentException বা iOS-এ রানটাইম ত্রুটি নিক্ষেপ করে। inputTensorAt() এবং outputTensorAt()-এর মাধ্যমে মাত্রা পরীক্ষা করুন।
দ্বিতীয় সাধারণ সমস্যা হল ডেলিগেট ব্যবহার করার সময় অসমর্থিত অপারেটর। যদি ডেলিগেট কোনো অপারেটর সমর্থন না করে, তাহলে Interpreter স্বয়ংক্রিয়ভাবে সেই অপারেটরের জন্য CPU-তে ফিরে আসে। এই ধরনের পরিস্থিতি সনাক্ত করতে, setCancelled()-এর মাধ্যমে লগিং সক্ষম করুন বা TFLite লগ পরীক্ষা করুন।
TFLite প্রোফাইলিংয়ের জন্য একটি Benchmark Tool প্রদান করে: প্রতিটি অপারেটরের নির্বাহ সময়, মেমোরি খরচ, ডেলিগেট তুলনা পরিমাপ করা। Benchmark Tool TFLite Support Library-এর অংশ হিসেবে উপলব্ধ এবং সরাসরি ডিভাইসে চালানো যেতে পারে।
GPU Delegate ব্যবহার করে Android-এ Java API-এর সাথে মডেল চালানোর উদাহরণ। Interpreter GPU ডেলিগেট সহ অপশন নিয়ে তৈরি করা হয়। ইনফারেন্সের পরে, ফলাফল আউটপুট টেনসর থেকে পড়া হয়:
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", "শীর্ষ শ্রেণী: " + bestClass);
gpu.close();
interpreter.close();
ডিপ্লয়মেন্টের আগে পরীক্ষার জন্য Python-এ চালানোর উদাহরণ। TFLite Python API .tflite লোড করা, ইনফারেন্স নির্বাহ এবং ফলাফল আউটপুট করার অনুমতি দেয়। ডিবাগিং এবং মডেল নির্ভুলতা যাচাইয়ের জন্য ব্যবহৃত হয়:
import tensorflow as tf
import numpy as np
# ফাইল থেকে TFLite মডেল লোড করুন
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# ইনপুট এবং আউটপুট টেনসরের বিবরণ পান
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# পরীক্ষার জন্য এলোমেলো ইনপুট ডেটা প্রস্তুত করুন
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("আউটপুট আকার:", output_data.shape)
সচরাচর জিজ্ঞাসা
Android-এর জন্য বেস Interpreter প্রায় 300 KB নেয়। অতিরিক্ত মেমোরি মডেল টেনসরের জন্য বরাদ্দ হয় এবং ইনপুট ডেটার আকার, অপারেটরের সংখ্যা এবং কোয়ান্টাইজেশন মোডের উপর নির্ভর করে।
একটি Interpreter ইনস্ট্যান্স থ্রেড-সেফ নয়. সমান্তরাল নির্বাহের জন্য, মডেলের পৃথক কপি সহ একাধিক ইনস্ট্যান্স তৈরি করুন। প্রতিটি ইনস্ট্যান্স টেনসরের জন্য নিজস্ব মেমোরি ব্যবহার করে।
TFLite Support Library — DelegatesApi ক্লাস ব্যবহার করুন। একটি নির্দিষ্ট ডিভাইসে উপলব্ধ ডেলিগেটের তালিকা পেতে DelegatesApi.getAvailableDelegates() কল করুন।
tf.lite.experimental.Analyzer-এর মাধ্যমে .tflite ফাইলের অখণ্ডতা পরীক্ষা করুন। নিশ্চিত করুন যে মডেলটি সঠিক TFLite সংস্করণের জন্য রূপান্তরিত এবং লক্ষ্য ডিভাইসে উপলব্ধ অপারেশন সমর্থন করে।
Java API-তে resizeInput(int idx, int[] dims) পদ্ধতি বা Swift-এ resizeInput(at:to:) ব্যবহার করুন। আকার পরিবর্তনের পরে, মেমোরি পুনরায় বরাদ্দ করতে allocateTensors() কল করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন