Interpreter API を使用した GPU アクセラレーション デリゲート

画像処理装置(GPU)を使用して機械学習(ML)モデルを実行する パフォーマンスとユーザーエクスペリエンスが ML 対応アプリケーションAndroid デバイスでは、 delegate と次のいずれかの API:

  • Interpreter API - このガイド
  • ネイティブ(C/C++)API - ガイド

このページでは、LiteRT モデルの GPU アクセラレーションを有効にする方法について説明します。 Interpreter API を使用する Android アプリ。GPU の使用について詳しくは、 デリゲート(ベスト プラクティスや高度な手法を含む) GPU デリゲートのページをご覧ください。

Google Play 開発者サービスで GPU と LiteRT を使用する

LiteRT インタープリタ API には、 ML アプリケーションを構築するための汎用 API ですこのセクション では、これらの API で GPU アクセラレータ デリゲートを使用する方法を、 Google Play 開発者サービスによる LiteRT。

Google Play 開発者サービスを使用した LiteRT をおすすめします。 Android で LiteRT を使用するためのパスです。アプリケーションがデバイスをターゲットにしている場合 Google Play で実行していない場合は、インタープリタ API を備えた GPU およびスタンドアロン LiteRT セクションに移動します。

プロジェクトの依存関係を追加する(.toml バージョン カタログを使用)

  1. プロジェクトの libs.versions.toml ファイルを更新する
[libraries]
...
tflite-gpu = { module = "com.google.ai.edge.litert:litert-gpu", version = "2.X.Y" }
tflite-gpu-api = { module = "com.google.ai.edge.litert:litert-gpu-api", version = "2.X.Y" }
...
  1. アプリの build.gradle.kts でプロジェクトの依存関係を追加する
dependencies {
  ...
  implementation(libraries.tflite.gpu)
  implementation(libraries.tflite.gpu.api)
  ...
}

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

GPU デリゲートへのアクセスを有効にするには、以下を追加します。 アプリの build.gradle への com.google.android.gms:play-services-tflite-gpu ファイル:

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

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

次に、GPU をサポートする Google Play 開発者サービスで LiteRT を初期化します。

Kotlin

val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

val interpreterTask = useGpuTask.continueWith { useGpuTask ->
  TfLite.initialize(context,
      TfLiteInitializationOptions.builder()
      .setEnableGpuDelegateSupport(useGpuTask.result)
      .build())
  }
        

Java

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

Task<Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  TfLite.initialize(context,
  TfLiteInitializationOptions.builder()
    .setEnableGpuDelegateSupport(true)
    .build());
});
        

最後に、GpuDelegateFactory を渡してインタープリタを初期化します。 InterpreterApi.Options 経由:

Kotlin


    val options = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
      .addDelegateFactory(GpuDelegateFactory())

    val interpreter = InterpreterApi(model, options)

    // Run inference
    writeToInput(input)
    interpreter.run(input, output)
    readFromOutput(output)
      

Java


    Options options = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
      .addDelegateFactory(new GpuDelegateFactory());

    Interpreter interpreter = new InterpreterApi(model, options);

    // Run inference
    writeToInput(input);
    interpreter.run(input, output);
    readFromOutput(output);
      

GPU デリゲートは、Android Studio の ML モデル バインディングでも使用できます。対象 詳細については、Terraform を使用したモデル インターフェースの生成 metadata です。

スタンドアロン LiteRT で GPU を使用する

Google Play を実行していないデバイスを対象とするアプリは、 GPU デリゲートをアプリケーションにバンドルして、 スタンドアロン バージョンです。

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

GPU デリゲートへのアクセスを有効にするには、以下を追加します。 com.google.ai.edge.litert:litert-gpu-delegate-plugin をアプリの build.gradle ファイル:

dependencies {
    ...
    implementation 'com.google.ai.edge.litert:litert'
    implementation 'com.google.ai.edge.litert:litert-gpu'
    implementation 'com.google.ai.edge.litert:litert-gpu-api'
}

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

次に、TfLiteDelegate を使用して GPU で LiteRT を実行します。Java では、Terraform で GpuDelegateInterpreter.Options

Kotlin

      import org.tensorflow.lite.Interpreter
      import org.tensorflow.lite.gpu.CompatibilityList
      import org.tensorflow.lite.gpu.GpuDelegate

      val compatList = CompatibilityList()

      val options = Interpreter.Options().apply{
          if(compatList.isDelegateSupportedOnThisDevice){
              // if the device has a supported GPU, add the GPU delegate
              val delegateOptions = compatList.bestOptionsForThisDevice
              this.addDelegate(GpuDelegate(delegateOptions))
          } else {
              // if the GPU is not supported, run on 4 threads
              this.setNumThreads(4)
          }
      }

      val interpreter = Interpreter(model, options)

      // Run inference
      writeToInput(input)
      interpreter.run(input, output)
      readFromOutput(output)
      

Java

      import org.tensorflow.lite.Interpreter;
      import org.tensorflow.lite.gpu.CompatibilityList;
      import org.tensorflow.lite.gpu.GpuDelegate;

      // Initialize interpreter with GPU delegate
      Interpreter.Options options = new Interpreter.Options();
      CompatibilityList compatList = CompatibilityList();

      if(compatList.isDelegateSupportedOnThisDevice()){
          // if the device has a supported GPU, add the GPU delegate
          GpuDelegate.Options delegateOptions = compatList.getBestOptionsForThisDevice();
          GpuDelegate gpuDelegate = new GpuDelegate(delegateOptions);
          options.addDelegate(gpuDelegate);
      } else {
          // if the GPU is not supported, run on 4 threads
          options.setNumThreads(4);
      }

      Interpreter interpreter = new Interpreter(model, options);

      // Run inference
      writeToInput(input);
      interpreter.run(input, output);
      readFromOutput(output);
      

量子化モデル

Android GPU デリゲート ライブラリはデフォルトで量子化モデルをサポートしています。Google GPU デリゲートで量子化モデルを使用するには、コードを変更する必要があります。「 次のセクションでは、テストやイベントで量子化サポートを無効にする方法について説明します。 使用します。

量子化モデルのサポートを無効にする

次のコードは、量子化モデルのサポートを無効にする方法を示しています。

Java

GpuDelegate delegate = new GpuDelegate(new GpuDelegate.Options().setQuantizedModelsAllowed(false));

Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
      

GPU アクセラレーションを使用した量子化モデルの実行について詳しくは、以下をご覧ください。 GPU デリゲートの概要。