Compatibilidad con operadores LiteRT y TensorFlow

Los operadores de aprendizaje automático (AA) que uses en tu modelo pueden afectar la proceso para convertir un Modelo de TensorFlow a formato LiteRT. El conversor de LiteRT admite una cantidad limitada de operaciones de TensorFlow que se usan en modelos de inferencia, lo que significa que no todos los modelos son directamente convertibles. La herramienta de conversión te permite incluir operadores adicionales, pero convertir Este modelo también requiere que modifiques el entorno de ejecución de LiteRT. que usas para ejecutar tu modelo, lo que puede limitar tu capacidad usar opciones de implementación del entorno de ejecución estándar, como Servicios de Google Play

El conversor de LiteRT se diseñó para analizar modelos estructurar y aplicar optimizaciones para que sea compatible con la operadores compatibles directamente. Por ejemplo, según los operadores de AA en tu modelo, el conversor puede elidir o fusionar esos operadores para asignarlos a sus equivalentes de LiteRT.

Incluso para las operaciones admitidas, a veces se esperan patrones de uso específicos por motivos de rendimiento. La mejor manera de comprender cómo compilar un TensorFlow que se puede usar con LiteRT es pensar detenidamente cómo se convierten las operaciones de la optimización de Google, junto con las limitaciones que impone este proceso.

Operadores admitidos

Los operadores LiteRT integrados son un subconjunto de los operadores que son parte de la biblioteca principal de TensorFlow. Tu modelo de TensorFlow puede también incluyen operadores personalizados en forma de operadores compuestos o a operadores nuevos definidos por ti. En el siguiente diagrama, se muestran las relaciones entre estos operadores.

Operadores de TensorFlow

A partir de este rango de operadores de modelos de AA, hay 3 tipos de compatibles con el proceso de conversión:

  1. Modelos que solo cuentan con el operador LiteRT integrado. (Recomendado)
  2. Crea modelos con los operadores integrados y selecciona TensorFlow operadores principales.
  3. Modelos con los operadores integrados, los operadores principales de TensorFlow o operadores personalizados.

Si tu modelo solo contiene operaciones que son compatibles de forma nativa con LiteRT, no necesitas ninguna marca adicional para convertirlo. Esta es la ruta recomendada, ya que este tipo de modelo se convertirá sin problemas y es más fácil de optimizar y ejecutar con el entorno de ejecución de LiteRT predeterminado. También tienes más opciones de implementación para tu modelo, Servicios de Google Play Puedes comenzar con el Guía para el conversor de LiteRT. Consulta la página de operaciones de LiteRT para lista de operadores integrados.

Si necesitas incluir operaciones específicas de TensorFlow de la biblioteca principal, debes especificarlo en la conversión y asegurarte de que tu entorno de ejecución incluya esos las operaciones. Consulta el tema Selecciona operadores de TensorFlow para pasos detallados.

Siempre que sea posible, evita la última opción de incluir operadores personalizados en tu un modelo convertido. Operadores personalizados son operadores creados mediante la combinación múltiples operadores primitivos de TensorFlow Core o definir uno completamente nuevo. Cuando se convierten los operadores personalizados, pueden aumentar el tamaño de la incurriendo en dependencias fuera de la biblioteca LiteRT integrada. Operaciones personalizadas, si no se crean específicamente para la implementación en dispositivos móviles o dispositivos puede empeorar el rendimiento cuando se implementa con recursos limitados en comparación con un entorno de servidor. Por último, al igual que incluir operadores principales seleccionados de TensorFlow, los operadores personalizados requiere que modificar el entorno de ejecución del modelo lo que evita que aproveches los servicios del entorno de ejecución estándar, como los Servicios de Google Play.

Tipos admitidos

La mayoría de las operaciones LiteRT tienen como objetivo el punto flotante (float32) y inferencia cuantizada (uint8, int8), pero muchas operaciones aún no lo hacen para otros tipos como tf.float16 y cadenas.

Además de usar una versión diferente de las operaciones, la otra diferencia entre los modelos de punto flotante y los cuantificados es la forma en que se convierten. La conversión cuantificada requiere información de rango dinámico para los tensores. Esta requiere “cuantización falsa” durante el entrenamiento de modelos, obtener información del rango con un conjunto de datos de calibración o con “sobre la marcha” la estimación del rango. Consulta quantization para obtener más detalles.

Conversiones sencillas, plegado y fusión constantes

Varias operaciones de TensorFlow pueden procesarse con LiteRT incluso aunque no tienen un equivalente directo. Este es el caso de las operaciones que pueden simplemente quitarse del grafo (tf.identity) y reemplazarse por tensores (tf.placeholder), o se fusionan en operaciones más complejas (tf.nn.bias_add). Incluso algunas operaciones admitidas a veces se pueden quitar a través de una de estas opciones: procesos.

Esta es una lista no exhaustiva de operaciones de TensorFlow que se suelen quitar del 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

Operaciones experimentales

Las siguientes operaciones de LiteRT están presentes, pero no están listas para ser personalizadas de base:

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