LiteRT لأجهزة Android

تتيح لك LiteRT تشغيل نماذج TensorFlow وPyTorch وJAX في تطبيقات Android. يوفر نظام LiteRT بيئات تنفيذ مُعدّة مسبقًا وقابلة للتخصيص لتشغيل النماذج على Android بسرعة وكفاءة، بما في ذلك خيارات تسريع الأجهزة.

على سبيل المثال، بالنسبة إلى تطبيقات Android التي تستخدم LiteRT، يُرجى الاطّلاع على مستودع عينات LiteRT.

نماذج تعلُّم الآلة

تستخدم LiteRT نماذج TensorFlow وPyTorch وJAX التي يتم تحويلها إلى تنسيق أصغر وأكثر قابلية للنقل وأكثر كفاءة لنماذج تعلُّم الآلة. يمكنك استخدام نماذج مُنشأة مسبقًا مع LiteRT على Android، أو إنشاء نماذجك الخاصة وتحويلها إلى تنسيق LiteRT.

تتناول هذه الصفحة استخدام نماذج تعلُّم الآلة التي تم إنشاؤها مسبقًا، ولا تغطي إنشاء النماذج أو تدريبها أو اختبارها أو تحويلها. يمكنك الاطّلاع على مزيد من المعلومات حول اختيار نماذج تعلُّم الآلة وتعديلها وإنشائها وتحويلها إلى LiteRT في صفحة النماذج.

تشغيل النماذج على Android

يتلقّى نموذج LiteRT الذي يتم تشغيله داخل تطبيق Android البيانات ويعالجها وينشئ توقّعًا استنادًا إلى منطق النموذج. يتطلّب نموذج LiteRT بيئة وقت تشغيل خاصة لتنفيذه، ويجب أن تكون البيانات التي يتم تمريرها إلى النموذج بتنسيق بيانات محدّد يُعرف باسم موتر. عندما يعالج أحد النماذج البيانات، وهي عملية تُعرف باسم الاستدلال، ينتج عنه نتائج توقعات على شكل موترات جديدة، ويتم تمريرها إلى تطبيق Android ليتمكّن من اتّخاذ إجراء، مثل عرض النتيجة للمستخدم أو تنفيذ منطق أعمال إضافي.

مسار التنفيذ الوظيفي لنماذج LiteRT في تطبيقات Android

الشكل 1. مسار التنفيذ الوظيفي لنماذج LiteRT في تطبيقات Android

على مستوى التصميم الوظيفي، يحتاج تطبيق Android إلى العناصر التالية لتشغيل نموذج LiteRT:

  • بيئة وقت التشغيل LiteRT لتنفيذ النموذج
  • معالج إدخال النموذج لتحويل البيانات إلى موترات
  • معالج نواتج النموذج لتلقّي موترات نتائج النواتج وتفسيرها كنتائج تنبؤ

توضّح الأقسام التالية كيف توفّر مكتبات وأدوات LiteRT هذه العناصر الوظيفية.

إنشاء تطبيقات باستخدام LiteRT

يوضّح هذا القسم المسار الأكثر شيوعًا والمقترَح لتنفيذ LiteRT في تطبيق Android. ويجب التركيز بشكل خاص على قسمَي بيئة وقت التشغيل ومكتبات التطوير. إذا كنت قد طوّرت نموذجًا مخصّصًا، احرص على مراجعة قسم مسارات التطوير المتقدّمة.

خيارات بيئة وقت التشغيل

هناك عدّة طرق يمكنك من خلالها تفعيل بيئة وقت تشغيل لتنفيذ النماذج في تطبيق Android، وفي ما يلي الخيارات المفضّلة:

بشكل عام، عليك استخدام بيئة وقت التشغيل التي توفّرها "خدمات Google Play" لأنّها أكثر فعالية من حيث المساحة مقارنةً بالبيئة العادية، إذ يتم تحميلها بشكل ديناميكي، ما يحافظ على صغر حجم تطبيقك. تستخدم "خدمات Google Play" أيضًا تلقائيًا أحدث إصدار ثابت من وقت تشغيل LiteRT، ما يمنحك ميزات إضافية وأداءً محسّنًا بمرور الوقت. إذا كنت توفّر تطبيقك على أجهزة لا تتضمّن "خدمات Google Play" أو كنت بحاجة إلى إدارة بيئة وقت تشغيل تعلُّم الآلة عن كثب، عليك استخدام وقت التشغيل العادي LiteRT. يجمع هذا الخيار رمزًا إضافيًا في تطبيقك، ما يتيح لك التحكّم بشكل أكبر في وقت تشغيل تعلُّم الآلة في تطبيقك، ولكن على حساب زيادة حجم تنزيل تطبيقك.

يمكنك الوصول إلى بيئات وقت التشغيل هذه في تطبيق Android من خلال إضافة مكتبات تطوير LiteRT إلى بيئة تطوير التطبيق. للحصول على معلومات حول كيفية استخدام بيئات وقت التشغيل العادية في تطبيقك، اطّلِع على القسم التالي.

المكتبات

يمكنك الوصول إلى Interpreter API باستخدام خدمات Google Play. يمكنك استخدام مكتبتَي الأساسية والدعم في LiteRT في تطبيق Android. وللحصول على تفاصيل البرمجة حول استخدام مكتبات LiteRT وبيئات وقت التشغيل، يُرجى الاطّلاع على أدوات التطوير لنظام التشغيل Android.

الحصول على نماذج

يتطلّب تشغيل نموذج في تطبيق Android نموذجًا بتنسيق LiteRT. يمكنك استخدام نماذج مُنشأة مسبقًا أو إنشاء نموذج وتحويله إلى تنسيق Lite. لمزيد من المعلومات حول الحصول على نماذج لتطبيق Android، يُرجى الاطّلاع على صفحة النماذج في LiteRT.

التعامل مع بيانات الإدخال

يجب أن تكون أي بيانات تنقلها إلى نموذج تعلُّم آلي عبارة عن موتر ذي بنية بيانات محددة، ويُطلق عليها غالبًا شكل الموتر. لمعالجة البيانات باستخدام نموذج، يجب أن يحوّل رمز تطبيقك البيانات من تنسيقها الأصلي، مثل بيانات الصور أو النصوص أو الصوت، إلى موتر بالشكل المطلوب لنموذجك.

تنفيذ الاستنتاجات

تُعرف معالجة البيانات من خلال نموذج لإنشاء نتيجة توقّعية باسم تنفيذ استنتاج. يتطلّب تنفيذ استنتاج في تطبيق Android بيئة وقت تشغيل LiteRT ونموذجًا وبيانات إدخال.

تعتمد السرعة التي يمكن للنموذج من خلالها إنشاء استنتاج على جهاز معيّن على حجم البيانات التي تتم معالجتها ومدى تعقيد النموذج وموارد الحوسبة المتاحة، مثل الذاكرة ووحدة المعالجة المركزية أو المعالِجات المتخصّصة المعروفة باسم المسرّعات. يمكن تشغيل نماذج تعلُّم الآلة بشكل أسرع على هذه المعالِجات المتخصّصة، مثل وحدات معالجة الرسومات (GPU) ووحدات معالجة الموتّرات (TPU)، وذلك باستخدام برامج تشغيل الأجهزة LiteRT التي تُعرف باسم المفوّضين. لمزيد من المعلومات حول المفوّضين وتسريع معالجة النماذج باستخدام الأجهزة، يُرجى الاطّلاع على نظرة عامة حول تسريع معالجة النماذج باستخدام الأجهزة.

التعامل مع نتائج الإخراج

تنشئ النماذج نتائج التوقّعات على شكل موترات، ويجب أن يتعامل تطبيق Android معها من خلال اتّخاذ إجراء أو عرض نتيجة للمستخدم. يمكن أن تكون نتائج النموذج بسيطة، مثل رقم يتوافق مع نتيجة واحدة (0 = كلب، 1 = قطة، 2 = طائر) لتصنيف صورة، أو نتائج أكثر تعقيدًا، مثل مربعات حدود متعددة لعدة عناصر مصنّفة في صورة، مع تقييمات ثقة التوقّع بين 0 و1.

