Práticas recomendadas de desempenho

Dispositivos móveis e embarcados têm recursos computacionais limitados, por isso é importante manter a eficiência dos recursos do seu aplicativo. Compilamos uma lista de práticas recomendadas e estratégias que você pode usar para melhorar o desempenho do modelo do TensorFlow Lite.

Escolha o melhor modelo para a tarefa

Dependendo da tarefa, você precisará fazer uma compensação entre a complexidade e o tamanho do modelo. Se sua tarefa exigir alta precisão, você poderá precisar de um modelo grande e complexo. Para tarefas que exigem menos precisão, é melhor usar um modelo menor porque eles não apenas usam menos espaço em disco e memória, mas também são geralmente mais rápidos e mais eficientes em termos de energia. Por exemplo, os gráficos abaixo mostram compensações de precisão e latência para alguns modelos comuns de classificação de imagens.

Graph of model size vs accuracy

Graph of accuracy vs latency

Um exemplo de modelos otimizados para dispositivos móveis são os MobileNets , que são otimizados para aplicações de visão móvel. O TensorFlow Hub lista vários outros modelos que foram otimizados especificamente para dispositivos móveis e incorporados.

Você pode treinar novamente os modelos listados em seu próprio conjunto de dados usando o aprendizado de transferência. Confira os tutoriais de aprendizagem por transferência usando o TensorFlow Lite Model Maker .

Crie um perfil do seu modelo

Depois de selecionar um modelo candidato adequado para sua tarefa, é uma boa prática traçar o perfil e comparar seu modelo. A ferramenta de benchmarking TensorFlow Lite possui um criador de perfil integrado que mostra estatísticas de perfil por operador. Isso pode ajudar a compreender os gargalos de desempenho e quais operadores dominam o tempo de computação.

Você também pode usar o rastreamento do TensorFlow Lite para criar o perfil do modelo em seu aplicativo Android, usando o rastreamento padrão do sistema Android, e para visualizar as invocações do operador por tempo com ferramentas de criação de perfil baseadas em GUI.

Crie perfis e otimize operadores no gráfico

Se um determinado operador aparecer com frequência no modelo e, com base na criação de perfil, você descobrir que o operador consome mais tempo, você poderá otimizar esse operador. Este cenário deve ser raro, pois o TensorFlow Lite possui versões otimizadas para a maioria das operadoras. No entanto, você poderá escrever uma versão mais rápida de uma operação personalizada se conhecer as restrições nas quais o operador é executado. Confira o guia de operadores personalizados .

Otimize seu modelo

A otimização de modelos visa criar modelos menores, geralmente mais rápidos e mais eficientes em termos energéticos, para que possam ser implantados em dispositivos móveis. O TensorFlow Lite oferece suporte a diversas técnicas de otimização, como quantização.

Confira a documentação de otimização do modelo para obter detalhes.

Ajuste o número de threads

O TensorFlow Lite oferece suporte a kernels multithread para muitos operadores. Você pode aumentar o número de threads e acelerar a execução dos operadores. Aumentar o número de threads, entretanto, fará com que seu modelo use mais recursos e energia.

Para algumas aplicações, a latência pode ser mais importante que a eficiência energética. Você pode aumentar o número de threads definindo o número de threads do interpretador. A execução multithread, entretanto, tem o custo de aumentar a variabilidade de desempenho dependendo do que mais é executado simultaneamente. Este é particularmente o caso de aplicativos móveis. Por exemplo, testes isolados podem mostrar uma aceleração 2x versus single-threaded, mas, se outro aplicativo estiver sendo executado ao mesmo tempo, isso pode resultar em pior desempenho do que single-threaded.

Elimine cópias redundantes

Se o seu aplicativo não for cuidadosamente projetado, poderá haver cópias redundantes ao alimentar a entrada e ler a saída do modelo. Certifique-se de eliminar cópias redundantes. Se você estiver usando APIs de nível superior, como Java, verifique cuidadosamente a documentação para obter advertências de desempenho. Por exemplo, a API Java é muito mais rápida se ByteBuffers forem usados ​​como entradas .

Crie o perfil do seu aplicativo com ferramentas específicas da plataforma

Ferramentas específicas da plataforma, como Android Profiler e Instruments, fornecem diversas informações de criação de perfil que podem ser usadas para depurar seu aplicativo. Às vezes, o bug de desempenho pode não estar no modelo, mas em partes do código do aplicativo que interagem com o modelo. Certifique-se de se familiarizar com as ferramentas de criação de perfil específicas da plataforma e as práticas recomendadas para sua plataforma.

Avalie se o seu modelo se beneficia do uso de aceleradores de hardware disponíveis no dispositivo

O TensorFlow Lite adicionou novas maneiras de acelerar modelos com hardware mais rápido, como GPUs, DSPs e aceleradores neurais. Normalmente, esses aceleradores são expostos por meio de submódulos delegados que assumem partes da execução do intérprete. O TensorFlow Lite pode usar delegados:

  • Usando a API de redes neurais do Android. Você pode utilizar esses back-ends de aceleradores de hardware para melhorar a velocidade e a eficiência do seu modelo. Para habilitar a API de redes neurais, confira o guia do delegado NNAPI .
  • O delegado GPU está disponível em Android e iOS, usando OpenGL/OpenCL e Metal, respectivamente. Para testá-los, consulte o tutorial e a documentação do delegado de GPU.
  • O delegado Hexagon está disponível no Android. Ele aproveita o Qualcomm Hexagon DSP se estiver disponível no dispositivo. Consulte o tutorial do delegado Hexagon para obter mais informações.
  • É possível criar seu próprio delegado se você tiver acesso a hardware não padrão. Consulte Delegados do TensorFlow Lite para obter mais informações.

Esteja ciente de que alguns aceleradores funcionam melhor para diferentes tipos de modelos. Alguns delegados suportam apenas modelos flutuantes ou modelos otimizados de uma maneira específica. É importante avaliar cada delegado para ver se é uma boa escolha para sua aplicação. Por exemplo, se você tiver um modelo muito pequeno, pode não valer a pena delegar o modelo à API NN ou à GPU. Por outro lado, os aceleradores são uma ótima opção para modelos grandes que possuem alta intensidade aritmética.

Precisa de mais ajuda

A equipe do TensorFlow terá prazer em ajudar a diagnosticar e resolver problemas específicos de desempenho que você possa estar enfrentando. Registre um problema no GitHub com detalhes do problema.