Práticas recomendadas de performance

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

Escolher o melhor modelo para a tarefa

Dependendo da tarefa, você precisará escolher um equilíbrio entre a complexidade do modelo e tamanho. Se sua tarefa exigir alta acurácia, você pode precisar de uma um modelo complexo. Para tarefas que exigem menos precisão, é melhor usar uma menor porque usam menos espaço em disco e memória, também costumam ser mais rápidas e eficientes em termos de energia. Por exemplo, os gráficos abaixo mostram a acurácia e a latência em alguns modelos comuns de classificação de imagens.

Gráfico do tamanho do modelo vs.
precisão

Gráfico de acurácia versus latência

Um exemplo de modelo otimizado para dispositivos móveis é MobileNets, que são otimizados para dispositivos móveis aplicativos de visão. Kaggle "Modelos" lista várias outras otimizados especificamente para dispositivos móveis e incorporados.

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

Criar perfil do modelo

Depois de selecionar um modelo candidato ideal para sua tarefa, é uma boa prática para criar o perfil e comparar o modelo. Comparativo de mercado do LiteRT ferramenta tem um criador de perfil integrado que mostra estatísticas de criação de perfil por operador. Isso pode entender os gargalos de desempenho e saber quais operadores dominam de computação em nuvem.

Você também pode usar o LiteRT de rastreamento ao perfil o modelo no seu aplicativo Android, usando o rastreamento padrão do sistema Android, e visualizar as invocações do operador por tempo usando a criação de perfil baseada na GUI. ferramentas de visualização.

Criar perfil e otimizar operadores no gráfico

Se um determinado operador aparece com frequência no modelo e, com base a criação do perfil, você descobrir que o operador consome a maior parte do tempo, otimizar esse operador. Esse cenário é raro, porque o TensorFlow O Lite tem versões otimizadas para a maioria dos operadores. No entanto, talvez seja possível escreverá uma versão mais rápida de uma operação personalizada se conhecer as restrições é executado. Confira o guia de operadores personalizados.

Otimize o modelo

A otimização de modelos visa criar modelos menores, que geralmente são mais rápidos e mais eficientes energéticas, para que possam ser implantados em dispositivos móveis. O LiteRT 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

A LiteRT oferece suporte a kernels com várias linhas de execução para muitos operadores. Você pode aumentam o número de linhas de execução e aceleram a execução dos operadores. Aumentando o número de linhas de execução, no entanto, fará com que seu modelo use mais recursos e poder

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. No entanto, a execução em várias linhas de execução tem um custo maior em relação ao desempenho. variabilidade dependendo do que mais for executado simultaneamente. Isso é especialmente no caso de aplicativos móveis. Por exemplo, testes isolados podem ter 2x em comparação com uma linha de execução única, mas, se outro app estiver sendo executado ao mesmo tempo, isso pode resultar em pior desempenho do que com uma única linha de execução.

Eliminar cópias redundantes

Caso seu aplicativo não tenha sido projetado com cuidado, pode haver cópias redundantes ao alimentar a entrada e ler a saída do modelo. Não se esqueça de e eliminar cópias redundantes. Se você estiver usando APIs de nível superior, como Java, verifique cuidadosamente a documentação para verificar se há advertências de desempenho. Por exemplo: a API Java é muito mais rápida se ByteBuffers for usado como entradas.

Criar perfil do aplicativo com ferramentas específicas da plataforma

Ferramentas específicas da plataforma, como o Android criador de perfil e Os instrumentos fornecem riqueza de informações de criação de perfil que podem ser usadas para depurar seu app. Às vezes, 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 a plataforma ferramentas de criação de perfil específicas e práticas recomendadas para sua plataforma.

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

A LiteRT adicionou novas maneiras de acelerar modelos com um hardware mais rápido como GPUs, DSPs e aceleradores neurais. Normalmente, esses aceleradores são expostos por submódulos delegate que assumem da execução do intérprete. A LiteRT pode usar delegados das seguintes formas:

  • 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 diferente do padrão. Consulte LiteRT delegados para mais informações.

Alguns aceleradores funcionam melhor com diferentes tipos de modelos. Algumas delegados dão suporte apenas a modelos flutuantes ou modelos otimizados de uma forma específica. É é importante comparar cada delegado para ver se é uma boa para seu aplicativo. Por exemplo, um modelo muito pequeno pode vale a pena delegar o modelo à GPU. Por outro lado, os aceleradores é uma ótima opção para modelos grandes com alta intensidade aritmética.