O uso de unidades de processamento gráfico (GPUs) para executar modelos de machine learning (ML) pode melhorar muito o desempenho e a experiência do usuário dos seus aplicativos ativados para ML. Em dispositivos Android, é possível ativar um delegado e uma destas APIs:
- API Interpreter: este guia
- API Native (C/C++): guia
Esta página descreve como ativar a aceleração de GPU para modelos do TensorFlow Lite em apps Android usando a API Interpreter. Para mais informações sobre como usar o delegado de GPU do TensorFlow Lite, incluindo práticas recomendadas e técnicas avançadas, consulte a página Delegados de GPU.
Usar GPU com o TensorFlow Lite com o Google Play Services
A API Interpreter do TensorFlow Lite oferece um conjunto de APIs de uso geral para criar aplicativos de machine learning. Esta seção descreve como usar o delegado do acelerador de GPU com essas APIs com o TensorFlow Lite com o Google Play Services.
O TensorFlow Lite com o Google Play Services é o caminho recomendado para usar o TensorFlow Lite no Android. Se o aplicativo for destinado a dispositivos que não executam o Google Play, consulte a seção GPU com API Interpreter e TensorFlow Lite independente.
Adicionar dependências do projeto (com catálogo de versões .toml)
- Atualize o arquivo
libs.versions.toml
do seu projeto
[libraries]
...
tflite-gpu = { module = "org.tensorflow:tensorflow-lite-gpu", version = "2.X.Y" }
tflite-gpu-api = { module = "org.tensorflow:tensorflow-lite-gpu-api", version = "2.X.Y" }
...
- Adicionar dependências do projeto no arquivo
build.gradle.kts
do app
dependencies {
...
implementation(libraries.tflite.gpu)
implementation(libraries.tflite.gpu.api)
...
}
Adicionar dependências do projeto
Para ativar o acesso ao delegado da GPU, adicione
com.google.android.gms:play-services-tflite-gpu
ao arquivo build.gradle
do app:
dependencies {
...
implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
}
Ativar aceleração de GPU
Em seguida, inicialize o TensorFlow Lite com o Google Play Services com suporte a GPUs:
Kotlin
val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context) val interpreterTask = useGpuTask.continueWith { useGpuTask -> TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(useGpuTask.result) .build()) }
Java
Task<boolean> useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context); Task<Options> interpreterOptionsTask = useGpuTask.continueWith({ task -> TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build()); });
Por fim, é possível inicializar o intérprete transmitindo um GpuDelegateFactory
por InterpreterApi.Options
:
Kotlin
val options = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(GpuDelegateFactory()) val interpreter = InterpreterApi(model, options) // Run inference writeToInput(input) interpreter.run(input, output) readFromOutput(output)
Java
Options options = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new GpuDelegateFactory()); Interpreter interpreter = new InterpreterApi(model, options); // Run inference writeToInput(input); interpreter.run(input, output); readFromOutput(output);
O delegado de GPU também pode ser usado com a vinculação de modelos de ML no Android Studio. Para mais informações, consulte Gerar interfaces de modelo usando metadados.
Usar a GPU com o TensorFlow Lite independente
Se o aplicativo for destinado a dispositivos que não executam o Google Play, é possível agrupar o delegado da GPU ao aplicativo e usá-lo com a versão autônoma do TensorFlow Lite.
Adicionar dependências do projeto
Para ativar o acesso ao delegado da GPU, adicione
org.tensorflow:tensorflow-lite-gpu-delegate-plugin
ao arquivo
build.gradle
do app:
dependencies {
...
implementation 'org.tensorflow:tensorflow-lite'
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}
Ativar aceleração de GPU
Em seguida, execute o TensorFlow Lite na GPU com TfLiteDelegate
. Em Java, é possível especificar
GpuDelegate
por meio de Interpreter.Options
.
Kotlin
import org.tensorflow.lite.Interpreter import org.tensorflow.lite.gpu.CompatibilityList import org.tensorflow.lite.gpu.GpuDelegate val compatList = CompatibilityList() val options = Interpreter.Options().apply{ if(compatList.isDelegateSupportedOnThisDevice){ // if the device has a supported GPU, add the GPU delegate val delegateOptions = compatList.bestOptionsForThisDevice this.addDelegate(GpuDelegate(delegateOptions)) } else { // if the GPU is not supported, run on 4 threads this.setNumThreads(4) } } val interpreter = Interpreter(model, options) // Run inference writeToInput(input) interpreter.run(input, output) readFromOutput(output)
Java
import org.tensorflow.lite.Interpreter; import org.tensorflow.lite.gpu.CompatibilityList; import org.tensorflow.lite.gpu.GpuDelegate; // Initialize interpreter with GPU delegate Interpreter.Options options = new Interpreter.Options(); CompatibilityList compatList = CompatibilityList(); if(compatList.isDelegateSupportedOnThisDevice()){ // if the device has a supported GPU, add the GPU delegate GpuDelegate.Options delegateOptions = compatList.getBestOptionsForThisDevice(); GpuDelegate gpuDelegate = new GpuDelegate(delegateOptions); options.addDelegate(gpuDelegate); } else { // if the GPU is not supported, run on 4 threads options.setNumThreads(4); } Interpreter interpreter = new Interpreter(model, options); // Run inference writeToInput(input); interpreter.run(input, output); readFromOutput(output);
Modelos quantizados
Por padrão, as bibliotecas delegadas de GPU do Android oferecem suporte a modelos quantizados. Não é necessário fazer nenhuma mudança no código para usar modelos quantizados com o delegado da GPU. A seção a seguir explica como desativar o suporte quantizado para fins de teste ou experimentais.
Desativar suporte a modelos quantizados
O código a seguir mostra como desativar o suporte para modelos quantizados.
Java
GpuDelegate delegate = new GpuDelegate(new GpuDelegate.Options().setQuantizedModelsAllowed(false)); Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
Para saber mais sobre como executar modelos quantizados com aceleração de GPU, consulte a visão geral do delegado de GPU.