إصدار LiteRT لأجهزة Android

يوضّح هذا المستند كيفية إنشاء مكتبة LiteRT Android بنفسك. في العادة، لن تحتاج إلى إنشاء مكتبة LiteRT Android محليًا.

استخدام "اللقطات الليلية"

لاستخدام اللقطات الليلية، أضِف المستودع التالي إلى إعدادات إصدار Gradle الجذر.

allprojects {
    repositories {      // should be already there
        mavenCentral()  // should be already there
        maven {         // add this repo to use snapshots
          name 'ossrh-snapshot'
          url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
    }
}

إضافة لقطات ليلية إلى التبعيات (أو تعديلها حسب الحاجة) في ملف build.gradle

...
dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    implementation 'com.google.ai.edge.litert:litert-gpu:0.0.0-nightly-SNAPSHOT'
    implementation 'com.google.ai.edge.litert:litert-support:0.0.0-nightly-SNAPSHOT'
    ...
}
...

إنشاء LiteRT محليًا

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

إعداد بيئة الإنشاء باستخدام Docker

  • نزِّل ملف Docker. يعني تنزيل ملف Docker أنّك توافق على أن تحكم بنود الخدمة التالية استخدامك له:

من خلال النقر على زر القبول، أنت توافق بموجب هذا على أنّ جميع استخدامات "استوديو Android" و"حزمة تطوير البرامج الأصلية لنظام Android" ستخضع "لاتفاقية الترخيص الخاصة بحزمة تطوير البرامج لنظام Android" المتوفّرة على الرابط https://developer.android.com/studio/terms (يجوز لشركة Google تعديل عنوان URL هذا أو تغييره من حين لآخر).

يجب الموافقة على بنود الخدمة لتنزيل الملف.

  • يمكنك اختياريًا تغيير إصدار حزمة تطوير البرامج (SDK) أو حزمة التطوير الأصلية (NDK) لنظام التشغيل Android. ضَع ملف Docker الذي تم تنزيله في مجلد فارغ وأنشئ صورة Docker من خلال تنفيذ ما يلي:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • ابدأ تشغيل حاوية Docker بشكل تفاعلي عن طريق ربط المجلد الحالي بـ /host_dir داخل الحاوية (يُرجى العِلم أنّ /tensorflow_src هو مستودع TensorFlow داخل الحاوية):
docker run -it -v $PWD:/host_dir tflite-builder bash

إذا كنت تستخدم PowerShell على Windows، استبدِل "$PWD" بـ "pwd".

إذا أردت استخدام مستودع TensorFlow على المضيف، يمكنك ربط دليل المضيف بدلاً من ذلك (-v hostDir:/host_dir).

  • بعد الدخول إلى الحاوية، يمكنك تنفيذ ما يلي لتنزيل أدوات ومكتبات Android إضافية (يُرجى العِلم أنّه قد يكون عليك قبول الترخيص):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

عليك الآن الانتقال إلى قسم ضبط WORKSPACE و .bazelrc لضبط إعدادات الإنشاء.

بعد الانتهاء من إنشاء المكتبات، يمكنك نسخها إلى /host_dir داخل الحاوية لتتمكّن من الوصول إليها على المضيف.

إعداد بيئة الإنشاء بدون Docker

تثبيت Bazel ومتطلبات Android الأساسية

‫Bazel هو نظام الإنشاء الأساسي في TensorFlow. ولإنشاء تطبيقات باستخدام هذه الحزمة، يجب أن تكون مثبّتة على نظامك مع حزمة تطوير البرامج (SDK) وحزمة Native Development Kit (NDK) لنظام التشغيل Android.

  1. ثبِّت أحدث إصدار من نظام Bazel build.
  2. يجب توفُّر Android NDK لإنشاء الرمز البرمجي الأصلي (C/C++) لـ LiteRT. الإصدار الحالي الموصى به هو 25b، ويمكنك العثور عليه هنا.
    1. يمكن الحصول على حزمة تطوير البرامج (SDK) لنظام التشغيل Android وأدوات الإنشاء هنا، أو كجزء من استوديو Android. أدوات الإنشاء يُنصح باستخدام الإصدار 23 أو إصدار أحدث من واجهة برمجة التطبيقات لإنشاء LiteRT.

ضبط WORKSPACE و .bazelrc

هذه خطوة إعداد لمرة واحدة مطلوبة لإنشاء مكتبات LiteRT. نفِّذ النص البرمجي ./configure في دليل جذر TensorFlow الذي تم استخراجه، وأجب بـ "نعم" عندما يطلب منك النص البرمجي ضبط ./WORKSPACE بشكل تفاعلي لعمليات إنشاء Android. سيحاول النص البرمجي ضبط الإعدادات باستخدام متغيرات البيئة التالية:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

إذا لم يتم ضبط هذه المتغيرات، يجب تقديمها بشكل تفاعلي في طلب البرنامج النصي. يجب أن يؤدي الإعداد الناجح إلى ظهور إدخالات مشابهة لما يلي في الملف .tf_configure.bazelrc في المجلد الجذر:

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r25b"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="30.0.3"
build --action_env ANDROID_SDK_API_LEVEL="30"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"

إنشاء التطبيق وتثبيته

بعد ضبط Bazel بشكل صحيح، يمكنك إنشاء ملف AAR الخاص بمكتبة LiteRT من دليل استخراج المصدر الرئيسي على النحو التالي:

bazel build -c opt --cxxopt=--std=c++17 --config=android_arm64 \
  --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --define=android_dexmerger_tool=d8_dexmerger \
  --define=android_incremental_dexing_tool=d8_dexbuilder \
  //tensorflow/lite/java:tensorflow-lite

سيؤدي ذلك إلى إنشاء ملف AAR في bazel-bin/tensorflow/lite/java/. يُرجى العِلم أنّ هذا الإجراء ينشئ ملف AAR "ضخمًا" يتضمّن عدة بنى مختلفة. وإذا لم تكن بحاجة إلى كل هذه البنى، استخدِم المجموعة الفرعية المناسبة لبيئة النشر.

يمكنك إنشاء ملفات AAR أصغر تستهدف مجموعة من النماذج فقط على النحو التالي:

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

سينشئ النص البرمجي أعلاه الملف tensorflow-lite.aar وملف tensorflow-lite-select-tf-ops.aar اختياريًا إذا كان أحد النماذج يستخدم عمليات Tensorflow. لمزيد من التفاصيل، يُرجى الاطّلاع على القسم تقليل حجم ملف LiteRT الثنائي.

إضافة AAR مباشرةً إلى المشروع

انقل ملف tensorflow-lite.aar إلى دليل باسم libs في مشروعك. عدِّل ملف build.gradle في تطبيقك للإشارة إلى الدليل الجديد واستبدِل التبعية الحالية في LiteRT بالمكتبة المحلية الجديدة، على سبيل المثال:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}

تثبيت ملف AAR في مستودع Maven المحلي

نفِّذ الأمر التالي من دليل استخراج الجذر:

mvn install:install-file \
  -Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar

في ملف build.gradle الخاص بتطبيقك، تأكَّد من توفُّر الاعتمادية mavenLocal() واستبدِل الاعتمادية العادية في LiteRT بالاعتمادية التي تتوافق مع عمليات TensorFlow المحدّدة:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}

يُرجى العِلم أنّ الإصدار 0.1.100 هنا مخصّص فقط لأغراض الاختبار والتطوير. بعد تثبيت ملف AAR المحلي، يمكنك استخدام واجهات برمجة التطبيقات العادية للاستدلال في LiteRT Java في رمز تطبيقك.