إصدار 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'
        }
    }
}

إضافة لقطات ليلية إلى العناصر التابعة (أو تعديلها حسب الحاجة) إلى create.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 (قد يتم تعديل أو تغيير عنوان URL هذا Google من حين لآخر).

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

  • يمكنك اختياريًا تغيير إصدار حزمة تطوير البرامج (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 على المضيف، حمِّل هذا المضيف الدليل بدلاً من ذلك (-vhostDir:/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. للبناء باستخدامها، يجب عليك تثبيت Android NDK وحزمة تطوير البرامج (SDK) على نظامك.

  1. ثبِّت أحدث إصدار من نظام إصدار Bazel.
  2. يجب توفّر Android NDK لإنشاء الإصدار الأصلي (C/C++) LiteRT الرمز. الإصدار المقترَح الحالي هو 25b، ويمكن العثور عليه هنا.
  3. يمكن الحصول على حزمة تطوير البرامج (SDK) لنظام التشغيل Android وأدوات التصميم. هنا، أو بدلاً من ذلك كجزء من استوديو Android: طوِّر Tools API >= 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 بشكل صحيح، يمكنك إنشاء LiteRT AAR من دليل الدفع الجذري على النحو التالي:

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 أصغر حجمًا تستهدف مجموعة من النماذج فقط على النحو التالي:

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

إضافة ميزة "التطبيق التلقائي للاقتراحات" مباشرةً إلى المشروع

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

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')
}

تثبيت ميزة "التطبيق التلقائي للاقتراحات" في مستودع 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 هنا هو فقط للاختبار/التطوير. عند تثبيت ميزة "الاقتراحات المطبّقة تلقائيًا" المحلية، يمكنك استخدام واجهات برمجة تطبيقات استنتاج LiteRT Java في الرمز البرمجي لتطبيقك.