本文档介绍了如何自行构建 LiteRT Android 库。通常,您不需要本地构建 LiteRT Android 库。
使用每晚快照
如需使用每晚版快照,请将以下代码库添加到根 Gradle build 配置中。
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 的本地 build。例如,您可能正在构建包含从 TensorFlow 中选择的操作的自定义二进制文件,或者您可能希望对 LiteRT 进行本地更改。
使用 Docker 设置构建环境
- 下载 Docker 文件。下载 Docker 文件即表示您同意以下服务条款,并受其约束:
点击“接受”即表示您同意,对 Android Studio 和 Android Native Development Kit 的所有使用均受 Android 软件开发套件许可协议(网址为 https://developer.android.com/studio/terms,Google 可能会不时更新或更改该网址)的约束。
您必须确认服务条款才能下载文件。- 您可以选择更改 Android SDK 或 NDK 版本。将下载的 Docker 文件放入一个空文件夹中,然后运行以下命令来构建 Docker 映像:
docker build . -t tflite-builder -f tflite-android.Dockerfile
- 通过将当前文件夹装载到容器内的 /host_dir 来以交互方式启动 Docker 容器(请注意,/tensorflow_src 是容器内的 TensorFlow 代码库):
docker run -it -v $PWD:/host_dir tflite-builder bash
如果您在 Windows 上使用 PowerShell,请将“$PWD”替换为“pwd”。
如果您想使用主机上的 TensorFlow 代码库,请改为装载该主机目录 (-v hostDir:/host_dir)。
- 进入容器后,您可以运行以下命令来下载其他 Android 工具和库(请注意,您可能需要接受许可):
sdkmanager \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platform-tools" \
"platforms;android-${ANDROID_API_LEVEL}"
现在,您应继续前往配置 WORKSPACE 和 .bazelrc 部分,以配置 build 设置。
构建完库后,您可以将其复制到容器内的 /host_dir 中,以便在主机上访问它们。
在不使用 Docker 的情况下设置 build 环境
安装 Bazel 和 Android 必备项
Bazel 是 TensorFlow 的主要构建系统。如需使用它进行构建,您必须在系统上安装它以及 Android NDK 和 SDK。
- 安装最新版本的 Bazel 构建系统。
- 需要 Android NDK 才能构建原生 (C/C++) LiteRT 代码。当前推荐版本为 25b,您可点击此处查看。
- 您可以点击此处获取 Android SDK 和 build 工具,也可以将它们作为 Android Studio 的一部分获取。建议使用 build 工具 API >= 23 来构建 LiteRT。
配置 WORKSPACE 和 .bazelrc
这是一次性配置步骤,用于构建 LiteRT 库。在根 TensorFlow 签出目录中运行 ./configure 脚本,并在脚本要求以交互方式配置 ./WORKSPACE 以进行 Android build 时回答“是”。该脚本将尝试使用以下环境变量配置设置:
ANDROID_SDK_HOMEANDROID_SDK_API_LEVELANDROID_NDK_HOMEANDROID_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
这将在 bazel-bin/tensorflow/lite/java/ 中生成一个 AAR 文件。请注意,这会构建一个包含多种不同架构的“胖”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 操作,则还会生成 tensorflow-lite-select-tf-ops.aar 文件。如需了解详情,请参阅减小 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 后,您可以在应用代码中使用标准 LiteRT Java 推理 API。