TF Lite Interpreter TensorFlow Lite کا ایک اہم جزو ہے جو موبائل اور ایمبیڈڈ آلات پر .tflite ماڈلز کو انجام دینے کا ذمہ دار ہے۔ انٹرپریٹر ماڈل کی FlatBuffers نمائندگی لوڈ کرتا ہے، ان پٹ اور آؤٹ پٹ ڈیٹا کے لیے ٹینسرز مختص کرتا ہے، حساب کا گراف انجام دیتا ہے اور نتیجہ واپس کرتا ہے۔ TensorFlow Lite API حوالہ، 2025 کے مطابق، انٹرپریٹر Android کے لیے Java اور C++، iOS کے لیے Swift اور Objective-C، اور جانچ کے لیے Python بائنڈنگز کے ذریعے دستیاب ہے۔ TF Lite Interpreter GPU، NNAPI اور Core ML کے ذریعے ہارڈویئر ایکسلریشن کے لیے ڈیلیگیٹس کو سپورٹ کرتا ہے۔
اہم نکات
TF Lite Interpreter ایک کم سے کم رن ٹائم ہے جو سرور کے بنیادی ڈھانچے کے بغیر ڈیوائس پر مشین لرننگ ماڈل انجام دیتا ہے۔ انٹرپریٹر تربیت کو سپورٹ نہیں کرتا — صرف استدلال کرتا ہے۔ یہ اسے ہلکا بناتا ہے: Android پر بنیادی انٹرپریٹر کا بائنری سائز تقریباً 300 KB ہے۔
انٹرپریٹر FlatBuffers پر مبنی .tflite فارمیٹ میں ماڈلز کے ساتھ کام کرتا ہے۔ تخلیق کے وقت، انٹرپریٹر mmap کے ذریعے ماڈل کو میموری میں لوڈ کرتا ہے، کاپی کیے بغیر ڈیٹا تک براہ راست رسائی فراہم کرتا ہے۔ پھر انٹرپریٹر ماڈل کی وضاحت کی بنیاد پر ٹینسرز مختص کرتا ہے اور انجام دینے کے لیے تیار ہو جاتا ہے۔
ہر انٹرپریٹر مثال تھریڈ سیف نہیں ہے. ایک ہی ماڈل کو متعدد تھریڈز میں متوازی طور پر چلانے کے لیے، ماڈل کی علیحدہ کاپیوں کے ساتھ علیحدہ انٹرپریٹر مثالیں بنائیں۔ ایک ہی تھریڈ میں ترتیب وار کالز کے لیے، انٹرپریٹر مثال کو دوبارہ استعمال کیا جا سکتا ہے۔
Android پر، انٹرپریٹر org.tensorflow.lite.Interpreter پیکج میں Java API کے ذریعے دستیاب ہے۔ اہم طریقہ run(Object input, Object output) ہے، جو کثیر جہتی arrays یا ByteBuffer قبول کرتا ہے۔ زیادہ باریک کنٹرول کے لیے، runForMultipleInputsOutputs() اور resizeInput() طریقے استعمال کریں۔
iOS پر، انٹرپریٹر 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 ڈیلیگیٹ گرافکس آپریشنز کو تیز کرنے کے لیے OpenGL ES (Android) اور Metal (iOS) استعمال کرتا ہے۔ NNAPI ڈیلیگیٹ Android Neural Networks API کے ذریعے NPU، DSP یا GPU پر انجام منتقل کرتا ہے۔
Core ML ڈیلیگیٹ iOS پر دستیاب ہے اور TFLite آپریشنز کو Core ML فارمیٹ میں ترجمہ کرتا ہے۔ Apple ML Benchmarking کے مطابق، iPhone 15 Pro پر Core ML ڈیلیگیٹ استعمال کرنے سے CPU کے مقابلے میں استدلال 4 گنا تک تیز ہوتا ہے۔ ڈیلیگیٹ FP32 اور FP16 آپریشنز کو سپورٹ کرتا ہے۔
XNNPACK ڈیلیگیٹ ARM CPU کے لیے ایک عالمگیر حل ہے، جو موبائل پروسیسرز کے لیے بہتر بنایا گیا ہے۔ اسے خصوصی ہارڈویئر کی ضرورت نہیں ہے اور یہ INT8، FP16 اور FP32 کو سپورٹ کرتا ہے۔ اسے بطور بنیادی ڈیلیگیٹ تجویز کیا جاتا ہے جو تمام آلات پر فعال ہوتا ہے۔
انٹرپریٹر allocateTensors() کو کال کرنے پر مختص کردہ میموری پول کے ذریعے ٹینسرز کا انتظام کرتا ہے۔ پول کا سائز .tflite فائل میں ماڈل کی وضاحت کی بنیاد پر متعین کیا جاتا ہے۔ مختص کرنے کے بعد، انٹرپریٹر استدلال کے دوران اضافی میموری مختص نہیں کرتا۔
متحرک ان پٹ سائز والے ماڈلز کے لیے، resizeInput() استعمال کریں۔ یہ طریقہ نئے سائز کے مطابق ان پٹ ٹینسرز کے لیے میموری دوبارہ مختص کرتا ہے۔ ان پٹ ٹینسر کا سائز تبدیل کرنے کے بعد، allocateTensors() کے ذریعے دوبارہ مختص کرنے کی ضرورت ہو سکتی ہے۔
متعدد ماڈلز کے ساتھ کام کرتے وقت close() کے ذریعے وسائل جاری کرنا ضروری ہے۔ جاری نہ کیے گئے انٹرپریٹرز میموری لیکج کا سبب بن سکتے ہیں، خاص طور پر محدود RAM والے آلات پر۔ iOS کے لیے، خودکار حوالہ گنتی ARC استعمال کریں، Android کے لیے — try-with-resources یا واضح close() کال استعمال کریں۔
انٹرپریٹر کے ساتھ کام کرتے وقت سب سے عام خرابیاں ٹینسر جہتوں کا عدم مماثلت ہیں۔ اگر ان پٹ ڈیٹا متوقع شکل سے مماثل نہ ہو تو، انٹرپریٹر Android پر IllegalArgumentException یا iOS پر رن ٹائم خرابی پھینکتا ہے۔ inputTensorAt() اور outputTensorAt() کے ذریعے جہتیں چیک کریں۔
دوسرا عام مسئلہ ڈیلیگیٹ استعمال کرتے وقت غیر تعاون یافتہ آپریٹرز ہے۔ اگر ڈیلیگیٹ کسی آپریٹر کو سپورٹ نہیں کرتا تو، انٹرپریٹر خود بخود اس آپریٹر کے لیے CPU پر واپس آجاتا ہے۔ ایسی صورتحال کی نشاندہی کرنے کے لیے، setCancelled() کے ذریعے لاگنگ فعال کریں یا TFLite لاگز چیک کریں۔
TFLite پروفائلنگ کے لیے ایک بینچ مارک ٹول فراہم کرتا ہے: ہر آپریٹر کے انجام دینے کے وقت، میموری کی کھپت، ڈیلیگیٹ موازنہ کی پیمائش۔ بینچ مارک ٹول TFLite سپورٹ لائبریری کے حصے کے طور پر دستیاب ہے اور براہ راست ڈیوائس پر چلایا جا سکتا ہے۔
GPU ڈیلیگیٹ استعمال کرتے ہوئے Android پر Java API کے ساتھ ماڈل چلانے کی مثال۔ انٹرپریٹر 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 کے لیے بنیادی انٹرپریٹر تقریباً 300 KB لیتا ہے۔ اضافی میموری ماڈل ٹینسرز کے لیے مختص کی جاتی ہے اور ان پٹ ڈیٹا کے سائز، آپریٹرز کی تعداد اور کوانٹائزیشن موڈ پر منحصر ہے۔
ایک انٹرپریٹر مثال تھریڈ سیف نہیں ہے۔ متوازی انجام دہی کے لیے، ماڈل کی علیحدہ کاپیوں کے ساتھ متعدد مثالیں بنائیں۔ ہر مثال ٹینسرز کے لیے اپنی میموری استعمال کرتی ہے۔
TFLite سپورٹ لائبریری — 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں