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.
A partir dessa variedade de operadores de modelos de ML, há três tipos de compatíveis com o processo de conversão:
- Modelos com apenas o operador integrado LiteRT. (Recomendado)
- modelos com operadores integrados e opções selecionadas do TensorFlow operadores principais.
- 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