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:
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
TaskuseGpuTask = 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);