使用图形处理单元 (GPU) 运行机器学习 (ML) 模型可以显著提高机器学习支持的应用程序的性能和用户体验。在 Android 设备上,您可以启用
委托 和以下 API 之一
本页介绍如何使用解释器 API 在 Android 应用程序中为 TensorFlow Lite 模型启用 GPU 加速。有关使用 TensorFlow Lite 的 GPU 委托的更多信息(包括最佳实践和高级技术),请参阅 GPU 委托 页面。
使用 Google Play 服务在 TensorFlow Lite 中使用 GPU
TensorFlow Lite Java/Kotlin 解释器 API 提供了一组通用 API,用于构建机器学习应用程序。本节介绍如何使用 Google Play 服务的 TensorFlow Lite 与这些 API 结合使用 GPU 加速委托。
使用 Google Play 服务的 TensorFlow Lite 是在 Android 上使用 TensorFlow Lite 的推荐方法。如果您的应用程序面向未运行 Google Play 的设备,请参阅 使用解释器 API 和独立 TensorFlow Lite 的 GPU 部分。
添加项目依赖项
要启用对 GPU 委托的访问,请将 com.google.android.gms:play-services-tflite-gpu
添加到您的应用程序的 build.gradle
文件中
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 服务的 TensorFlow Lite
Kotlin
val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context) val interpreterTask = useGpuTask.continueWith { useGpuTask -> TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(useGpuTask.result) .build()) }
Java
TaskuseGpuTask = TfLiteGpu.isGpuDelegateAvailable(context); Task interpreterOptionsTask = useGpuTask.continueWith({ task -> TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build()); });
最后,您可以通过 InterpreterApi.Options
传递 GpuDelegateFactory
来初始化解释器
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 模型绑定一起使用。有关更多信息,请参阅 使用元数据生成模型接口。
使用独立 TensorFlow Lite 的 GPU
如果您的应用程序面向未运行 Google Play 的设备,则可以将 GPU 委托捆绑到您的应用程序中,并将其与独立版本的 TensorFlow Lite 一起使用。
添加项目依赖项
要启用对 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 加速
然后使用 TfLiteDelegate
在 GPU 上运行 TensorFlow Lite。在 Java 中,您可以通过 Interpreter.Options
指定 GpuDelegate
。
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 委托库默认支持量化模型。您无需进行任何代码更改即可将量化模型与 GPU 委托一起使用。以下部分介绍如何禁用量化支持以进行测试或实验目的。
禁用量化模型支持
以下代码展示了如何禁用对量化模型的支持。
Java
GpuDelegate delegate = new GpuDelegate(new GpuDelegate.Options().setQuantizedModelsAllowed(false)); Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
有关使用 GPU 加速运行量化模型的更多信息,请参阅 GPU 代理 概述。