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 habilitar a execução acelerada por GPU de seus modelos usando um delegado e uma das seguintes APIs:

  • API do 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 de tarefas. 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 serviços do Google Play

As bibliotecas de tarefas do TensorFlow Lite fornecem um conjunto de APIs específicas de tarefas para criar aplicativos de aprendizado de máquina. Esta seção descreve como usar o acelerador de GPU delegado com essas APIs usando o TensorFlow Lite com os serviços do Google Play.

O TensorFlow Lite com serviços do Google Play é 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 independente .

Adicionar dependências do projeto

Para permitir o acesso ao delegado da GPU com as bibliotecas de tarefas do TensorFlow Lite usando os serviços do Google Play, 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'
}

Ativar 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:

KotlinGenericName

        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 a GPU com o TensorFlow Lite autônomo

Se seu aplicativo for destinado a dispositivos que não executam o Google Play, é possível agrupar o delegado de 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 da 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'
}

Ativar aceleração de GPU

Em seguida, 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:

KotlinGenericName

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