TensorFlow 演算子を選択する

LiteRT 組み込みオペレーター ライブラリは制限付きの すべてのモデルが変換可能とは限りません。詳しくは 演算子の互換性をご覧ください。

変換を可能にするために、ユーザーは特定の TensorFlow の使用を有効にできます。 LiteRT モデルで op を使用します。ただし、 TensorFlow オペレーションの LiteRT モデルではコアを取り込む必要がある TensorFlow ランタイム。LiteRT インタープリタのバイナリサイズを増やします。 Android では、必要な TensorFlow のみを選択的にビルドすることで、これを回避できます。 詳しくは、減らしたバイナリを size です。

このドキュメントでは、変換実行して TensorFlow op を含む LiteRT モデルを 任意のプラットフォームで使用できますまた、パフォーマンスとサイズに関する 指標既知の制限事項を確認します。

モデルを変換する

次の例は、select を使用して LiteRT モデルを生成する方法を示しています。 TensorFlow 演算。

import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, # enable LiteRT ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

推論を実行する

以下をサポートすることで変換された LiteRT モデルを使用する場合は、 選択するには、クライアントが TensorFlow オペレーションの TensorFlow オペレーションの必要なライブラリが含まれています。

Android の AAR

バイナリサイズを削減するには、 次のセクションをご覧ください。バイナリサイズが TensorFlow 演算で事前構築済みの AAR を使用することを ホスト MavenCentral.

これを build.gradle 依存関係で指定するには、依存関係と一緒に追加します。 標準的な LiteRT AAR の特長は次のとおりです。

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    // This dependency adds the necessary TF op support.
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}

毎晩のスナップショットを使用するには、Sonatype スナップショット リポジトリをご覧ください。

依存関係を追加したら、依存関係を処理するために必要なデリゲートが 必要なグラフに対して、グラフの TensorFlow オペレーションが できます。

: TensorFlow 演算の依存関係は比較的大きいため、 .gradle ファイル内の不要な x86 ABI を除外するには、 あなたのabiFilters

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}

Android AAR を作成する

バイナリサイズを減らすなどの高度なケースでは、 ライブラリを手動で作成する必要があります。動作中の LiteRT ビルドを想定している を選択して、TensorFlow オペレーションを 次のようになります。

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

次の AAR ファイル「bazel-bin/tmp/tensorflow-lite.aar」が生成されます: LiteRT の組み込みオペレーションとカスタム オペレーションAAR ファイルを生成して bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar: TensorFlow 演算用。もし 動作中のビルド環境がない場合は、上記のファイルを docker を使用します。

そこから AAR ファイルをプロジェクトに直接インポートするか、 カスタム AAR ファイルをローカルの Maven リポジトリに公開します。

mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar

最後に、アプリの build.gradle で、mavenLocal() があることを確認します。 標準の LiteRT 依存関係を、 一部の TensorFlow op をサポートしています。

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'
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}

iOS

CocoaPods を使用する

LiteRT は、arm64 に対して、夜間にビルド済みの一部の TF オペレーション CocoaPods を提供します。 これは TensorFlowLiteSwift や CocoaPods TensorFlowLiteObjC 個。

: x86_64 シミュレータで一部の TF オペレーションを使用する必要がある場合は、 選択する必要がありますBazel と Xcode の使用をご覧ください。 セクションをご覧ください。

# In your Podfile target:
  pod 'TensorFlowLiteSwift'   # or 'TensorFlowLiteObjC'
  pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'

pod install を実行した後、追加のリンカーフラグを 選択した TF オペレーション フレームワークをプロジェクトに強制的に読み込みます。Xcode プロジェクトで、 Build Settings -> に移動Other Linker Flags に以下を追加します。

バージョン 2.9.0 以降の場合:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

バージョン <2.9.0:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

これで、SELECT_TF_OPS で変換された任意のモデルを ダウンロードしますたとえば、画像分類 iOS アプリ TF Ops 機能をテストします

  • モデルファイルを、SELECT_TF_OPS を有効にして変換されたファイルに置き換えます。
  • 指示に沿って、TensorFlowLiteSelectTfOps 依存関係を Podfile に追加します。
  • 上記のようにリンカーフラグを追加します。
  • サンプルアプリを実行して、モデルが正しく動作するかどうかを確認します。

Bazel + Xcode の使用

iOS 向け TensorFlow オペレーションの一部である LiteRT は、Bazel を使用してビルドできます。 まず、iOS のビルド手順に沿って、 Bazel ワークスペースと .bazelrc ファイルを正しく修正しました。

iOS サポートを有効にしてワークスペースを設定したら、 追加の TF Ops アドオン フレームワークをビルドするには、次のコマンドを実行します。 通常の TensorFlowLiteC.framework に加えて使用できます。なお、一部の TF オペレーションは フレームワークは i386 アーキテクチャ用に構築できないため、明示的に作成する必要があります。 i386 を除くターゲット アーキテクチャのリストを指定します。

bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
  //tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework

これにより、bazel-bin/tensorflow/lite/ios/ の下にフレームワークが生成されます。 されます。この新しいフレームワークは、次の手順で Xcode プロジェクトに追加できます。 同様のステップについては、Xcode プロジェクト 設定セクション iOS 作成ガイドをご覧ください。

フレームワークをアプリ プロジェクトに追加した後、追加のリンカーフラグ 選択した TF オペレーションを強制的に読み込むには、アプリ プロジェクトで指定する必要があります 説明します。Xcode プロジェクトで、Build Settings -> に移動します。Other Linker Flags に以下を追加します。

-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>

C/C++

Bazel または CMake を使用して LiteRT をビルドする場合 LiteRT Flex をリンクすることで Flex デリゲートを有効にできます。 デリゲート共有ライブラリです。次のコマンドのように、Bazel でビルドできます。

bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex

このコマンドにより、次の共有ライブラリが bazel-bin/tensorflow/lite/delegates/flex

プラットフォーム ライブラリ名
Linux libtensorflowlite_flex.so
macOS libtensorflowlite_flex.dylib
Windows tensorflowlite_flex.dll

必要な TfLiteDelegate は、 共有ライブラリがリンクされていれば、実行時にインタープリタを作成できます。これは、 委任インスタンスを明示的にインストールする必要はありません。 他の委任タイプでは必要ありません。

注: この機能はバージョン 2.7 以降で使用できます。

Python

一部の TensorFlow オペレーションを含む LiteRT は、 TensorFlow の pip パッケージ。Google Chat では LiteRT Interpreter pip のみをインストールするという選択も パッケージ

指標

パフォーマンス

組み込みの TensorFlow 演算と一部の TensorFlow 演算を組み合わせて使用する場合、すべて同じ LiteRT の最適化と最適化された組み込み演算が利用可能になり、 使用できます。

次の表は、推論の実行にかかった平均時間を示しています。 Pixel 2 上の MobileNet。表示されている時間は、平均 100 回の実行です。これらの ターゲットは、--config=android_arm64 -c opt フラグを使用して Android 用にビルドされています。

ビルド 時間(ミリ秒)
組み込み演算のみ(TFLITE_BUILTIN 2,607
TF オペレーションのみの使用(SELECT_TF_OPS 2,645

バイナリサイズ

次の表に、各ビルドの LiteRT のバイナリサイズを示します。 これらのターゲットは、--config=android_arm -c opt を使用して Android 用にビルドされています。

ビルド C++ バイナリのサイズ Android APK のサイズ
組み込み演算のみ 796 KB 561 KB
組み込み演算 + TF 演算 23.0 MB 8.0 MB
組み込み演算 + TF 演算(1) 4.1 MB 1.8 MB

(1)これらのライブラリは i3d-kinetics-400 用に選択的にビルドされています。 モデル 8 個の TFLite 組み込み演算と 3 個の TensorFlow 演算があります。詳しくは、 LiteRT バイナリサイズを縮小するセクション。

既知の制限事項

  • サポートされていない型: 一部の TensorFlow 演算は、 入出力タイプです。

更新

  • バージョン 2.6 <ph type="x-smartling-placeholder">
      </ph>
    • GraphDef 属性ベースの演算子と HashTable リソースのサポート 初期化が改善されました。
  • バージョン 2.5 <ph type="x-smartling-placeholder">
  • バージョン 2.4 <ph type="x-smartling-placeholder">
      </ph>
    • ハードウェア アクセラレーションの委任との互換性を改善しました