画像処理装置(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 バージョン カタログを使用)
- プロジェクトの
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" }
...
- アプリの
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 'org.tensorflow:tensorflow-lite'
implementation 'com.google.ai.edge.litert:litert-gpu-delegate-plugin'
}
GPU アクセラレーションを有効にする
次に、TfLiteDelegate
を使用して GPU で LiteRT を実行します。Java では、Terraform で
GpuDelegate
~Interpreter.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 デリゲートの概要。