今日のローカルTensorFlowEverywhereイベントの出欠確認!

TensorFlow Lite バイナリサイズを縮小する方法

概要

デバイス上の機械学習 (ODML) アプリケーションのモデルをデプロイする場合、モバイルデバイスで使用できるメモリの制限に注意することが重要です。モデルのバイナリサイズは、モデルで使用される演算の数と密接に相関しています。TensorFlow Lite では、選択的ビルドを使用してモデルのバイナリサイズを削減できます。選択的ビルドは、モデルセット内の未使用の演算をスキップし、モバイルデバイスでモデルを実行するために必要なランタイムと演算カーネルのみを含むコンパクトなライブラリを生成します。

選択ビルドは、次の 3 つの演算ライブラリに適用されます。

  1. TensorFlow Lite 組み込み演算ライブラリ
  2. TensorFlow Lite カスタム演算
  3. Select TensorFlow 演算ライブラリ

次の表は、いくつかの一般的なユースケースでの選択的ビルドの影響を示しています。

モデル名 ドメイン ターゲットアーキテクチャ AAR ファイルサイズ
Mobilenet_1.0_224(float) 画像分類 armeabi-v7a tensorflow-lite.aar (296,635 バイト)
arm64-v8a tensorflow-lite.aar (382,892 バイト)
SPICE 音声のピッチ抽出 armeabi-v7a tensorflow-lite.aar (375,813 bytes)
tensorflow-lite-select-tf-ops.aar (1,676,380 バイト)
arm64-v8a tensorflow-lite.aar (421,826 bytes)
tensorflow-lite-select-tf-ops.aar (2,298,630 バイト)
i3d-kinetics-400 動画分類 armeabi-v7a tensorflow-lite.aar (240,085 bytes)
tensorflow-lite-select-tf-ops.aar (1,708,597 バイト)
arm64-v8a tensorflow-lite.aar (273,713 bytes)
tensorflow-lite-select-tf-ops.aar (2,339,697 バイト)

注: 現在、この機能は実験段階にありバージョン 2.4 以降で利用可能になりますが、変更される可能性があります。

既知の問題/制限

  1. C API および iOS バージョンの選択的ビルドは現在サポートされていません。

Bazel を使用して TensorFlow Lite を選択的に構築する

このセクションでは、TensorFlow ソースコードをダウンロードし、Bazel にローカル開発環境をセットアップしていることを前提としています。

Android プロジェクトの AAR ファイルを構築する

次のようにモデルファイルのパスを指定することで、カスタム TensorFlow Lite AAR を構築できます。

sh tensorflow/lite/tools/build_aar.sh \
  --input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

上記のコマンドは、TensorFlow Lite 組み込みおよびカスタム演算用の AAR ファイルbazel-bin/tmp/tensorflow-lite.aarを生成します。モデルに Select TensorFlow 演算が含まれている場合、オプションで、AAR ファイルbazel-bin/tmp/tensorflow-lite-select-tf-ops.aarを生成します。これにより、複数の異なるアーキテクチャをもつファットな AAR が構築されることに注意してください。それらのすべてが必要ではない場合は、デプロイメント環境に適したサブセットを使用してください。

高度な使用法:カスタム演算で構築する

カスタム演算を使用して Tensorflow Lite モデルを開発した場合は、ビルドコマンドに次のフラグを追加することでモデルを構築できます。

sh tensorflow/lite/tools/build_aar.sh \
  --input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a \
  --tflite_custom_ops_srcs=/e/f/file1.cc,/g/h/file2.h \
  --tflite_custom_ops_deps=dep1,dep2

tflite_custom_ops_srcsフラグにはカスタム演算のソースファイルが含まれ、tflite_custom_ops_depsフラグにはそれらのソースファイルを構築するための依存関係が含まれます。これらの依存関係は TensorFlow リポジトリに存在する必要があることに注意してください。

Docker を使用して TensorFlow Lite を選択的に構築する

このセクションでは、ローカルマシンに Docker をインストールし、TensorFlow Lite Docker ファイルを構築していることを前提としています。

Android プロジェクトの AAR ファイルを構築する

次のコマンドを実行して、Docker で構築するためのスクリプトをダウンロードします。

curl -o build_aar_with_docker.sh \
  https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/lite/tools/build_aar_with_docker.sh &&
chmod +x build_aar_with_docker.sh

次のようにモデルファイルのパスを指定することで、カスタム TensorFlow Lite AAR を構築できます。

sh build_aar_with_docker.sh \
  --input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a \
  --checkpoint=master

チェックポイントフラグは、ライブラリを構築する前に確認する TensorFlow リポジトリのコミット、ブランチ、またはタグです。上記のコマンドは、TensorFlow Lite 組み込みおよびカスタム演算用の AAR ファイルtensorflow-lite.aarを生成します。また、オプションで、現在のディレクトリにある Select TensorFlow 演算用の AAR ファイルtensorflow-lite-select-tf-ops.aarを生成します。

プロジェクトに AAR ファイルを追加する

直接プロジェクトに AAR をインポートするか、カスタム AAR をローカルの Maven リポジトリに公開して、AAR ファイルを追加します。生成する場合は、tensorflow-lite-select-tf-ops.aarの AAR ファイルも追加する必要があることに注意してください。