Práticas recomendadas de performance

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

Escolher o melhor modelo para a tarefa

Dependendo da tarefa, você precisará comparar a complexidade e o tamanho do modelo. Se a tarefa exigir alta acurácia, talvez você precise de um modelo grande e complexo. Para tarefas que exigem menos precisão, é melhor usar um modelo menor, porque elas não apenas usam menos espaço em disco e memória, mas também são geralmente mais rápidas e mais eficientes em termos de energia. Por exemplo, os gráficos abaixo mostram as compensações de acurácia e latência em alguns modelos comuns de classificação de imagem.

Gráfico do tamanho do modelo vs
a acurácia

Gráfico de acurácia versus latência

Um exemplo de modelo otimizado para dispositivos móveis são o MobileNets, que é otimizado para aplicativos de visão em dispositivos móveis. O TensorFlow Hub lista vários outros modelos que foram otimizados especificamente para dispositivos móveis e incorporados.

É possível treinar novamente os modelos listados no próprio conjunto de dados usando o aprendizado por transferência.

Criar perfil do modelo

Depois de selecionar um modelo candidato certo para sua tarefa, é recomendável criar o perfil e comparar o modelo. A ferramenta de benchmark do 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.

Também é possível usar o rastreamento do TensorFlow Lite para criar o perfil do modelo no 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.

Criar perfil e otimizar operadores no gráfico

Se um operador específico aparecer com frequência no modelo e, com base na criação de perfil, você achar que ele consome a maior parte do tempo, otimize esse operador. Esse cenário é raro, porque o TensorFlow Lite tem versões otimizadas para a maioria dos operadores. No entanto, você poderá escrever uma versão mais rápida de uma operação personalizada se conhecer as restrições em que o operador é executado. Confira o guia de operadores personalizados.

Otimize o modelo

O objetivo da otimização de modelos é criar modelos menores, que geralmente são mais rápidos e 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 a quantização.

Para mais detalhes, confira os documentos sobre otimização de modelos.

Ajustar o número de linhas de execução

O TensorFlow Lite oferece suporte a kernels com várias linhas de execução para muitos operadores. É possível aumentar o número de linhas de execução e acelerar a execução de operadores. No entanto, aumentar o número de linhas de execução fará com que o modelo use mais recursos e energia.

Para alguns aplicativos, a latência pode ser mais importante do que a eficiência energética. Você pode aumentar o número de linhas de execução definindo o número de linhas de execução do intérprete. No entanto, a execução em várias linhas de execução aumenta a variabilidade de desempenho, dependendo do que mais é executado simultaneamente. Esse é especialmente o caso de apps para dispositivos móveis. Por exemplo, testes isolados podem ter o dobro de aceleração em comparação com uma linha de execução única, mas, se outro app estiver sendo executado ao mesmo tempo, isso poderá resultar em um desempenho pior do que com uma linha de execução única.

Eliminar cópias redundantes

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

Criar perfil do aplicativo com ferramentas específicas da plataforma

Ferramentas específicas da plataforma, como o Android Profiler e Instrumentos, fornecem diversas informações de criação de perfil que podem ser usadas para depurar seu app. À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. Familiarize-se com as ferramentas de criação de perfil específicas da plataforma e as práticas recomendadas para sua plataforma.

Avalie se o 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 delegate que assumem partes da execução do interpretador. Para usar delegados no TensorFlow Lite:

  • O delegado da GPU está disponível para Android e iOS, usando OpenGL/OpenCL e Metal, respectivamente. Para testá-los, consulte o delegado da GPU.
  • É possível criar seu próprio delegado se você tiver acesso a hardware não padrão. Consulte Delegados do TensorFlow Lite para mais informações.

Alguns aceleradores funcionam melhor com diferentes tipos de modelos. Alguns delegados são compatíveis apenas com modelos flutuantes ou otimizados de uma maneira específica. É importante comparar cada delegado para ver se é uma boa escolha para seu aplicativo. Por exemplo, se você tem um modelo muito pequeno, pode não valer a pena delegá-lo à GPU. Por outro lado, os aceleradores são uma ótima opção para modelos grandes com alta intensidade aritmética.