مسارات التطوير المتقدّمة

عند استخدام نماذج LiteRT أكثر تطورًا وتخصيصًا، قد تحتاج إلى استخدام أساليب تطوير أكثر تقدمًا مما هو موضح أعلاه. توضّح الأقسام التالية تقنيات متقدّمة لتنفيذ النماذج وتطويرها لاستخدامها مع LiteRT في تطبيقات Android.

بيئات وقت التشغيل المتقدّمة

بالإضافة إلى بيئات وقت التشغيل العادية وبيئات وقت التشغيل لخدمات Google Play في LiteRT، تتوفّر بيئات وقت تشغيل إضافية يمكنك استخدامها مع تطبيق Android. ويُرجّح استخدام هذه البيئات إذا كان لديك نموذج تعلُّم آلي يستخدِم عمليات تعلُّم آلي غير متوافقة مع بيئة وقت التشغيل العادية في LiteRT.

يتيح لك وقت التشغيل المرن في LiteRT تضمين عوامل تشغيل معيّنة يتطلّبها النموذج. كخيار متقدّم لتشغيل النموذج، يمكنك إنشاء LiteRT لنظام التشغيل Android لتضمين عوامل التشغيل والوظائف الأخرى المطلوبة لتشغيل نموذج تعلُّم الآلة في TensorFlow. لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء LiteRT لنظام التشغيل Android.

واجهات برمجة التطبيقات C وC++

توفّر LiteRT أيضًا واجهة برمجة تطبيقات لتشغيل النماذج باستخدام C وC++. إذا كان تطبيقك يستخدم Android NDK، ننصحك باستخدام واجهة برمجة التطبيقات هذه. يمكنك أيضًا استخدام واجهة برمجة التطبيقات هذه إذا كنت تريد مشاركة الرمز بين منصات متعددة. لمزيد من المعلومات حول خيار التطوير هذا، يُرجى الاطّلاع على صفحة أدوات التطوير.

تنفيذ النموذج المستند إلى الخادم

بشكل عام، يجب تشغيل النماذج في تطبيقك على جهاز Android للاستفادة من وقت الاستجابة الأقصر وتحسين خصوصية البيانات للمستخدمين. ومع ذلك، هناك حالات يكون فيها تشغيل نموذج على خادم سحابي خارج الجهاز حلاً أفضل. على سبيل المثال، إذا كان لديك نموذج كبير لا يمكن ضغطه بسهولة إلى حجم يتناسب مع أجهزة Android الخاصة بالمستخدمين، أو لا يمكن تنفيذه بأداء معقول على هذه الأجهزة. قد يكون هذا الأسلوب أيضًا الحلّ المفضّل لديك إذا كانت الأولوية القصوى هي تحقيق أداء ثابت للنموذج على مجموعة كبيرة من الأجهزة.

تقدّم Google Cloud مجموعة كاملة من الخدمات لتشغيل نماذج الذكاء الاصطناعي. لمزيد من المعلومات، يُرجى الاطّلاع على صفحة منتجات الذكاء الاصطناعي وتعلُّم الآلة في Google Cloud.

تطوير النماذج المخصّصة وتحسينها

من المرجّح أن تتضمّن مسارات التطوير الأكثر تقدّمًا إنشاء نماذج مخصّصة لتعلُّم الآلة وتحسين هذه النماذج لاستخدامها على أجهزة Android. إذا كنت تخطّط لإنشاء نماذج مخصّصة، احرص على تطبيق تقنيات التكميم على النماذج لتقليل تكاليف الذاكرة والمعالجة. لمزيد من المعلومات حول كيفية إنشاء نماذج عالية الأداء لاستخدامها مع LiteRT، راجِع أفضل ممارسات الأداء في قسم "النماذج".

