Ndërtoni LiteRT për Android

Ky dokument përshkruan se si të ndërtoni vetë bibliotekën LiteRT Android. Normalisht, nuk keni nevojë të ndërtoni lokalisht bibliotekën LiteRT Android.

Përdorni fotografitë e natës

Për të përdorur fotografitë e natës, shtoni depon e mëposhtme në konfigurimin tuaj të ndërtimit të Gradle root.

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

shtoni pamjet e çastit të natës në varësi (ose modifikoni sipas nevojës) në build.gradle tuaj

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

Ndërtoni LiteRT në vend

Në disa raste, mund të dëshironi të përdorni një ndërtim lokal të LiteRT. Për shembull, mund të ndërtoni një binar të personalizuar që përfshin operacione të zgjedhura nga TensorFlow , ose mund të dëshironi të bëni ndryshime lokale në LiteRT.

Konfiguro mjedisin e ndërtimit duke përdorur Docker

  • Shkarkoni skedarin Docker. Duke shkarkuar skedarin Docker, ju pranoni që kushtet e mëposhtme të shërbimit rregullojnë përdorimin tuaj të tij:

Duke klikuar për të pranuar, ju pranoni që i gjithë përdorimi i Android Studio dhe Android Native Development Kit do të udhëhiqet nga Marrëveshja e Licencës së Kompletit të Zhvillimit të Softuerit Android, e disponueshme në https://developer.android.com/studio/terms (URL e tillë mund të përditësohet ose ndryshohet nga Google herë pas here).

Duhet të pranoni kushtet e shërbimit për të shkarkuar skedarin.

  • Mund të ndryshoni opsionalisht versionin Android SDK ose NDK. Vendosni skedarin e shkarkuar Docker në një dosje bosh dhe ndërtoni imazhin tuaj docker duke ekzekutuar:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • Nisni kontejnerin docker në mënyrë interaktive duke montuar dosjen tuaj aktuale në /host_dir brenda kontejnerit (vini re se /tensorflow_src është depoja e TensorFlow brenda kontejnerit):
docker run -it -v $PWD:/host_dir tflite-builder bash

Nëse përdorni PowerShell në Windows, zëvendësoni "$PWD" me "pwd".

Nëse dëshironi të përdorni një depo TensorFlow në host, montoni atë direktori të hostit (-v hostDir:/host_dir).

  • Pasi të jeni brenda kontejnerit, mund të ekzekutoni sa vijon për të shkarkuar mjete dhe biblioteka shtesë Android (vini re se mund t'ju duhet të pranoni licencën):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

Tani duhet të vazhdoni te seksioni Konfiguro hapësirën e punës dhe .bazelrc për të konfiguruar cilësimet e ndërtimit.

Pasi të përfundoni ndërtimin e bibliotekave, mund t'i kopjoni ato në /host_dir brenda kontejnerit në mënyrë që të mund t'i qaseni ato në host.

Konfiguro mjedisin e ndërtimit pa Docker

Instaloni Bazel dhe parakushtet Android

Bazel është sistemi kryesor i ndërtimit për TensorFlow. Për të ndërtuar me të, duhet ta keni atë dhe Android NDK dhe SDK të instaluar në sistemin tuaj.

  1. Instaloni versionin më të fundit të sistemit të ndërtimit Bazel .
  2. Android NDK kërkohet për të ndërtuar kodin LiteRT amtar (C/C++). Versioni aktual i rekomanduar është 25b, i cili mund të gjendet këtu .
  3. Android SDK dhe mjetet e ndërtimit mund të merren këtu , ose në mënyrë alternative si pjesë e Android Studio . Build tools API >= 23 është versioni i rekomanduar për ndërtimin e LiteRT.

Konfiguro WORKSPACE dhe .bazelrc

Ky është një hap i konfigurimit një herë që kërkohet për të ndërtuar bibliotekat LiteRT. Ekzekutoni skriptin ./configure në direktorinë rrënjësore të blerjes së TensorFlow dhe përgjigjuni "Po" kur skripti kërkon të konfigurojë në mënyrë interaktive ndërtimet ./WORKSPACE për Android. Skripti do të përpiqet të konfigurojë cilësimet duke përdorur variablat e mjedisit të mëposhtëm:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Nëse këto variabla nuk janë caktuar, ato duhet të sigurohen në mënyrë interaktive në kërkesën e skriptit. Konfigurimi i suksesshëm duhet të japë hyrje të ngjashme me ato të mëposhtme në skedarin .tf_configure.bazelrc në dosjen rrënjë:

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"

Ndërtoni dhe instaloni

Pasi Bazel të jetë konfiguruar siç duhet, mund të ndërtoni LiteRT AAR nga direktoria e arkës rrënjësore si më poshtë:

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

Kjo do të gjenerojë një skedar AAR në bazel-bin/tensorflow/lite/java/ . Vini re se kjo krijon një AAR "të trashë" me disa arkitektura të ndryshme; nëse nuk ju duhen të gjitha, përdorni nëngrupin e përshtatshëm për mjedisin tuaj të vendosjes.

Ju mund të ndërtoni skedarë më të vegjël AAR që synojnë vetëm një grup modelesh si më poshtë:

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

Skripti i mësipërm do të gjenerojë skedarin tensorflow-lite.aar dhe opsionalisht skedarin tensorflow-lite-select-tf-ops.aar nëse njëri prej modeleve përdor Tensorflow ops. Për më shumë detaje, ju lutemi shihni seksionin Redukto madhësinë binare të LiteRT .

Shtoni AAR direkt në projekt

Zhvendosni skedarin tensorflow-lite.aar në një direktori të quajtur libs në projektin tuaj. Ndryshoni skedarin build.gradle të aplikacionit tuaj për t'iu referuar drejtorisë së re dhe zëvendësoni varësinë ekzistuese LiteRT me bibliotekën e re lokale, p.sh.

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

Instaloni AAR në depon lokale të Maven

Ekzekutoni komandën e mëposhtme nga direktoria juaj e arkës rrënjësore:

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 të aplikacionit tuaj, sigurohuni që të keni varësinë mavenLocal() dhe zëvendësoni varësinë standarde të LiteRT me atë që ka mbështetje për opsione të zgjedhura 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'
}

Vini re se versioni 0.1.100 këtu është thjesht për hir të testimit/zhvillimit. Me AAR-in lokal të instaluar, mund të përdorni API-të standarde të konkluzionit të LiteRT Java në kodin e aplikacionit tuaj.