このドキュメントでは、LiteRT Android ライブラリを独自にビルドする方法について説明します。通常、LiteRT Android ライブラリをローカルでビルドする必要はありません。
Nightly Snapshot を使用する
ナイトリー スナップショットを使用するには、ルート 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 のすべての使用が、https://developer.android.com/studio/terms で入手可能な Android ソフトウェア開発キット ライセンス契約(この URL は 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 を構成するセクションに進んで、ビルド設定を構成します。
ライブラリのビルドが完了したら、コンテナ内の /host_dir にコピーして、ホストでアクセスできるようにします。
Docker なしでビルド環境を設定する
Bazel と Android の前提条件をインストールする
Bazel は TensorFlow の主要なビルドシステムです。これを使用してビルドするには、システムにこれと Android NDK および SDK がインストールされている必要があります。
- 最新バージョンの Bazel ビルドシステムをインストールします。
- ネイティブ(C/C++)LiteRT コードをビルドするには、Android NDK が必要です。現在の推奨バージョンは 25b です。こちらで確認できます。
- Android SDK とビルドツールは、こちらから入手できます。また、Android Studio の一部として入手することもできます。LiteRT のビルドには、ビルドツール API >= 23 が推奨バージョンです。
WORKSPACE と .bazelrc を構成する
これは、LiteRT ライブラリをビルドするために必要な 1 回限りの構成手順です。ルートの TensorFlow チェックアウト ディレクトリで ./configure スクリプトを実行し、スクリプトで Android ビルド用の ./WORKSPACE をインタラクティブに構成するかどうかを尋ねられたら、「Yes」と答えます。このスクリプトは、次の環境変数を使用して設定を構成しようとします。
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')
}
ローカルの Maven リポジトリに AAR をインストールする
ルート チェックアウト ディレクトリから次のコマンドを実行します。
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 を使用できます。