В этом документе описывается, как самостоятельно собрать библиотеку 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'
}
}
}
добавляйте ночные снимки к зависимостям (или редактируйте по мере необходимости) в ваш 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'
...
}
...
Сборка LiteRT локально
В некоторых случаях вам может потребоваться использовать локальную сборку LiteRT. Например, вы можете создавать собственный двоичный файл, включающий операции, выбранные из TensorFlow , или вы можете внести локальные изменения в LiteRT.
Настройте среду сборки с помощью Docker
- Загрузите файл Docker. Загружая файл Docker, вы соглашаетесь с тем, что его использование регулируется следующими условиями обслуживания:
Нажимая «Принять», вы тем самым соглашаетесь с тем, что любое использование Android Studio и Android Native Development Kit будет регулироваться Лицензионным соглашением для Android Software Development Kit, доступным по адресу https://developer.android.com/studio/terms (такой URL-адрес может время от времени обновляться или изменяться Google).
Чтобы загрузить файл, вам необходимо принять условия обслуживания.- При желании вы можете изменить версию Android SDK или NDK. Поместите загруженный файл 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 на хосте, вместо этого смонтируйте этот каталог хоста (-v hostDir:/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.
- Установите последнюю версию системы сборки Bazel .
- Android NDK необходим для создания собственного (C/C++) кода LiteRT. Текущая рекомендуемая версия — 25b, которую можно найти здесь .
- Android SDK и инструменты сборки можно получить здесь или как часть Android Studio . 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 с несколькими различными архитектурами; если они вам не нужны, используйте подмножество, подходящее для вашей среды развертывания.
Вы можете создавать файлы 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» .
Добавьте AAR непосредственно в проект
Переместите файл tensorflow-lite.aar
в каталог libs
вашего проекта. Измените файл build.gradle
вашего приложения, чтобы он ссылался на новый каталог, и замените существующую зависимость LiteRT новой локальной библиотекой, например:
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 в локальный репозиторий 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
предназначена исключительно для тестирования/разработки. Установив локальный AAR, вы можете использовать стандартные API-интерфейсы вывода Java LiteRT в коде вашего приложения.