建構 Android 適用的 LiteRT

本文說明如何在 一般而言,您不需要在本機建構 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 軟體管理 開發套件授權協議: https://developer.android.com/studio/terms (這類網址可能會更新或變更) 提供)。

您必須確認服務條款,才能下載 檔案。

  • 您也可以選擇變更 Android SDK 或 NDK 版本。下載 Docker 檔案位於空資料夾中,然後執行下列指令來建構 Docker 映像檔:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • 將目前的資料夾掛接至 容器中的 /host_dir (請注意,/tensorflow_src 代表 TensorFlow 容器內的存放區):
docker run -it -v $PWD:/host_dir tflite-builder bash

如果您在 Windows 上使用 PowerShell,請將「$PWD」替換成「$PWD」。「pwd」一詞。

如要在主機上使用 TensorFlow 存放區,請掛接該主機 目錄。(-v hostDir:/host_dir)。

  • 進入容器後,就能執行下列指令來下載 其他 Android 工具和程式庫 (請注意,您可能必須接受 授權):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

現在您應前往「Configure WORKSPACE and .bazelrc」部分,調整建構設定。

程式庫建構完成後,您可將其複製到 /host_dir ,以便在主機上存取

在沒有 Docker 的情況下設定建構環境

安裝 Bazel 和 Android 必備條件

Bazel 是 TensorFlow 的主要建構系統。如要使用這個平台建構應用程式 並在您的系統中安裝 Android NDK 和 SDK。

  1. 安裝最新版的 Bazel 建構系統
  2. 必須使用 Android NDK 建構原生 (C/C++) LiteRT 再也不是件繁重乏味的工作目前建議版本為 25b,可能請見 請按這裡
  3. 您可以取得 Android SDK 和建構工具 這裡,或 也可以從 Android Studio。建構 建議使用 tools API >= 23 的版本建構 LiteRT。

設定 WORKSPACE 和 .bazelrc

這是一次性的設定步驟,如要建構 LiteRT 程式庫在 TensorFlow 根目錄檢查中執行 ./configure 指令碼 目錄中回答「是」當指令碼要求以互動方式設定 ./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

系統會在 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 二進位檔大小一節。

直接將自動套用最佳化建議功能新增至專案

tensorflow-lite.aar 檔案移至名為 libs 的目錄,位置為 專案。修改應用程式的 build.gradle 檔案,以參照新目錄 並用新的本機程式庫取代現有的 LiteRT 依附元件 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 安裝至本機 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