إصدارات Android المتوافقة

إصدار LiteRT الحالة الحد الأدنى لمستوى حزمة SDK الحد الأدنى لإصدار NDK (في حال استخدامه) تاريخ الإصدار
v1.2.0 ⚠️ متوقّف نهائيًا 21 (Android 5 Lollipop) r26a 2025-03-13
v1.3.0 ⚠️ متوقّف نهائيًا 21 (Android 5 Lollipop) r26a 2025-05-19
v1.4.0 ⚠️ متوقّف نهائيًا 26 (Android 8 Oreo) r26a 2025-06-25
v1.4.1 ✅ نشط 21 (Android 5 Lollipop) r26a 2025-11-07
v2.0.3 ✅ نشط 26 (Android 8 Oreo) r26a 2025-11-08
v2.1.0 قريبًا 23 (الإصدار 6 من نظام التشغيل Android المعروف باسم Marshmallow) r26a لم يتم إصداره بعد

ملاحظة مهمة: احرص على تحديث التبعيات لضمان التوافق مع أحدث الميزات وتحديثات الأمان.

الفرق بين Compiled Model API وInterpreter API

  • واجهة برمجة التطبيقات "النموذج المجمّع": التنفيذ المجمّع أثناء التنفيذ أو مسبقًا مع إمكانية التشغيل التفاعلي الموحّد للمخزن المؤقت وخطوط الأنابيب غير المتزامنة، مع إعطاء الأولوية للمسرّع
  • Interpreter API: متوافق مع الإصدارات القديمة من الرموز البرمجية الحالية بتنسيق TensorFlow Lite.

يمكنك اختيار أيّ من واجهتَي برمجة التطبيقات في وقت التشغيل، وتتوفّر معظم ميزات الأداء والتسريع الجديدة في واجهة برمجة التطبيقات "النموذج المجمَّع".

للاطّلاع على أمثلة على عمليات التنفيذ، يُرجى الرجوع إلى:

السمات المشتركة ووحدة المعالجة المركزية

ميزة وقت التشغيل Interpreter API Compiled Model API
إنشاء الملفات التعريفية
أداة الإبلاغ عن الأخطاء
إمكانية التشغيل التفاعلي لمخزن I/O المؤقت (TensorBuffer/Environment) --
اختيار أداة تسريع جاهزة للاستخدام --
Sync exec
عملية مخصّصة
إعدادات XNNPACK
الشكل الديناميكي

وحدة معالجة الرسومات

ميزة وقت التشغيل Interpreter API Compiled Model API
Sync exec
التخزين المؤقت في الذاكرة
الرجوع إلى وحدة المعالجة المركزية
التنفيذ غير المتزامن --
المخزن المؤقت الذي لا يتطلّب نسخًا (AHWB/GLBuffer/Texture) --
MLD OpenCL backend
برنامج MLD الخلفي في WebGPU (جديد) --
إتاحة استخدام MLD Metal (جديد) --

وحدة المعالجة العصبية (NPU)

ميزة وقت التشغيل Interpreter API Compiled Model API
Sync exec
التنفيذ غير المتزامن (Pixel) --
الرجوع إلى وحدة المعالجة المركزية
الخيار الاحتياطي لوحدة معالجة الرسومات --
Zero-buffer-copy (AHWB) --
QC/MTK AOT --
Pixel AOT --
QC/MTK/Pixel JIT --

دليل البدء السريع (Compiled Model API)

يتضمّن تشغيل الاستدلال باستخدام Compiled Model API الخطوات الرئيسية التالية:

  1. حمِّل نموذجًا متوافقًا.
  2. خصِّص مخازن مؤقتة لموترات الإدخال والإخراج.
  3. استدعاء النموذج المجمَّع
  4. قراءة الاستنتاجات في مخزن مؤقت للإخراج

تعرض مقتطفات الرموز البرمجية التالية عملية التنفيذ الأساسية للعملية بأكملها في Kotlin وC++.

C++‎

