使用 Task 库的 GPU 加速委托

使用图形处理单元 (GPU) 运行机器学习 (ML) 模型可以极大地提高机器学习支持的应用程序的性能和用户体验。在 Android 设备上,您可以使用 委托 和以下 API 之一,启用模型的 GPU 加速执行

  • 解释器 API - 指南
  • Task 库 API - 本指南
  • 原生 (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 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 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);