Delegado de aceleración de GPU con biblioteca de tareas

El uso de unidades de procesamiento de gráficos (GPU) para ejecutar sus modelos de aprendizaje automático (ML) puede mejorar drásticamente el rendimiento y la experiencia del usuario de sus aplicaciones habilitadas para ML. En dispositivos Android, puede habilitar la ejecución acelerada por GPU de sus modelos mediante un delegado y una de las siguientes API:

  • API de intérprete - guía
  • API de la biblioteca de tareas: esta guía
  • API nativa (C/C++): esta guía

En esta página, se describe cómo habilitar la aceleración de GPU para los modelos de TensorFlow Lite en aplicaciones de Android mediante la biblioteca de tareas. Para obtener más información sobre el delegado de GPU para TensorFlow Lite, incluidas las mejores prácticas y técnicas avanzadas, consulte la página de delegados de GPU .

Use GPU con TensorFlow Lite con los servicios de Google Play

Las bibliotecas de tareas de TensorFlow Lite proporcionan un conjunto de API específicas de tareas para crear aplicaciones de aprendizaje automático. Esta sección describe cómo usar el delegado del acelerador de GPU con estas API usando TensorFlow Lite con los servicios de Google Play.

TensorFlow Lite con los servicios de Google Play es la ruta recomendada para usar TensorFlow Lite en Android. Si su aplicación se dirige a dispositivos que no ejecutan Google Play, consulte la sección GPU con biblioteca de tareas y TensorFlow Lite independiente .

Agregar dependencias del proyecto

Para habilitar el acceso al delegado de GPU con las bibliotecas de tareas de TensorFlow Lite mediante los servicios de Google Play, agregue com.google.android.gms:play-services-tflite-gpu a las dependencias del archivo build.gradle de su aplicación:

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

Habilitar la aceleración de GPU

Luego, verifique de forma asincrónica que el delegado de GPU esté disponible para el dispositivo mediante la clase TfLiteGpu y habilite la opción de delegado de GPU para su clase de modelo de API de tareas con la clase BaseOptions . Por ejemplo, puede configurar GPU en ObjectDetector como se muestra en los siguientes ejemplos de código:

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

Usar GPU con TensorFlow Lite independiente

Si su aplicación se dirige a dispositivos que no ejecutan Google Play, es posible agrupar el delegado de GPU en su aplicación y usarlo con la versión independiente de TensorFlow Lite.

Agregar dependencias del proyecto

Para habilitar el acceso al delegado de GPU con las bibliotecas de tareas de TensorFlow Lite usando la versión independiente de TensorFlow Lite, agregue org.tensorflow:tensorflow-lite-gpu-delegate-plugin a las dependencias del archivo build.gradle de su aplicación:

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

Habilitar la aceleración de GPU

Luego habilite la opción de delegado de GPU para su clase de modelo de API de tareas con la clase BaseOptions . Por ejemplo, puede configurar GPU en ObjectDetector como se muestra en los siguientes ejemplos de código:

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