// Load model and initialize runtime
LITERT_ASSIGN_OR_RETURN(auto model, Model::CreateFromFile("mymodel.tflite"));
LITERT_ASSIGN_OR_RETURN(auto env, Environment::Create({}));
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
    CompiledModel::Create(env, model, kLiteRtHwAcceleratorCpu));

// Preallocate input/output buffers
LITERT_ASSIGN_OR_RETURN(auto input_buffers, compiled_model.CreateInputBuffers());
LITERT_ASSIGN_OR_RETURN(auto output_buffers, compiled_model.CreateOutputBuffers());

// Fill the first input
float input_values[] = { /* your data */ };
input_buffers[0].Write<float>(absl::MakeConstSpan(input_values, /*size*/));

// Invoke
compiled_model.Run(input_buffers, output_buffers);

// Read the output
std::vector<float> data(output_data_size);
output_buffers[0].Read<float>(absl::MakeSpan(data));

Kotlin

// Load model and initialize runtime
val  model =
    CompiledModel.create(
        context.assets,
        "mymodel.tflite",
        CompiledModel.Options(Accelerator.CPU)
    )

// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

// Invoke
model.run(inputBuffers, outputBuffers)

// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

لمزيد من المعلومات، يُرجى الاطّلاع على الدليلَين بدء استخدام Kotlin وبدء استخدام C++‎.

الإمكانات الأساسية (واجهة برمجة التطبيقات للنماذج المجمّعة)

  • اختيار مسرِّع جاهز للاستخدام وتنفيذ غير متزامن: يمكنك اختيار وحدة المعالجة المركزية أو وحدة معالجة الرسومات أو وحدة المعالجة العصبية في وقت الإنشاء وتنفيذ عملية غير متزامنة بدون الحاجة إلى إعدادات إضافية.
  • مخازن مؤقتة موحّدة بدون نسخ: مشاركة المخازن المؤقتة AHWB/GL/OpenCL/WebGPU/Metal في عمليات المعالجة المسبقة واللاحقة والاستنتاج
  • سرعة معالجة متوافقة مع الذكاء الاصطناعي التوليدي: تم تحسينها للنماذج الكبيرة من خلال التخزين المؤقت للذاكرة وعمليات الاحتياط لوحدة معالجة الرسومات/وحدة المعالجة العصبية.

تظلّ واجهة برمجة التطبيقات Interpreter API هي مسار التوافق لقواعد رموز TensorFlow Lite الحالية، لذا استخدِمها عندما تحتاج إلى سلوك ثابت للمفوّضين أو برامج تضمين تابعة لجهات خارجية تتوقّع المفسّر الكلاسيكي.

مسرّعات الأعمال

  • وحدة المعالجة المركزية (الإعداد التلقائي): تم تحسينها باستخدام XNNPACK، وتتوافق مع الأشكال الديناميكية.
  • وحدة معالجة الرسومات: تتوفّر حاليًا خلفية OpenCL، بينما تتوفّر خلفيتا WebGPU وMetal من خلال واجهة برمجة التطبيقات Compiled Model API.
  • وحدة المعالجة العصبية (NPU): تتوافق مع Qualcomm AI Engine Direct وMediaTek NeuroPilot في وضعَي "الترجمة الفورية" و"التجميع في الوقت الفعلي"، وتتوفّر ميزة "الترجمة الفورية" من Pixel، ومن المخطّط توفير التوافق مع وحدات المعالجة العصبية من Apple وIntel.

حالات اختيار واجهة برمجة تطبيقات

  • استخدِم Compiled Model API عندما تريد أسرع مسار إلى وحدة معالجة الرسومات (GPU) أو وحدة المعالجة العصبية (NPU) أو المخازن المؤقتة التي لا تتطلّب نسخًا أو التنفيذ غير المتزامن.
  • استخدِم Interpreter API عندما تحتاج إلى تحقيق أقصى توافق مع الرموز أو الأدوات أو المفوّضين الحاليين في TensorFlow Lite.