Delegado de aceleração de GPU com biblioteca de tarefas

O uso de unidades de processamento gráfico (GPUs) para executar seus modelos de aprendizado de máquina (ML) pode melhorar drasticamente o desempenho e a experiência do usuário de seus aplicativos habilitados para ML. Em dispositivos Android, você pode ativar a execução acelerada por GPU dos seus modelos usando um delegado e uma das seguintes APIs:

  • API de intérprete - guia
  • API da biblioteca de tarefas – este guia
  • API nativa (C/C++) – este guia

Esta página descreve como ativar a aceleração de GPU para modelos do TensorFlow Lite em aplicativos Android usando a biblioteca Task. Para obter mais informações sobre o delegado de GPU para TensorFlow Lite, incluindo práticas recomendadas e técnicas avançadas, consulte a página de delegados de GPU .

Use GPU com TensorFlow Lite com Google Play Services

As bibliotecas de tarefas do TensorFlow Lite fornecem um conjunto de APIs específicas de tarefas para criar aplicativos de machine learning. Esta seção descreve como usar o delegado do acelerador de GPU com essas APIs usando o TensorFlow Lite com o Google Play Services.

TensorFlow Lite com Google Play Services é o caminho recomendado para usar o TensorFlow Lite no Android. Se seu aplicativo for direcionado a dispositivos que não executam o Google Play, consulte a seção GPU com biblioteca de tarefas e TensorFlow Lite autônomo .

Adicionar dependências do projeto

Para ativar o acesso ao delegado da GPU com as bibliotecas de tarefas do TensorFlow Lite usando o Google Play Services, adicione com.google.android.gms:play-services-tflite-gpu às dependências do arquivo build.gradle do seu aplicativo:

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

Habilitar aceleração de GPU

Em seguida, verifique de forma assíncrona se o delegado de GPU está disponível para o dispositivo usando a classe TfLiteGpu e habilite a opção de delegado de GPU para sua classe de modelo de API de tarefa com a classe BaseOptions . Por exemplo, você pode configurar a GPU no ObjectDetector conforme mostrado nos exemplos de código a seguir:

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

Use GPU com TensorFlow Lite independente

Se o seu aplicativo for direcionado a dispositivos que não executam o Google Play, é possível agrupar o delegado da GPU ao seu aplicativo e usá-lo com a versão autônoma do TensorFlow Lite.

Adicionar dependências do projeto

Para permitir o acesso ao delegado de GPU com as bibliotecas de tarefas do TensorFlow Lite usando a versão autônoma do TensorFlow Lite, adicione org.tensorflow:tensorflow-lite-gpu-delegate-plugin às dependências do arquivo build.gradle do seu aplicativo:

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

Habilitar aceleração de GPU

Em seguida, habilite a opção de delegação de GPU para sua classe de modelo de API de tarefa com a classe BaseOptions . Por exemplo, você pode configurar a GPU no ObjectDetector conforme mostrado nos exemplos de código a seguir:

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