Utwórz LiteRT na Androida

Ten dokument opisuje, jak utworzyć bibliotekę LiteRT na Androida . Zwykle nie trzeba lokalnie tworzyć biblioteki LiteRT na Androida.

Korzystanie z nocnych zrzutów

Aby używać nocnych zrzutów, dodaj poniższe repozytorium do głównej kompilacji Gradle 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'
        }
    }
}

dodaj nocne zrzuty do zależności (lub edytuj je w razie potrzeby) do pliku 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'
    ...
}
...

Tworzenie biblioteki LiteRT lokalnie

W niektórych przypadkach możesz użyć lokalnej kompilacji LiteRT. Dla: możesz np. utworzyć niestandardowy plik binarny zawierający operacje wybrane z TensorFlow, lub wprowadzić lokalne zmiany w LiteRT.

Konfigurowanie środowiska kompilacji przy użyciu Dockera

  • Pobierz plik Dockera. Pobierając plik Dockera, zgadzasz się na to, że następujące warunki korzystania z usługi regulują korzystanie z nich:

Klikając przycisk akceptacji, zgadzasz się, że wszelkie korzystanie z programu Android Studio oraz Android Native Development Kit będzie podlegał warunkom oprogramowania Android Umowa licencyjna na pakiet dla programistów jest dostępna na stronie https://developer.android.com/studio/terms (taki adres URL może zostać zaktualizowany lub zmieniony przez Google).

Aby pobrać .

  • Opcjonalnie możesz zmienić wersję pakietu Android SDK lub NDK. Pobrane pliki i utwórz obraz Dockera w pustym folderze, uruchamiając polecenie:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • Uruchom interaktywnie kontener Dockera przez podłączenie bieżącego folderu do /host_dir w kontenerze (zwróć uwagę, że /tensorflow_src to ścieżka dźwiękowa TensorFlow) w kontenerze):
docker run -it -v $PWD:/host_dir tflite-builder bash

Jeśli używasz PowerShell w systemie Windows, zastąp „$PWD” z „pwd”.

Jeśli chcesz użyć repozytorium TensorFlow na hoście, podłącz go (-v hostDir:/katalog_hosta).

  • Po otwarciu kontenera możesz uruchomić następujące polecenia, aby pobrać aplikację dodatkowych narzędzi i bibliotek Androida (pamiętaj, że może być konieczne zaakceptowanie licencji):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

Teraz przejdź do sekcji Skonfiguruj WORKSPACE i plik .bazelrc, aby skonfigurować ustawienia kompilacji.

Po zakończeniu tworzenia bibliotek możesz skopiować je do katalogu /host_dir w kontenerze, aby mieć do nich dostęp na hoście.

Konfigurowanie środowiska kompilacji bez Dockera

Instalowanie wymagań wstępnych dotyczących aplikacji Bazel i Androida

Podstawowym systemem kompilacji dla TensorFlow jest Bazel. Aby używać go do tworzenia reklam, musisz oraz zainstalowane w systemie Android NDK i pakiet SDK.

  1. Zainstaluj najnowszą wersję systemu kompilacji Bazel.
  2. Do utworzenia natywnej wersji LiteRT (C/C++) potrzebny jest Android NDK w kodzie. Aktualna zalecana wersja to 25b. Może znaleźć się tutaj.
  3. Można uzyskać dostęp do Android SDK i narzędzi do kompilacji tutaj lub lub w ramach Android Studio Kompilacja API narzędzi >= 23 jest zalecaną wersją do tworzenia LiteRT.

Skonfiguruj WORKSPACE i .bazelrc

Jest to jednorazowy krok konfiguracji, który jest wymagany do utworzenia LiteRT biblioteki. Uruchom skrypt ./configure w głównej części procesu płatności TensorFlow i odpowiedz „Tak”. gdy skrypt prosi o interaktywne skonfigurowanie elementu ./WORKSPACE. dla kompilacji na Androida. Skrypt spróbuje skonfigurować ustawienia za pomocą następujące zmienne środowiskowe:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Jeśli te zmienne nie są ustawione, należy je udostępnić interaktywnie w skrypcie . Pomyślna konfiguracja powinna zwrócić wpisy podobne do tych poniżej w pliku .tf_configure.bazelrc w folderze głównym:

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"

Tworzenie i instalacja

Po prawidłowym skonfigurowaniu Bazel możesz utworzyć w głównym katalogu procesu płatności:

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

Spowoduje to wygenerowanie pliku AAR w języku: bazel-bin/tensorflow/lite/java/. Notatka że w ten sposób powstaje „tkanka tłuszczowa”, stosowanie AAR w kilku różnych architekturach; jeśli nie chcesz potrzebujesz ich wszystkich, użyj podzbioru odpowiedniego dla Twojego środowiska wdrożenia.

Możesz tworzyć mniejsze pliki AAR kierowane tylko na zestaw modeli w ten sposób:

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

Powyższy skrypt wygeneruje plik tensorflow-lite.aar i opcjonalnie tensorflow-lite-select-tf-ops.aar, jeśli jeden z modeli używa Operacje Tensorflow. Więcej informacji znajdziesz tutaj: Zmniejsz rozmiar pliku binarnego LiteRT.

Dodaj AAR bezpośrednio do projektu

Przenieś plik tensorflow-lite.aar do katalogu o nazwie libs w w projektach AI. Zmodyfikuj plik build.gradle aplikacji, aby odwoływał się do nowego katalogu i zastąpić istniejącą zależność LiteRT nową biblioteką lokalną, 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')
}

Instalowanie AAR w lokalnym repozytorium Maven

Wykonaj to polecenie w głównym katalogu płatności:

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

W build.gradle aplikacji sprawdź, czy masz zależność mavenLocal() oraz zastąp standardową zależność LiteRT tą, która obsługuje dla wybranych operacji 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'
}

Pamiętaj, że wersja 0.1.100 służy wyłącznie testowania/rozwoju. Po zainstalowaniu lokalnego AAR możesz użyć standardowego Interfejsy API wnioskowania w Javie LiteRT w kodzie aplikacji.