Compatibilidade dos operadores do TensorFlow Lite e do TensorFlow

Os operadores de machine learning (ML) usados no modelo podem afetar o processo de conversão de um modelo do TensorFlow para o formato do TensorFlow Lite. O conversor do TensorFlow Lite é compatível com um número limitado de operações do TensorFlow usadas em modelos de inferência comuns, o que significa que nem todos os modelos são diretamente conversíveis. A ferramenta de conversão permite incluir mais operadores, mas a conversão de um modelo dessa maneira também exige que você modifique o ambiente de execução do TensorFlow Lite usado para executar o modelo, o que pode limitar a capacidade de usar opções de implantação padrão de ambiente de execução, como o Google Play Services.

O conversor do TensorFlow Lite foi projetado para analisar a estrutura do modelo e aplicar otimizações para torná-lo compatível com os operadores com suporte direto. Por exemplo, dependendo dos operadores de ML no seu modelo, o conversor pode elide ou fundir esses operadores para mapeá-los para os equivalentes do TensorFlow Lite.

Mesmo para operações com suporte, às vezes padrões de uso específicos são esperados por motivos de desempenho. A melhor maneira de entender como criar um modelo do TensorFlow que possa ser usado com o TensorFlow Lite é considerar cuidadosamente como as operações são convertidas e otimizadas, além das limitações impostas por esse processo.

Operadores compatíveis

Os operadores integrados do TensorFlow Lite são um subconjunto dos operadores que fazem parte da biblioteca principal do TensorFlow. Seu modelo do TensorFlow também pode incluir operadores personalizados na forma de operadores compostos ou novos operadores definidos por você. O diagrama abaixo mostra as relações entre esses operadores.

Operadores do TensorFlow

Desta variedade de operadores de modelo de ML, há três tipos de modelos compatíveis com o processo de conversão:

  1. Modelos com apenas o operador integrado TensorFlow Lite. (Recomendado)
  2. Modelos com os operadores integrados e operadores principais selecionados do TensorFlow.
  3. Modelos com os operadores integrados, operadores principais do TensorFlow e/ou operadores personalizados.

Se o modelo tiver apenas operações com suporte nativo do TensorFlow Lite, nenhuma outra sinalização será necessária para convertê-lo. Esse é o caminho recomendado porque esse tipo de modelo é convertido sem problemas e é mais simples de otimizar e executar usando o ambiente de execução padrão do TensorFlow Lite. Você também tem mais opções de implantação para o modelo, como o Google Play Services. Comece com o guia do conversor do TensorFlow Lite. Consulte a página de operações do TensorFlow Lite para ver uma lista de operadores integrados.

Se você precisar incluir operações selecionadas do TensorFlow da biblioteca principal, especifique isso na conversão e garanta que o ambiente de execução inclua essas operações. Consulte o tópico Selecionar operadores do TensorFlow para ver as etapas detalhadas.

Sempre que possível, evite a última opção de incluir operadores personalizados no modelo convertido. Os operadores personalizados são criados pela combinação de vários operadores principais primitivos do TensorFlow ou pela definição de um completamente novo. Quando os operadores personalizados são convertidos, eles podem aumentar o tamanho do modelo geral com dependências fora da biblioteca integrada do TensorFlow Lite. As operações personalizadas, se não forem criadas especificamente para implantação de dispositivos móveis ou dispositivos, podem resultar em pior desempenho quando implantadas em dispositivos com recursos limitados em comparação com um ambiente de servidor. Por fim, assim como a inclusão de operadores principais selecionados do TensorFlow, os operadores personalizados exigem que você modifique o ambiente de execução do modelo, o que impede que você aproveite os serviços de ambiente de execução padrão, como o Google Play Services.

Tipos compatíveis

A maioria das operações do TensorFlow Lite tem como alvo a inferência de ponto flutuante (float32) e quantizada (uint8, int8), mas muitas operações ainda não o fazem para outros tipos, como tf.float16 e strings.

Além de usar versões diferentes das operações, a outra diferença entre modelos de ponto flutuante e quantizados é a maneira como eles são convertidos. A conversão quantizada requer informações de intervalo dinâmico para tensores. Isso exige a "quantização falsa" durante o treinamento do modelo, para receber informações de intervalo com um conjunto de dados de calibração ou fazer estimativas de intervalo "em tempo real". Consulte Quantização para mais detalhes.

Conversões diretas, dobra constante e fusão

Várias operações do TensorFlow podem ser processadas pelo TensorFlow Lite, mesmo que não tenham equivalente direto. Esse é o caso de operações que podem ser simplesmente removidas do gráfico (tf.identity), substituídas por tensores (tf.placeholder) ou fundidas em operações mais complexas (tf.nn.bias_add). Até mesmo algumas operações com suporte podem, às vezes, ser removidas por meio de um desses processos.

Veja a seguir uma lista com alguns exemplos das operações do TensorFlow que geralmente são removidas do gráfico:

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

Operações experimentais

As seguintes operações do TensorFlow Lite estão presentes, mas não estão prontas para modelos personalizados:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF