O Dia da Comunidade de ML é dia 9 de novembro! Junte-nos para atualização de TensorFlow, JAX, e mais Saiba mais

Melhores práticas de desempenho

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

Escolha o melhor modelo para a tarefa

Dependendo da tarefa, você precisará fazer uma troca entre a complexidade e o tamanho do modelo. Se sua tarefa requer alta precisão, você pode 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 de classificação de imagem comuns.

Graph of model size vs accuracy

Graph of accuracy vs latency

Um exemplo de modelos otimizados para dispositivos móveis são MobileNets , que são otimizados para aplicativos de visão móvel. Modelos hospedados 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 por transferência. Confira nosso tutorial de aprendizagem de transferência para classificação de imagens e detecção de objetos .

Perfil do seu modelo

Depois de selecionar um modelo candidato adequado para a sua tarefa, é uma boa prática criar o perfil e avaliar o seu modelo. A ferramenta de benchmarking TensorFlow Lite tem um criador de perfil integrado que mostra estatísticas de criação de perfil por operador. Isso pode ajudar a entender 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 do sistema Android padrão, e para visualizar as invocações do operador por tempo com ferramentas de criação de perfil baseadas em GUI.

Perfil e otimizar operadores no gráfico

Se um determinado operador aparece com frequência no modelo e, com base no perfil, você descobre que o operador consome mais tempo, pode tentar otimizar esse operador. Este cenário deve ser raro, pois o TensorFlow Lite otimizou versões para a maioria dos operadores. No entanto, você pode escrever uma versão mais rápida de uma operação personalizada se conhecer as restrições nas quais o operador é executado. Verifique nossa documentação do operador personalizado .

Otimize seu modelo

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

Confira nossos documentos de otimização de modelo para obter detalhes.

Ajuste o número de tópicos

O TensorFlow Lite é compatível com 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 fará com que seu modelo use mais recursos e potência.

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

Elimine cópias redundantes

Se a sua aplicação não for projetada cuidadosamente, pode 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, certifique-se de verificar cuidadosamente a documentação para advertências de desempenho. Por exemplo, a API Java é muito mais rápida se ByteBuffers forem usados ​​como entradas .

Crie um perfil de seu aplicativo com ferramentas específicas da plataforma

Ferramentas específicas de plataforma, como o Android Profiler e Instruments, fornecem uma grande variedade de informações 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 interpretador. O TensorFlow Lite pode usar delegados por:

  • 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, verifique o guia do delegado NNAPI .
  • O delegado GPU está disponível no Android e iOS, usando OpenGL / OpenCL e Metal, respectivamente. Para experimentá-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 os delegados do TensorFlow Lite para 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 comparar cada delegado para ver se é uma boa escolha para a 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 escolha para modelos grandes que possuem alta intensidade aritmética.

Precisa de mais ajuda

A equipe do TensorFlow tem o prazer de ajudar a diagnosticar e resolver problemas de desempenho específicos que você pode estar enfrentando. Registre um problema no GitHub com os detalhes do problema.