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 کی بجائے ایک خصوصی کمپیوٹ یونٹ پر عمل کرتا ہے۔ اگر ڈیلیگیٹ کسی خاص آپریشن کو سپورٹ نہیں کرتا، تو یہ CPU پر چلتا ہے — اسے جزوی ڈیلیگیشن کہا جاتا ہے۔
TF Lite Delegate فن تعمیر SimpleDelegate API انٹرفیس اور C++ میں TfLiteDelegate ساخت کے گرد بنایا گیا ہے۔ ہر ڈیلیگیٹ گراف نوڈس کی ڈیلیگیشن، میموری مختص اور ہدف ڈیوائس پر عمل آوری کے طریقوں کو نافذ کرتا ہے۔ ڈیویلپر Invoke کو کال کرنے سے پہلے Interpreter::ModifyGraphWithDelegate کے ذریعے ڈیلیگیٹ کو جوڑتا ہے۔ TensorFlow گائیڈ کے مطابق، ڈیلیگیٹ خود بخود ماڈل کے تمام معاون آپریشنز پر لاگو ہوتا ہے۔
مطابقت کی جانچ ایک لازمی مرحلہ ہے۔ تمام آپریشنز ہر ڈیلیگیٹ کے ذریعے سپورٹ نہیں ہوتے۔ 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 سے زیادہ توانائی استعمال کرتا ہے۔ GPU موبائل منظرناموں میں بیچ سائز > 1 کے لیے غیر موثر ہے۔ 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 ڈیلیگیٹ iOS 12 سے دستیاب ہے اور A7+ چپ والے تمام آلات کو سپورٹ کرتا ہے۔
NNAPI Delegate (Android Neural Networks API) ایک TF Lite ڈیلیگیٹ ہے جو Android NN HAL (ہارڈویئر ابسٹرکشن پرت) کے ذریعے ہارڈویئر تیزی استعمال کرتا ہے۔ 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 GPU یا XNNPACK پر فال بیک کے ساتھ NNAPI Delegate کو پہلے انتخاب کے طور پر تجویز کرتا ہے۔
// 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 پر عمل کرتا ہے۔ 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 فال بیک (fallback) کو سپورٹ کرتا ہے اور دستی تبدیلی کی ضرورت نہیں ہے۔ 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 پر چلتے ہیں (جزوی ڈیلیگیشن)۔ کسٹم آپریشنز (custom ops) کے لیے، ڈیلیگیٹ لاگو نہیں ہوتا۔ استعمال سے پہلے، 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں