TF Lite Delegate হল TensorFlow Lite-এর একটি উপাদান যা নিউরাল নেটওয়ার্ক অপারেশনগুলিকে বিশেষায়িত হার্ডওয়্যারে রিডাইরেক্ট করে: GPU, NPU, DSP বা অপটিমাইজড CPU। ডেলিগেট ছাড়া, মডেলটি পূর্ণ সামঞ্জস্য মোডে CPU-তে চলে — ধীর কিন্তু অনুমানযোগ্য। ডেলিগেট চিপ এবং মডেলের উপর নির্ভর করে ইনফারেন্স 3–10 গুণ ত্বরান্বিত করে। TensorFlow, 2025 অনুসারে, GPU এবং NNAPI ডেলিগেট নির্ভুলতার উল্লেখযোগ্য ক্ষতি ছাড়াই ইনফারেন্স লেটেন্সি 60–90% হ্রাস করে।
মূল বিষয়
TF Lite Delegate হল TensorFlow Lite Runtime এবং ডিভাইসের হার্ডওয়্যার এক্সেলেরেটরের মধ্যে একটি সফ্টওয়্যার অ্যাডাপ্টার। ডেলিগেট মডেল গ্রাফ অপারেশনগুলি (কনভোলিউশন, পুলিং, ম্যাট্রিক্স গুণন) আটকায় এবং CPU-এর পরিবর্তে একটি বিশেষায়িত কম্পিউট ইউনিটে সেগুলি executes করে। যদি ডেলিগেট একটি নির্দিষ্ট অপারেশন সমর্থন না করে, তবে এটি CPU-তে চলে — একে আংশিক ডেলিগেশন বলে।
TF Lite Delegate আর্কিটেকচার SimpleDelegate API ইন্টারফেস এবং C++-এ TfLiteDelegate স্ট্রাকচারের উপর নির্মিত। প্রতিটি ডেলিগেট গ্রাফ নোডের ডেলিগেশন, মেমরি বরাদ্দ এবং টার্গেট ডিভাইসে এক্সিকিউশনের পদ্ধতি প্রয়োগ করে। ডেভেলপার Invoke কল করার আগে Interpreter::ModifyGraphWithDelegate-এর মাধ্যমে ডেলিগেট সংযুক্ত করে। TensorFlow Guide অনুসারে, ডেলিগেট স্বয়ংক্রিয়ভাবে মডেলের সমর্থিত সব অপারেশনে প্রয়োগ হয়।
সামঞ্জস্যতা পরীক্ষা একটি বাধ্যতামূলক পদক্ষেপ। সব অপারেশন প্রতিটি ডেলিগেট দ্বারা সমর্থিত নয়। TensorFlow Lite Delegation Compatibility Check টুল সরবরাহ করে: ডেলিগেট সহ মডেল চালান এবং কতগুলি অপারেশন (ops) ডেলিগেট হয়েছে তা পরীক্ষা করুন। যদি 80%-এর কম ডেলিগেট হয়, তবে অন্য ডেলিগেট বেছে নেওয়ার বা CPU-তে থাকার কথা বিবেচনা করুন। TensorFlow (2025) অনুসারে, GPU Delegate 45টি অপারেশন সমর্থন করে, NNAPI — 60+।
IT Sectr প্রকল্পগুলিতে, আমরা iOS-এর জন্য GPU ডেলিগেট এবং Android-এর জন্য XNNPACK ব্যবহার করি বিল্ট-ইন সামঞ্জস্যতা যাচাই সহ: মডেলটি সমস্ত ডেলিগেটে পরীক্ষা করা হয়, কমপক্ষে 90% ডেলিগেশন সম্পূর্ণতা সহ দ্রুততমটি নির্বাচন করা হয়।
// Android-এ GPU Delegate সংযোগ
val gpuDelegate = GpuDelegate()
val options = Interpreter.Options().apply {
addDelegate(gpuDelegate)
setNumThreads(4)
}
val interpreter = Interpreter(modelBuffer, options)
interpreter.run(input, output)
gpuDelegate.close()
ডেলিগেটেড অপারেশন পরীক্ষা — Interpreter-এর মাধ্যমে সামঞ্জস্যতা নিয়ন্ত্রণ। ডিফল্টভাবে, ডেলিগেট তার সমর্থিত সমস্ত অপারেশন গ্রহণ করে। ডিবাগিংয়ের জন্য, ডেলিগেটেড নোডের সংখ্যার লগিং ব্যবহার করুন। যদি মডেলে কাস্টম অপারেশন (custom ops) থাকে, ডেলিগেট সেগুলি ত্বরান্বিত করে না কিন্তু ভাঙেও না — সেগুলি CPU-তে চলে।
// ডেলিগেটেড অপারেশনের সংখ্যা পরীক্ষা করুন
val delegateCount = interpreter.getDelegateOpsCount(gpuDelegate)
val totalNodes = interpreter.getNodesCount()
Log.d("TFLite", "ডেলিগেটেড: $delegateCount / $totalNodes")
if (delegateCount < totalNodes * 0.8) {
// 80% থ্রেশহোল্ড — অন্য ডেলিগেট চয়ন করুন
}
GPU Delegate হল OpenGL ES 3.1+ (Android) বা Metal (iOS)-এর মাধ্যমে GPU-তে মডেল চালানোর জন্য TensorFlow Lite ডেলিগেট। গ্রাফিক্স প্রসেসরগুলি সমান্তরাল ম্যাট্রিক্স অপারেশনের জন্য অপ্টিমাইজ করা — Core ML এবং কনভোলিউশনাল নিউরাল নেটওয়ার্ক (CNN) সবচেয়ে বেশি সুবিধা পায়। GPU Delegate MobileNet, EfficientNet, Inception-এর মতো মডেলের জন্য ইনফারেন্স লেটেন্সি 4–8 গুণ হ্রাস করে।
GPU Delegate সীমাবদ্ধতা: সব অপারেশন সমর্থন করে না (TF Lite-এ ~120-এর মধ্যে মাত্র 45টি), OpenGL ES 3.1 বা Metal প্রয়োজন, CPU-র চেয়ে বেশি শক্তি খরচ করে। মোবাইল পরিস্থিতিতে batch size > 1-এর জন্য GPU অকার্যকর। TensorFlow বেঞ্চমার্ক (2025) অনুসারে, Adreno 740 GPU-যুক্ত Pixel 8-এ, MobileNetV2 GPU-তে 4.2 ms বনাম CPU-তে 18.7 ms-এ চলে — 4.4x ত্বরণ।
GPU Delegate কনফিগারেশন-এ নির্ভুলতা নির্বাচন অন্তর্ভুক্ত: float16 নির্ভুলতা হ্রাস করে কিন্তু ইনফারেন্স 30–40% ত্বরান্বিত করে (বেশিরভাগ কাজের জন্য) গুণমানে লক্ষণীয় ক্ষতি ছাড়াই। সর্বোচ্চ GPU পারফরম্যান্সের জন্য allow_precision_loss=true সক্ষম করুন। উচ্চ-নির্ভুলতা কাজের (চিকিৎসা, অর্থ) জন্য float32 ব্যবহার করুন।
// নির্ভুলতা অপ্টিমাইজেশন সহ GPU Delegate
val gpuOptions = GpuDelegateFactory.Options().apply {
isPrecisionLossAllowed = true
inferencePreference = GpuDelegateFactory.Options.InferencePreference.SUSTAINED_SPEED
}
val delegate = GpuDelegateFactory.create(gpuOptions)
iOS-এ GPU Delegate Metal Delegate-এর মাধ্যমে Metal Performance Shaders ব্যবহার করে। iOS-এ, ডেলিগেট Apple Neural Engine-এর জন্য Core ML ডেলিগেট বা সরাসরি Metal-এর মাধ্যমে কাজ করে। Apple A17 Pro MobileNetV2 1.3 ms-এ চালায় — CPU-র চেয়ে 6 গুণ দ্রুত। Metal delegate iOS 12 থেকে উপলব্ধ এবং A7+ চিপযুক্ত সমস্ত ডিভাইস সমর্থন করে।
NNAPI Delegate (Android Neural Networks API) হল একটি TF Lite ডেলিগেট যা Android NN HAL (Hardware Abstraction Layer)-এর মাধ্যমে হার্ডওয়্যার ত্বরণ ব্যবহার করে। NNAPI উপলব্ধ ডিভাইস ড্রাইভারের উপর নির্ভর করে মডেল অপারেশনগুলিকে NPU, DSP বা GPU-তে রিডাইরেক্ট করে। Android 8.1+ (API 27+) এ সমর্থিত এবং এটি Android-এর জন্য ডিফল্ট সুপারিশকৃত ডেলিগেট।
NNAPI সুবিধা — স্বয়ংক্রিয় এক্সেলেরেটর নির্বাচন। যদি ডিভাইসে NPU (Qualcomm Hexagon, MediaTek APU, Samsung NPU) থাকে, NNAPI তাতে অপারেশন ডেলিগেট করে। NPU না থাকলে — OpenCL-এর মাধ্যমে GPU-তে। GPU-ও সমর্থিত না হলে — DSP অপ্টিমাইজেশন সহ CPU-তে। ডেভেলপার কোনো নির্দিষ্ট এক্সেলেরেটর উল্লেখ করেন না — NNAPI সর্বোত্তমটি বেছে নেয়। Google I/O 2024 অনুসারে, Snapdragon 8 Gen 3-এ NNAPI ডেলিগেট LLM মডেল 12 গুণ ত্বরান্বিত করে।
NNAPI সীমাবদ্ধতা: বিভিন্ন ডিভাইসে অসমর্থিত সমর্থন। পুরানো ডিভাইসগুলির (Android 8.1) ড্রাইভারের সীমিত সেট থাকে। Kirin-যুক্ত Huawei Google Services-এর মাধ্যমে NNAPI সমর্থন করে না — GPU Delegate ব্যবহার করুন। গ্যারান্টিযুক্ত সামঞ্জস্যের জন্য, Google প্রথম পছন্দ হিসাবে NNAPI Delegate সুপারিশ করে, GPU বা XNNPACK-এ ফলব্যাক সহ।
// CPU ফলব্যাক সহ NNAPI Delegate
val nnApiOptions = NnApiDelegate.Options().apply {
acceleratorName = null // null = স্বয়ংক্রিয়-নির্বাচন
allowFp16 = true
executionPreference = NnApiDelegate.ExecutionPreference.SUSTAINED_SPEED
}
val delegate = NnApiDelegate(nnApiOptions)
val interpreter = Interpreter(model, Interpreter.Options().apply {
addDelegate(delegate)
setNumThreads(4)
})
NNAPI এক্সেলেরেটর নাম — স্পষ্ট এক্সেলেরেটর নির্বাচনের জন্য একটি প্যারামিটার। null পাস করলে, NNAPI স্বয়ংক্রিয়ভাবে নির্বাচন করে। পরীক্ষার জন্য, একটি নির্দিষ্ট উল্লেখ করুন: "qti", "google-edgetpu", "mediatek"। উপলব্ধ এক্সেলেরেটরের তালিকা NnApiDelegate.getAvailableAccelerators()-এর মাধ্যমে আউটপুট হয়। প্রোডাকশনে, সামঞ্জস্য সীমা সহ স্বয়ংক্রিয়-নির্বাচন ব্যবহার করুন।
XNNPACK Delegate হল SIMD নির্দেশের (ARM NEON, SSE, AVX) মাধ্যমে অপ্টিমাইজড CPU এক্সিকিউশনের জন্য TensorFlow Lite ডেলিগেট। XNNPACK-এর GPU বা NPU প্রয়োজন হয় না — এটি একটি বিশুদ্ধ CPU ডেলিগেট, কিন্তু SIMD, অপারেটর ফিউশন, মেমরি প্রি-ফেচিং এবং কোয়ান্টাইজড ইনফারেন্স (INT8)-এর মাধ্যমে 2–4 গুণ ত্বরণ সহ। ডেডিকেটেড NPU ছাড়া ডিভাইসের জন্য বা গ্যারান্টিযুক্ত সামঞ্জস্যের প্রয়োজন হলে আদর্শ।
XNNPACK Google দ্বারা CPU-র জন্য ডিফল্ট TF Lite ডেলিগেট হিসাবে তৈরি (ডিফল্টভাবে TFLite Runtime-এ অন্তর্ভুক্ত)। এটি 90+ অপারেশন সমর্থন করে — GPU বা NNAPI-র চেয়ে বেশি। XNNPACK কোয়ান্টাইজড মডেল (INT8, INT16) এর জন্য বিশেষভাবে কার্যকর: অপারেশনগুলি float32 সংস্করণের তুলনায় 2–3 গুণ দ্রুত চলে। Google বেঞ্চমার্ক (2025) অনুসারে, XNNPACK INT8 MobileNetV2-কে বেসলাইন CPU-র তুলনায় 2.8x ত্বরান্বিত করে।
XNNPACK বনাম GPU: NPU ছাড়া ডিভাইসে, XNNPACK ছোট ব্যাচের (1–4) জন্য GPU Delegate-এর চেয়ে প্রায়ই দ্রুত — GPU-তে CPU এবং GPU-র মধ্যে ডেটা স্থানান্তরে ওভারহেড থাকে। XNNPACK একই CPU অ্যাড্রেস স্পেসে কাজ করে — কোনো মেমরি কপি নেই। 5MB পর্যন্ত মডেলের জন্য, XNNPACK GPU-র চেয়ে দ্রুত হতে পারে। বড় CNN মডেলের জন্য, GPU সমান্তরালতার কারণে জয়ী হয়।
// TFLite 2.18+ এ ডিফল্টরূপে XNNPACK Delegate সক্ষম
// XnnpackDelegate-এর মাধ্যমে স্পষ্ট ব্যবহার
val xnnpackOptions = XnnpackDelegate.Options().apply {
numThreads = 4
flags = XnnpackDelegate.Flags.USE_XNNPACK
}
val delegate = XnnpackDelegate(xnnpackOptions)
val interpreter = Interpreter(modelBuffer, Interpreter.Options().apply {
addDelegate(delegate)
})
XNNPACK ফ্ল্যাগ: USE_XNNPACK — ডেলিগেট জোর করে সক্ষম করে, FLUSH_TO_ZERO — ত্বরণের জন্য ডিনর্মালাইজড সংখ্যা পরিচালনা করে, ENABLE_XNNPACK_SHAPES — ডায়নামিক ইনপুট আকার। সর্বোচ্চ সামঞ্জস্যের জন্য, ডিফল্ট অপশন ব্যবহার করুন। পুরানো ডিভাইসে ত্রুটি ঘটলে, XNNPACK নিষ্ক্রিয় করুন — মডেলটি এখনও CPU-তে চলে কিন্তু ধীর।
Core ML Delegate হল iOS-এর জন্য TensorFlow Lite ডেলিগেট যা Apple Core ML Framework ব্যবহার করে। Core ML TF Lite মডেলকে .mlmodel ফর্ম্যাটে রূপান্তর করে এবং এটি Apple Neural Engine (ANE), GPU (Metal) বা CPU-তে executes করে। Apple A17 Pro এবং M3-এ ডেডিকেটেড Neural Engine আছে যা Core ML স্বয়ংক্রিয়ভাবে ব্যবহার করে। Core ML Delegate আধুনিক iOS ডিভাইসে CPU-র তুলনায় ইনফারেন্স 5–10 গুণ ত্বরান্বিত করে।
iOS-এ Core ML flex delegate (Core ML-এর জন্য উপলব্ধ অপারেশনের গতিশীল ডেলিগেশন) এবং সম্পূর্ণ মডেল রূপান্তর (সম্পূর্ণ মডেলকে .mlmodel-এ রূপান্তর) সমর্থন করে। Apple flex delegate সুপারিশ করে — এটি দ্রুত কারণ এটি পূর্ব রূপান্তর ছাড়াই রানটাইমে কাজ করে। Core ML Delegate float32, float16 এবং কোয়ান্টাইজড মডেল (INT8) সমর্থন করে।
Metal Delegate হল একটি নিম্ন-স্তরের ডেলিগেট যা সরাসরি Metal Performance Shaders-এর সাথে কাজ করে। যখন Core ML নির্দিষ্ট অপারেশন সমর্থন না করে তখন Metal ব্যবহার করুন। Metal Delegate GPU-তে সর্বোচ্চ নিয়ন্ত্রণ প্রদান করে কিন্তু আরও কোড প্রয়োজন। Apple (WWDC 2024) অনুসারে, নেটিভ Swift মডেলের জন্য Metal Delegate রূপান্তর ওভারহেডের অনুপস্থিতির কারণে Core ML-এর চেয়ে 15–20% দ্রুত হতে পারে।
// TFLite Swift API-এর মাধ্যমে iOS-এ Core ML Delegate
import TensorFlowLite
let coreMLDelegate = CoreMLDelegate()
var options = InterpreterOptions()
options.addDelegate(coreMLDelegate)
let interpreter = try Interpreter(modelPath: modelPath, options: options)
try interpreter.invoke(at: 0)
Core ML এবং Metal-এর মধ্যে নির্বাচন: প্রোডাকশনের জন্য Core ML, এজ কেসের জন্য Metal। Core ML স্বয়ংক্রিয়ভাবে NE মেমরি পরিচালনা করে, CPU ফলব্যাক সমর্থন করে এবং ম্যানুয়াল রূপান্তরের প্রয়োজন নেই। Metal বাফার নিয়ন্ত্রণ প্রদান করে এবং কাস্টম অপারেশনের জন্য উপযুক্ত। IT Sectr প্রকল্পগুলিতে, আমরা সমস্ত iOS মডেলের জন্য Core ML Delegate এবং শুধুমাত্র রিয়েল-টাইম ভিডিও অ্যানালিটিক্স কাজের জন্য Metal ব্যবহার করি।
TF Lite Delegate নির্বাচন টার্গেট প্ল্যাটফর্ম, মডেল এবং লেটেন্সি প্রয়োজনীয়তার উপর নির্ভর করে। কোনো সার্বজনীন সেরা ডেলিগেট নেই — প্রতিটির শক্তি এবং দুর্বলতা রয়েছে। সর্বোত্তম কৌশল: টার্গেট ডিভাইসে সমস্ত উপলব্ধ ডেলিগেট পরীক্ষা করুন এবং ন্যূনতম দ্রুত নির্বাচন করুন — দ্রুততম নয়, বরং ন্যূনতম পর্যাপ্ত।
| ডেলিগেট | প্ল্যাটফর্ম | ত্বরণ | সামঞ্জস্যতা |
|---|---|---|---|
| GPU | Android, iOS | 4–8x | 45 অপস |
| NNAPI | Android 8.1+ | 3–12x | 60+ অপস |
| XNNPACK | Android, iOS | 2–4x | 90+ অপস |
| Core ML | iOS 12+ | 5–10x | 50+ অপস |
নির্বাচনের জন্য সুপারিশ: NPU-যুক্ত Android (Snapdragon 8 Gen 2+, Dimensity 9000+) এর জন্য — NNAPI Delegate। NPU ছাড়া Android-এর জন্য — XNNPACK Delegate (ডিফল্ট)। iOS-এর জন্য — Core ML Delegate। ক্রস-প্ল্যাটফর্ম প্রকল্পের জন্য, কৌশল ব্যবহার করুন: Android-এ NNAPI, iOS-এ Core ML, XNNPACK ফলব্যাক হিসাবে। GPU Delegate — যখন NNAPI উপলব্ধ না এবং XNNPACK যথেষ্ট দ্রুত না।
লেটেন্সি পরীক্ষা নির্বাচনের একটি বাধ্যতামূলক পদক্ষেপ। ন্যূনতম তাপমাত্রায় (ঠান্ডা ডিভাইস) এবং 5 মিনিটের একটানা অপারেশনের (থার্মাল থ্রটলিং) পরে ইনফারেন্স পরিমাপ করুন। GPU এবং NNAPI গরম হলে কর্মক্ষমতা হ্রাস করতে পারে। XNNPACK (CPU) কম প্রভাবিত হয়। আপনার ডিভাইসে সমস্ত ডেলিগেটের স্বয়ংক্রিয় পরীক্ষার জন্য TensorFlow Lite Benchmark Tool ব্যবহার করুন।
// ডেলিগেট নির্বাচন কৌশল
fun selectDelegate(): TfLiteDelegate {
return when {
NnApiDelegate.getAvailableAccelerators()?.isNotEmpty == true ->
NnApiDelegate()
GpuDelegateFactory.isGpuDelegateAvailable() ->
GpuDelegate()
else -> XnnpackDelegate()
}
}
ফলব্যাক কৌশল — ব্যতিক্রম ছাড়াই মডেল লোড করুন: যদি ডেলিগেট সমর্থিত না হয়, CPU-তে চালান। TensorFlow Lite ডেলিগেট তৈরি ত্রুটিতে IllegalArgumentException ছুঁড়ে। ডেলিগেট তৈরি try-catch-এ মোড়ান এবং ত্রুটিতে মডেলটি ডেলিগেট ছাড়া চালান। ধীর কিন্তু কাজ করা AI ব্যবহারকারীর জন্য ত্রুটির চেয়ে ভাল।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
TF Lite Delegate মোবাইল ডিভাইসে নিউরাল নেটওয়ার্কের জন্য একটি এক্সেলেরেটর। মডেলটি CPU-তে ধীরে চালানোর পরিবর্তে, ডেলিগেট গণনাগুলি GPU বা বিশেষ নিউরাল চিপে (NPU) পাঠায়। CPU-কে একটি সার্বজনীন টুল এবং ডেলিগেটকে নির্দিষ্ট কাজের জন্য একটি বিশেষ মেশিন হিসাবে কল্পনা করুন: এটি একই কাজ করে কিন্তু কয়েকগুণ দ্রুত।
দ্রুততম ডেলিগেট ডিভাইসের উপর নির্ভর করে। Neural Engine (Apple A17 Pro, Snapdragon 8 Gen 3) যুক্ত ডিভাইসে — NNAPI (Android) বা Core ML (iOS) 10–12x পর্যন্ত সর্বোচ্চ ত্বরণ প্রদান করে। GPU Delegate দ্বিতীয় দ্রুততম। XNNPACK (CPU) ডেলিগেটগুলির মধ্যে সবচেয়ে ধীর কিন্তু সবচেয়ে সামঞ্জস্যপূর্ণ। NPU ছাড়া ডিভাইসে, XNNPACK বা GPU সর্বোত্তম হতে পারে।
না, প্রতিটি ডেলিগেট অপারেশনের একটি সীমিত সেট সমর্থন করে। GPU Delegate — 45 অপস, NNAPI — 60+, XNNPACK — 90+। অসমর্থিত অপারেশনগুলি CPU-তে চলে (আংশিক ডেলিগেশন)। কাস্টম অপসের জন্য, ডেলিগেট প্রয়োগ হয় না। ব্যবহারের আগে, getDelegateOpsCount-এর মাধ্যমে সামঞ্জস্যতা পরীক্ষা করুন — যদি 80% এর কম নোড ডেলিগেট হয়, অন্য ডেলিগেট চয়ন করুন।
build.gradle-এ নির্ভরতা যোগ করুন: implementation 'org.tensorflow:tensorflow-lite-gpu-delegate:+' বা 'org.tensorflow:tensorflow-lite:x.x.x' (XNNPACK বিল্ট-ইন)। একটি ডেলিগেট তৈরি করুন (GpuDelegate(), NnApiDelegate(), XnnpackDelegate()) এবং এটি Interpreter.Options.addDelegate()-এ পাস করুন। ইন্টারপ্রেটার চালান — ডেলিগেট স্বয়ংক্রিয়ভাবে প্রয়োগ হয়। এক্সিকিউশনের পরে, close()-এর মাধ্যমে ডেলিগেট বন্ধ করুন।
হ্যাঁ, TF Lite একাধিক ডেলিগেট সমর্থন করে — এগুলি ক্রমিকভাবে প্রয়োগ হয়। ইন্টারপ্রেটার প্রথম ডেলিগেটে একটি অপারেশন ডেলিগেট করার চেষ্টা করে, তারপর দ্বিতীয়টিতে, এবং আরও। যদি কোনো ডেলিগেট অপারেশন সমর্থন না করে, এটি CPU-তে চলে। এটি ফলব্যাকের জন্য দরকারী: প্রথমে NNAPI, তারপর GPU, তারপর XNNPACK। যোগ করার ক্রম অগ্রাধিকারকে প্রভাবিত করে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন