Compatibilidade do operador LiteRT e do TensorFlow

Os operadores de machine learning (ML) usados no modelo podem afetar é o processo de conversão Modelo do TensorFlow para o formato LiteRT. O conversor LiteRT oferece suporte a um número limitado de operações do TensorFlow usadas em modelos de inferência, ou seja, nem todo modelo é diretamente conversível. A ferramenta de conversão permite incluir operadores adicionais, mas a conversão um modelo dessa maneira também exige que você modifique o tempo de execução LiteRT ambiente de execução usado para executar o modelo, o que pode limitar sua capacidade usar opções padrão de implantação de ambiente de execução, como Google Play Services.

O LiteRT Converter é projetado para analisar modelos estrutura e aplicar otimizações para torná-lo compatível com o operadores diretamente compatíveis. Por exemplo, dependendo dos operadores de ML seu modelo, o conversor pode elide ou fusível operadores a fim de mapeá-los para seus correspondentes da LiteRT.

Mesmo nas operações com suporte, pode haver padrões de uso específicos, por motivos de desempenho. A melhor forma de entender como criar um um modelo que pode ser usado A LiteRT consiste em considerar cuidadosamente como as operações são convertidas e são otimizados, junto com as limitações impostas por esse processo.

Operadores compatíveis

Os operadores integrados da LiteRT são um subconjunto dos operadores. que fazem parte da biblioteca principal do TensorFlow. Seu modelo TensorFlow pode também 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

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

  1. Modelos com apenas o operador integrado LiteRT. (Recomendado)
  2. modelos com operadores integrados e opções selecionadas do TensorFlow operadores principais.
  3. modelos com operadores integrados, operadores principais do TensorFlow e/ou operadores personalizados.

Caso seu modelo contenha apenas operações com suporte nativo da LiteRT, você não precisa de outras flags para convertê-la. Isso é o caminho recomendado porque esse tipo de modelo converte sem problemas e é mais simples de otimizar e executar usando o ambiente de execução LiteRT padrão. Há também mais opções de implantação para o modelo, como Google Play Services. Você pode começar com o Guia do conversor de LiteRT (em inglês). Consulte a página de operações da LiteRT para lista de operadores integrados.

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

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

Tipos compatíveis

A maioria das operações LiteRT visa pontos flutuantes (float32) e inferência quantizada (uint8, int8), mas muitas operações ainda não fazem isso para outros tipos. como tf.float16 e strings.

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

Conversões simples, dobrável e fusão constantes

Várias operações do TensorFlow podem ser processadas pelo LiteRT até mesmo embora não tenham equivalente direto. Esse é o caso de operações que podem serão simplesmente removidos do gráfico (tf.identity), substituídos por tensores; (tf.placeholder) ou fundida em operações mais complexas (tf.nn.bias_add). Até mesmo algumas operações com suporte podem às vezes ser removidas por um desses processos de negócios seguros.

Confira a seguir uma lista com alguns exemplos das operações do TensorFlow que costumam ser 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 LiteRT estão presentes, mas não estão prontas para uso personalizado de ML:

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