Task ライブラリによる GPU アクセラレーションのデリゲート

GPU を使って機械学習(ML)モデルを実行すると、ML 駆動型アプリケーションのパフォーマンスとユーザーエクスペリエンスを大幅に改善できます。Android デバイスでは、デリゲートと以下のいずれかの API を使用して、モデルの GPU 高速実行が可能になります。

  • Interpreter API - ガイド
  • Task library API - このガイド
  • Native(C/C++)API - ガイド

このページでは、Task ライブラリを使って、Android アプリで TensorFlow Lite モデルの GPU アクセラレーションを有効にする方法を説明します。ベストプラクティスや高度な手法など、TensorFlow Lite で GPU アクセラレーションを使用する方法についての詳細は、GPU デリゲートのページをご覧ください。

Google Play サービスによる TensorFlow Lite で GPU を使用する

TensorFlow Lite Task ライブラリには、機械学習アプリケーションをビルドするための一連のタスク固有の API が含まれています。このセクションでは、Google Play サービスによる TensorFlow Lite を使用して、これらの API で GPU アクセラレータデリゲートを使用する方法について説明します。

Google Play サービスによる TensorFlow Lite は、Android で TensorFlow Lite を使用するために推奨されている手段です。アプリケーションが Google Play を実行していないデバイスをターゲットとしている場合は、Task ライブラリとスタンドアロン型 TensorFlow Lite による GPU のセクションをご覧ください。

プロジェクト依存関係の追加

Google Play サービスを使用して、TensorFlow Lite Task ライブラリで GPU デリゲートへのアクセスを有効にするには、com.google.android.gms:play-services-tflite-gpu をアプリの build.gradle ファイルの依存関係に追加します。

dependencies {
  ...
  implementation 'com.google.android.gms:play-services-tflite-gpu:16.0.0'
}

GPU アクセラレーションの有効化

次に、TfLiteGpu クラスを使用して、GPU デリゲートがデバイスに有効であるかを非同期的に確認し、BaseOptions クラスで Task API モデルクラスの GPU デリゲートオプションを有効にします。たとえば、以下のコード例のように、ObjectDetector で GPU をセットアップできます。

Kotlin

        val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

        lateinit val optionsTask = useGpuTask.continueWith { task ->
          val baseOptionsBuilder = BaseOptions.builder()
          if (task.result) {
            baseOptionsBuilder.useGpu()
          }
        ObjectDetectorOptions.builder()
                  .setBaseOptions(baseOptionsBuilder.build())
                  .setMaxResults(1)
                  .build()
        }
      

Java

      Task<Boolean> useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context);

      Task<ObjectDetectorOptions> optionsTask = useGpuTask.continueWith({ task ->
        BaseOptions baseOptionsBuilder = BaseOptions.builder();
        if (task.getResult()) {
          baseOptionsBuilder.useGpu();
        }
        return ObjectDetectorOptions.builder()
                .setBaseOptions(baseOptionsBuilder.build())
                .setMaxResults(1)
                .build()
      });
      

スタンドアロン型 TensorFlow Lite で GPU を使用する

アプリケーションが Google Play を実行していないデバイスをターゲットとしている場合は、GPU デリゲートをアプリケーションにバンドルして、TensorFlow Lite のスタンドアロンバージョンでそれを使用することができます。

プロジェクト依存関係の追加

スタンドアロンバージョンの TensorFlow Lite を使用して TensorFlow Lite Task ライブラリで GPU デリゲートへのアクセスを有効にするには、org.tensorflow:tensorflow-lite-gpu-delegate-plugin をアプリの build.gradle ファイルの依存関係に追加します。

dependencies {
  ...
  implementation 'org.tensorflow:tensorflow-lite'
  implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}

GPU アクセラレーションの有効化

次に、BaseOptions クラスを使用して、Task API モデルクラスの GPU デリゲートオプションを有効にします。たとえば、次のコード例のように、ObjectDetector で GPU を設定できます。

Kotlin

    import org.tensorflow.lite.task.core.BaseOptions
    import org.tensorflow.lite.task.gms.vision.detector.ObjectDetector

    val baseOptions = BaseOptions.builder().useGpu().build()

    val options =
        ObjectDetector.ObjectDetectorOptions.builder()
            .setBaseOptions(baseOptions)
            .setMaxResults(1)
            .build()

    val objectDetector = ObjectDetector.createFromFileAndOptions(
      context, model, options)
      

Java

    import org.tensorflow.lite.task.core.BaseOptions
    import org.tensorflow.lite.task.gms.vision.detector.ObjectDetector

    BaseOptions baseOptions = BaseOptions.builder().useGpu().build();

    ObjectDetectorOptions options =
        ObjectDetectorOptions.builder()
            .setBaseOptions(baseOptions)
            .setMaxResults(1)
            .build();

    val objectDetector = ObjectDetector.createFromFileAndOptions(
      context, model, options);