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(この URL は更新または変更される場合があります) によって随時更新されます)。

ダウンロードするには、利用規約に同意する必要があります。 表示されます。

  • 必要に応じて、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

Windows で PowerShell を使用する場合は、「$PWD」を「pwd」に置き換えます。

ホストで TensorFlow リポジトリを使用する場合は、そのホストをマウントします。 (-v hostDir:/host_dir) を使用します。

  • コンテナに入ったら、次のコマンドを実行してダウンロードできます。 追加の Android ツールやライブラリ(一部のライブラリを ライセンス)が必要です。
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

次に、「ワークスペースと .bazelrc を構成する」セクションに進んでビルド設定を行います。

ライブラリの作成が完了したら、/host_dir にコピーできます。 作成して、ホスト上でアクセスできるようにします。

Docker を使用しないビルド環境の設定

Bazel と Android の前提条件のインストール

Bazel は TensorFlow の主要なビルドシステムです。これを使用してビルドするには、 SDK と Android NDK および SDK がシステムにインストールされていること。

  1. 最新バージョンの Bazel ビルドシステムをインストールします。
  2. ネイティブ(C/C++)LiteRT をビルドするには Android NDK が必要 できます。現在の推奨バージョンは 25b です。 こちらをご覧ください。
  3. Android SDK とビルドツールを入手する こちら または Android Studio。ビルド LiteRT をビルドするには、23 以上のツール API バージョンを推奨します。

WORKSPACE と .bazelrc を構成する

これは、LiteRT のビルドに必要な 1 回限りの構成手順です。 使用できます。ルートの TensorFlow チェックアウトで ./configure スクリプトを実行する 「はい」と回答します。./WORKSPACE をインタラクティブに構成するようスクリプトが求められたとき 使用できます。このスクリプトは、 次のように環境変数を設定します。

  • 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 と複数のアーキテクチャもしそうしないと デプロイ環境に適したサブセットを使用してください。

特定のモデルのみをターゲットとする小規模な 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 依存関係を新しいローカル ライブラリに置き換えます。 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')
}

ローカルの 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