In diesem Dokument wird beschrieben, wie Sie die LiteRT-Android-Bibliothek selbst erstellen. Normalerweise müssen Sie die LiteRT-Android-Bibliothek nicht lokal erstellen.
Nightly Snapshots verwenden
Wenn Sie Nightly Snapshots verwenden möchten, fügen Sie das folgende Repository Ihrer Gradle-Build-Konfiguration im Stammverzeichnis hinzu.
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'
}
}
}
Fügen Sie Ihren build.gradle-Abhängigkeiten Nightly Snapshots hinzu (oder bearbeiten Sie sie nach Bedarf).
...
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 lokal erstellen
In einigen Fällen möchten Sie möglicherweise einen lokalen Build von LiteRT verwenden. Möglicherweise erstellen Sie beispielsweise eine benutzerdefinierte Binärdatei, die aus TensorFlow ausgewählte Vorgänge enthält, oder Sie möchten lokale Änderungen an LiteRT vornehmen.
Build-Umgebung mit Docker einrichten
- Laden Sie die Docker-Datei herunter. Durch das Herunterladen der Docker-Datei stimmen Sie zu, dass Ihre Nutzung den folgenden Nutzungsbedingungen unterliegt:
Durch Klicken auf „Akzeptieren“ stimmen Sie hiermit zu, dass die gesamte Nutzung von Android Studio und dem Android Native Development Kit der Lizenzvereinbarung für das Android Software Development Kit unterliegt, die unter https://developer.android.com/studio/terms verfügbar ist (diese URL kann von Google von Zeit zu Zeit aktualisiert oder geändert werden).
Sie müssen die Nutzungsbedingungen bestätigen, um die Datei herunterzuladen.- Optional können Sie die Android SDK- oder NDK-Version ändern. Legen Sie die heruntergeladene Docker-Datei in einem leeren Ordner ab und erstellen Sie Ihr Docker-Image mit folgendem Befehl:
docker build . -t tflite-builder -f tflite-android.Dockerfile
- Starten Sie den Docker-Container interaktiv, indem Sie Ihren aktuellen Ordner im Container in /host_dir einbinden. Beachten Sie, dass /tensorflow_src das TensorFlow-Repository im Container ist:
docker run -it -v $PWD:/host_dir tflite-builder bash
Wenn Sie PowerShell unter Windows verwenden, ersetzen Sie „$PWD“ durch „pwd“.
Wenn Sie ein TensorFlow-Repository auf dem Host verwenden möchten, stellen Sie stattdessen dieses Hostverzeichnis bereit (-v hostDir:/host_dir).
- Wenn Sie sich im Container befinden, können Sie mit dem folgenden Befehl zusätzliche Android-Tools und ‑Bibliotheken herunterladen. Möglicherweise müssen Sie die Lizenz akzeptieren:
sdkmanager \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platform-tools" \
"platforms;android-${ANDROID_API_LEVEL}"
Fahren Sie nun mit dem Abschnitt WORKSPACE und .bazelrc konfigurieren fort, um die Buildeinstellungen zu konfigurieren.
Nachdem Sie die Bibliotheken erstellt haben, können Sie sie in den Container in das Verzeichnis „/host_dir“ kopieren, damit Sie auf dem Host darauf zugreifen können.
Build-Umgebung ohne Docker einrichten
Bazel und Android-Voraussetzungen installieren
Bazel ist das primäre Build-System für TensorFlow. Um damit zu entwickeln, müssen Sie es sowie das Android NDK und SDK auf Ihrem System installiert haben.
- Installieren Sie die aktuelle Version des Bazel-Buildsystems.
- Das Android NDK ist erforderlich, um den nativen (C/C++) LiteRT-Code zu erstellen. Die aktuelle empfohlene Version ist 25b. Sie finden Sie hier.
- Das Android SDK und die Build-Tools sind hier oder als Teil von Android Studio erhältlich. Build-Tools: API >= 23 ist die empfohlene Version zum Erstellen von LiteRT.
WORKSPACE und .bazelrc konfigurieren
Dies ist ein einmaliger Konfigurationsschritt, der zum Erstellen der LiteRT-Bibliotheken erforderlich ist. Führen Sie das Skript ./configure im Stammverzeichnis des TensorFlow-Checkouts aus und antworten Sie mit „Yes“ (Ja), wenn das Skript Sie auffordert, die ./WORKSPACE für Android-Builds interaktiv zu konfigurieren. Das Skript versucht, Einstellungen mit den folgenden Umgebungsvariablen zu konfigurieren:
ANDROID_SDK_HOMEANDROID_SDK_API_LEVELANDROID_NDK_HOMEANDROID_NDK_API_LEVEL
Wenn diese Variablen nicht festgelegt sind, müssen sie interaktiv im Skript-Prompt angegeben werden. Bei einer erfolgreichen Konfiguration sollten in der Datei .tf_configure.bazelrc im Stammordner Einträge wie die folgenden vorhanden sein:
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"
Erstellen und installieren
Sobald Bazel richtig konfiguriert ist, können Sie das LiteRT-AAR-Paket aus dem Stammverzeichnis des Check-outs erstellen:
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
Dadurch wird eine AAR-Datei in bazel-bin/tensorflow/lite/java/ generiert. Beachten Sie, dass dadurch eine „Fat“-AAR mit mehreren verschiedenen Architekturen erstellt wird. Wenn Sie nicht alle benötigen, verwenden Sie die für Ihre Bereitstellungsumgebung geeignete Teilmenge.
Sie können kleinere AAR-Dateien erstellen, die nur auf eine Reihe von Modellen ausgerichtet sind:
bash tensorflow/lite/tools/build_aar.sh \
--input_models=model1,model2 \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a
Mit dem oben genannten Skript wird die Datei tensorflow-lite.aar und optional die Datei tensorflow-lite-select-tf-ops.aar generiert, wenn eines der Modelle Tensorflow-Vorgänge verwendet. Weitere Informationen finden Sie im Abschnitt LiteRT-Binärgröße reduzieren.
AAR direkt zum Projekt hinzufügen
Verschieben Sie die Datei tensorflow-lite.aar in ein Verzeichnis mit dem Namen libs in Ihrem Projekt. Ändern Sie die Datei build.gradle Ihrer App, um auf das neue Verzeichnis zu verweisen, und ersetzen Sie die vorhandene LiteRT-Abhängigkeit durch die neue lokale Bibliothek, z.B.:
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 im lokalen Maven-Repository installieren
Führen Sie den folgenden Befehl in Ihrem Stammverzeichnis aus:
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
Prüfen Sie, ob in der build.gradle Ihrer App die mavenLocal()-Abhängigkeit vorhanden ist, und ersetzen Sie die standardmäßige LiteRT-Abhängigkeit durch die Abhängigkeit, die Unterstützung für ausgewählte TensorFlow-Operationen bietet:
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'
}
Die 0.1.100-Version hier dient nur zu Test- und Entwicklungszwecken. Nachdem Sie die lokale AAR-Datei installiert haben, können Sie die standardmäßigen LiteRT Java-Inferenz-APIs in Ihrem App-Code verwenden.