Práticas recomendadas de desempenho,Práticas recomendadas 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 compensação entre a complexidade do modelo e o tamanho. Se sua tarefa exigir alta precisão, talvez você precise 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 as 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 aplicativos 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 aprendizado de transferência usando o TensorFlow Lite Model Maker .

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 tem um criador de perfil integrado que mostra estatísticas 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 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.

Perfile e otimize os operadores no gráfico

Se um operador específico aparecer com frequência no modelo e, com base na criação de perfil, você descobrir que o operador consome mais tempo, poderá otimizar esse operador. Esse cenário deve ser raro, pois o TensorFlow Lite tem versões otimizadas 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. Confira o guia de operadores personalizados .

Otimize seu modelo

A otimização de modelos visa criar modelos menores, geralmente mais rápidos e com maior eficiência energética, 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 os documentos de otimização de 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 de operadores. Aumentar o número de threads, no entanto, fará com que seu modelo use mais recursos e energia.

Para alguns aplicativos, a latência pode ser mais importante que a eficiência energética. Você pode aumentar o número de encadeamentos definindo o número de encadeamentos do intérprete. A execução multithread, no entanto, tem o custo de maior 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 de 2x em relação ao single-thread, mas, se outro aplicativo estiver sendo executado ao mesmo tempo, pode resultar em um desempenho pior do que o single-thread.

Elimine cópias redundantes

Se seu aplicativo não for cuidadosamente projetado, 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, verifique cuidadosamente a documentação quanto a ressalvas 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 o Android Profiler e Instruments , fornecem muitas 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 interpretador. O TensorFlow Lite pode usar delegados por:

  • Usando a API de redes neurais do Android . Você pode utilizar esses back-ends de acelerador de hardware para melhorar a velocidade e a eficiência do seu modelo. Para habilitar a API de redes neurais, confira o guia de delegado NNAPI .
  • O delegado de 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 representante da GPU .
  • Delegado Hexagon está disponível no Android. Ele aproveita o Qualcomm Hexagon DSP se estiver disponível no dispositivo. Consulte o tutorial de 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 representantes 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 comparar cada delegado para ver se é uma boa escolha para seu aplicativo. 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 de desempenho específicos que você possa estar enfrentando. Registre um problema no GitHub com detalhes do problema.