LiteRT für Android erstellen

In diesem Dokument wird beschrieben, wie Sie eine LiteRT-Android-Bibliothek auf Ihrem gehören. Normalerweise ist es nicht erforderlich, die LiteRT-Android-Bibliothek lokal zu erstellen.

Snapshots in der Nacht verwenden

Wenn Sie nächtliche Snapshots verwenden möchten, fügen Sie Ihrem Gradle-Root-Build das folgende Repository hinzu: config.

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 den Abhängigkeiten nächtliche Snapshots hinzu (oder bearbeiten Sie sie nach Bedarf) in Ihrer build.gradle-Datei

...
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 LiteRT-Build verwenden. Für Beispiel: Sie erstellen eine benutzerdefinierte Binärdatei, die aus TensorFlow ausgewählte Vorgänge, oder lokale Änderungen an LiteRT vornehmen.

Build-Umgebung mit Docker einrichten

  • Laden Sie die Dockerfile herunter. Durch das Herunterladen der Dockerfile stimmen Sie zu, dass die gelten die folgenden Nutzungsbedingungen:

Indem du auf „Akzeptieren“ klickst, erklärst du dich damit einverstanden, dass jegliche Nutzung von Android Studio und Android Native Development Kit unterliegt der Android-Software Die Lizenzvereinbarung für das Development Kit ist verfügbar unter https://developer.android.com/studio/terms (Diese URL kann aktualisiert oder geändert werden) von Google veröffentlicht werden.

Sie müssen die Nutzungsbedingungen akzeptieren, um die -Datei.

  • Optional können Sie das Android SDK oder die NDK-Version ändern. Heruntergeladene Datei speichern in einem leeren Ordner öffnen und mit dem folgenden Befehl das Docker-Image erstellen:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • Starten Sie den Docker-Container interaktiv, indem Sie den aktuellen Ordner hier bereitstellen: /host_dir innerhalb des Containers (beachten Sie, dass /tensorflow_src die TensorFlow-Konfiguration ist). Repository im Container):
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 diesen Host bereit. (-v hostDir:/host_dir).

  • Sobald Sie sich im Container befinden, können Sie den folgenden Befehl ausführen, um die Datei herunterzuladen. zusätzliche Android-Tools und -Bibliotheken verwenden (möglicherweise müssen Sie die Lizenz):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

Fahren Sie jetzt mit dem Abschnitt WORKSPACE und .bazelrc konfigurieren fort, um die Build-Einstellungen zu konfigurieren.

Nachdem Sie die Bibliotheken erstellt haben, können Sie sie nach /host_dir kopieren. im Container, sodass 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 arbeiten, müssen Sie und das Android-NDK und SDK auf Ihrem System installiert haben.

  1. Installieren Sie die neueste Version des Bazel-Build-Systems.
  2. Das Android-NDK ist erforderlich, um das native LiteRT (C/C++) zu erstellen. Code. Die aktuell empfohlene Version ist 25b. Sie finden sie unter Umständen hier.
  3. Das Android SDK und die Build-Tools sind erhältlich, hier oder oder als Teil des Android Studio Erstellen Tools API >= 23 ist die empfohlene Version zum Erstellen von LiteRT.

ARBEITSBEREICH und .bazelrc konfigurieren

Dies ist ein einmaliger Konfigurationsschritt, der zum Erstellen von LiteRT erforderlich ist Bibliotheken. Führen Sie das Skript ./configure im Stammverzeichnis von TensorFlow Checkout aus. und antworten Sie mit „Ja“. wenn das Skript anfordert, den ./WORKSPACE interaktiv zu konfigurieren für Android-Builds. Das Skript versucht, Einstellungen mithilfe der Methode folgenden Umgebungsvariablen:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Wenn diese Variablen nicht festgelegt sind, müssen sie interaktiv im Skript bereitgestellt werden. . Eine erfolgreiche Konfiguration sollte Einträge wie die folgenden ergeben in der Datei .tf_configure.bazelrc im Stammordner:

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 ordnungsgemäß konfiguriert ist, können Sie den LiteRT AAR aus der folgenden Tabelle erstellen: das Stammverzeichnis für den Bezahlvorgang:

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. Hinweis dass dadurch ein „Fett“ entsteht, AAE mit verschiedenen Architekturen wenn Sie nicht alle brauchen, verwenden Sie die Teilmenge, die für Ihre Bereitstellungsumgebung geeignet ist.

So können Sie kleinere AAR-Dateien erstellen, die nur auf eine Gruppe von Modellen ausgerichtet sind:

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

Das obige Skript generiert die Datei tensorflow-lite.aar und optional den tensorflow-lite-select-tf-ops.aar-Datei, wenn eines der Modelle TensorFlow-Vorgänge Weitere Informationen finden Sie in der Reduzieren Sie die Größe des Binärprogramms für LiteRT.

AAE direkt zum Projekt hinzufügen

Verschieben Sie die Datei tensorflow-lite.aar in ein Verzeichnis namens libs in Ihrem Projekt arbeiten. Ändern Sie die Datei build.gradle Ihrer Anwendung so, dass sie auf das neue Verzeichnis verweist. und ersetzen Sie die vorhandene LiteRT-Abhängigkeit durch die neue lokale Bibliothek. 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')
}

AAR im lokalen Maven-Repository installieren

Führen Sie den folgenden Befehl über das Stammverzeichnis für den Bezahlvorgang 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

Achte darauf, dass in der build.gradle deiner App die Abhängigkeit mavenLocal() und Ersetzen Sie die LiteRT-Standardabhängigkeit durch die Abhängigkeit, die unterstützt wird. für ausgewählte TensorFlow-Operationen:

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

Beachten Sie, dass die 0.1.100-Version hier einzig Tests/Entwicklung. Wenn die lokalen AAE installiert sind, können Sie den standardmäßigen LiteRT-Java-Inferenz-APIs in Ihrem Anwendungscode