TF Lite Interpreter هو مكون رئيسي من TensorFlow Lite مسؤول عن تنفيذ نماذج .tflite على الأجهزة المحمولة والمدمجة. يقوم المفسر بتحميل تمثيل FlatBuffers للنموذج، ويخصص الموترات لبيانات الإدخال والإخراج، وينفذ رسم الحسابات ويعيد النتيجة. وفقًا لمرجع API TensorFlow Lite، 2025، يتوفر المفسر بلغة Java و C++ لنظام Android، و Swift و Objective-C لنظام iOS، وكذلك عبر روابط Python للاختبار. TF Lite Interpreter يدعم المفوضين للتسريع عبر الأجهزة من خلال GPU و NNAPI و Core ML.
الوجبات الرئيسية
TF Lite Interpreter هو بيئة تشغيل بسيطة تنفذ نموذج تعلم آلي على الجهاز بدون بنية تحتية للخادم. لا يدعم المفسر التدريب — فقط الاستدلال. وهذا يجعله خفيفًا: حجم الملف الثنائي للمفسر الأساسي على Android حوالي 300 كيلوبايت.
يعمل المفسر مع النماذج بتنسيق .tflite، المستند إلى FlatBuffers. عند الإنشاء، يقوم المفسر بتحميل النموذج إلى الذاكرة عبر mmap، مما يوفر وصولًا مباشرًا للبيانات دون نسخ. ثم يخصص المفسر الموترات بناءً على وصف النموذج ويكون جاهزًا للتنفيذ.
كل مثيل للمفسر غير آمن للخيوط. لتنفيذ نفس النموذج بالتوازي عبر خيوط متعددة، قم بإنشاء مثيلات منفصلة للمفسر مع نسخ من النموذج. للاستدعاءات المتسلسلة في خيط واحد، يمكن إعادة استخدام مثيل المفسر.
على Android، يتوفر المفسر عبر واجهة Java API في حزمة org.tensorflow.lite.Interpreter. الطريقة الرئيسية هي run(Object input, Object output)، التي تقبل المصفوفات متعددة الأبعاد أو ByteBuffer. للتحكم الأدق، استخدم طريقتي runForMultipleInputsOutputs() و resizeInput().
على iOS، يتوفر المفسر عبر واجهة Swift API في وحدة TensorFlowLite. الواجهة الأساسية مشابهة لـ 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 التنفيذ إلى NPU أو DSP أو GPU عبر Android Neural Networks API.
Core ML Delegate متوفر على iOS ويترجم عمليات TFLite إلى صيغة Core ML. وفقًا لـ Apple ML Benchmarking، استخدام Core ML Delegate على iPhone 15 Pro يسرع الاستدلال حتى 4 مرات مقارنة بـ CPU. يدعم المفوض عمليات FP32 و FP16.
XNNPACK Delegate هو حل شامل لمعالجات ARM CPU، محسّن للمعالجات المحمولة. لا يتطلب أجهزة خاصة ويدعم INT8 و FP16 و FP32. يُوصى به كمفوض أساسي ينشط على جميع الأجهزة.
يدير المفسر الموترات عبر تجمع ذاكرة يتم تخصيصه عند استدعاء allocateTensors(). يُحدد حجم التجمع بناءً على وصف النموذج في ملف .tflite. بعد التخصيص، لا يخصص المفسر ذاكرة إضافية أثناء الاستدلال.
للنماذج ذات أحجام الإدخال الديناميكية، استخدم resizeInput(). تعيد هذه الطريقة تخصيص الذاكرة لموترات الإدخال وفقًا للحجم الجديد. بعد تغيير حجم موتر الإدخال، قد يكون إعادة التخصيص عبر allocateTensors() ضروريًا.
عند العمل مع نماذج متعددة، من المهم تحرير الموارد عبر close(). قد تؤدي مثيلات المفسر غير المحررة إلى تسرب الذاكرة، خاصة على الأجهزة ذات ذاكرة الوصول العشوائي المحدودة. لنظام iOS، استخدم العد التلقائي للمراجع ARC، لنظام Android — استخدم try-with-resources أو استدعاءًا صريحًا لـ close().
الأخطاء الأكثر شيوعًا عند العمل مع المفسر هي عدم تطابق أبعاد الموترات. إذا كانت بيانات الإدخال لا تتطابق مع الشكل المتوقع، يطرح المفسر IllegalArgumentException على Android أو خطأ وقت التشغيل على iOS. تحقق من الأبعاد عبر inputTensorAt() و outputTensorAt().
المشكلة الثانية الشائعة هي العوامل غير المدعومة عند استخدام مفوض. إذا كان المفوض لا يدعم عاملاً، يعود المفسر تلقائيًا إلى CPU لهذا العامل. لتحديد هذه الحالات، فعّل التسجيل عبر setCancelled() أو راجع سجلات TFLite.
يوفر TFLite أداة قياس الأداء لإنشاء الملفات الشخصية: قياس وقت تنفيذ كل عامل، استهلاك الذاكرة، مقارنة المفوضين. أداة قياس الأداء متاحة كجزء من TFLite Support Library ويمكن تشغيلها مباشرة على الجهاز.
مثال على تشغيل نموذج على Android باستخدام Java API مع GPU Delegate. يتم إنشاء المفسر مع خيارات تتضمن مفوض 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 للاختبار قبل النشر. تسمح واجهة Python API لـ TFLite بتحميل .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 كيلوبايت. يتم تخصيص ذاكرة إضافية لموترات النموذج وتعتمد على حجم بيانات الإدخال وعدد العوامل ووضع الكمية.
مثيل واحد من المفسر غير آمن للخيوط. للتنفيذ المتوازي، قم بإنشاء مثيلات متعددة بنسخ منفصلة من النموذج. يستخدم كل مثيل ذاكرته الخاصة للموترات.
استخدم TFLite Support Library — فئة DelegatesApi. استدعِ DelegatesApi.getAvailableDelegates() للحصول على قائمة المفوضين المتاحين على جهاز معين.
تحقق من سلامة ملف .tflite عبر tf.lite.experimental.Analyzer. تأكد من أن النموذج محوّل للإصدار الصحيح من TFLite ويدعم العمليات المتاحة على الجهاز الهدف.
استخدم طريقة resizeInput(int idx, int[] dims) في Java API أو resizeInput(at:to:) في Swift. بعد تغيير الحجم، استدعِ allocateTensors() لإعادة تخصيص الذاكرة.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا