タスク ライブラリを使用した GPU アクセラレーション デリゲート

グラフィックス プロセッシング ユニット (GPU) を使用して機械学習 (ML) モデルを実行すると、ML 対応アプリケーションのパフォーマンスとユーザー エクスペリエンスを大幅に向上させることができます。 Android デバイスでは、デリゲートと次の API のいずれかを使用して、モデルの GPU アクセラレーションによる実行を有効にすることができます。

  • インタプリタ API -ガイド
  • タスク ライブラリ API - このガイド
  • ネイティブ (C/C++) API - このガイド

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

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

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

Google Play サービスを使用した TensorFlow Lite は、 Android で TensorFlow Lite を使用するための推奨パスです。アプリケーションが Google Play を実行していないデバイスをターゲットにしている場合は、 「タスク ライブラリを備えた GPU とスタンドアロン TensorFlow Lite」セクションを参照してください。

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

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

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

GPUアクセラレーションを有効にする

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

コトリン

        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()
        }
      

ジャワ

      Task useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context);

      Task 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 タスク ライブラリで GPU デリゲートへのアクセスを有効にするには、アプリのbuild.gradleファイルの依存関係にorg.tensorflow:tensorflow-lite-gpu-delegate-pluginを追加します。

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

GPUアクセラレーションを有効にする

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

コトリン

    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)
      

ジャワ

    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);