¡El Día de la Comunidad de ML es el 9 de noviembre! Únase a nosotros para recibir actualizaciones de TensorFlow, JAX, y más Más información

Arquitectura

TensorFlow Serving es un sistema de publicación flexible y de alto rendimiento para modelos de aprendizaje automático, diseñado para entornos de producción. TensorFlow Serving facilita la implementación de nuevos algoritmos y experimentos, al tiempo que mantiene la misma arquitectura de servidor y API. TensorFlow Serving proporciona una integración lista para usar con los modelos de TensorFlow, pero se puede ampliar fácilmente para ofrecer otros tipos de modelos.

Conceptos clave

Para comprender la arquitectura de TensorFlow Serving, debe comprender los siguientes conceptos clave:

Servables

Los servicios son la abstracción central en TensorFlow Serving. Los servibles son los objetos subyacentes que los clientes utilizan para realizar cálculos (por ejemplo, una búsqueda o inferencia).

El tamaño y la granularidad de un Servable es flexible. Un solo Servable puede incluir cualquier cosa, desde un solo fragmento de una tabla de búsqueda hasta un solo modelo y una tupla de modelos de inferencia. Los servicios pueden ser de cualquier tipo e interfaz, lo que permite flexibilidad y mejoras futuras como:

  • transmisión de resultados
  • API experimentales
  • modos de funcionamiento asincrónicos

Los servibles no gestionan su propio ciclo de vida.

Los servibles típicos incluyen lo siguiente:

  • un TensorFlow SavedModelBundle ( tensorflow::Session )
  • una tabla de búsqueda para incrustar o búsquedas de vocabulario

Versiones servibles

TensorFlow Serving puede manejar una o más versiones de un servidor durante la vida útil de una sola instancia de servidor. Esto permite que nuevas configuraciones de algoritmos, pesos y otros datos se carguen a lo largo del tiempo. Las versiones permiten que se cargue más de una versión de un servidor al mismo tiempo, lo que permite la implementación y la experimentación graduales. En el momento del servicio, los clientes pueden solicitar la última versión o una identificación de versión específica, para un modelo en particular.

Secuencias que se pueden publicar

Un flujo servible es la secuencia de versiones de un servicio, ordenadas por números de versión crecientes.

Modelos

TensorFlow Serving representa un modelo como uno o más servidores. Un modelo de aprendizaje automático puede incluir uno o más algoritmos (incluidos los pesos aprendidos) y tablas de búsqueda o incrustación.

Puede representar un modelo compuesto como cualquiera de los siguientes:

  • múltiples servables independientes
  • único compuesto servible

Un servible también puede corresponder a una fracción de un modelo. Por ejemplo, una tabla de búsqueda grande se podría fragmentar en muchas instancias de TensorFlow Serving.

Cargadores

Los cargadores gestionan el ciclo de vida de un servicio. La API Loader habilita una infraestructura común independiente de algoritmos de aprendizaje específicos, datos o casos de uso de productos involucrados. Específicamente, los cargadores estandarizan las API para cargar y descargar un servidor.

Fuentes

Las fuentes son módulos de complementos que encuentran y proporcionan servicios. Cada fuente proporciona cero o más flujos de servicio. Para cada flujo servible, un origen proporciona una instancia de cargador para cada versión que pone a disposición para ser cargada. (En realidad, una fuente está encadenada con cero o más SourceAdapters, y el último elemento de la cadena emite los cargadores).

La interfaz de TensorFlow Serving para fuentes puede descubrir servicios de sistemas de almacenamiento arbitrarios. TensorFlow Serving incluye implementaciones de fuentes de referencia comunes. Por ejemplo, las fuentes pueden acceder a mecanismos como RPC y sondear un sistema de archivos.

Las fuentes pueden mantener el estado que se comparte entre varios servidores o versiones. Esto es útil para servidores que usan actualizaciones delta (diff) entre versiones.

Versiones aspiradas

Las versiones aspiradas representan el conjunto de versiones servibles que deben cargarse y estar listas. Las fuentes comunican este conjunto de versiones servibles para un solo flujo servible a la vez. Cuando una fuente proporciona una nueva lista de versiones aspiradas al administrador, reemplaza la lista anterior para ese flujo servible. El administrador descarga las versiones cargadas anteriormente que ya no aparecen en la lista.

Consulte el tutorial avanzado para ver cómo funciona la carga de versiones en la práctica.

Gerentes

Los gerentes manejan el ciclo de vida completo de Servables, que incluye:

  • cargando Servables
  • sirviendo a Servables
  • descargando Servables

Los gerentes escuchan las fuentes y realizan un seguimiento de todas las versiones. El administrador intenta cumplir con las solicitudes de las fuentes, pero puede negarse a cargar una versión deseada si, por ejemplo, los recursos necesarios no están disponibles. Los gerentes también pueden posponer una "descarga". Por ejemplo, un administrador puede esperar para descargar hasta que una versión más nueva termine de cargarse, según una política para garantizar que al menos una versión esté cargada en todo momento.

Los administradores de servicio de TensorFlow proporcionan una interfaz simple y estrecha, GetServableHandle() , para que los clientes accedan a instancias cargadas.

Centro

Con las APis de servicio estándar de TensorFlow, TensorFlow Serving Core administra los siguientes aspectos de los servicios:

  • ciclo vital
  • métrica

TensorFlow Serving Core trata los servidores y los cargadores como objetos opacos.

Vida de un servible

tf diagrama de arquitectura de servicio

Hablando en general:

  1. Las fuentes crean cargadores para versiones servibles.
  2. Los cargadores se envían como versiones aspiradas al administrador, que los carga y los atiende a las solicitudes de los clientes.

Con más detalle:

  1. Un complemento de origen crea un cargador para una versión específica. Loader contiene los metadatos que necesita para cargar el Servable.
  2. La fuente utiliza una devolución de llamada para notificar al administrador de la versión aspirada.
  3. El Gerente aplica la Política de Versión configurada para determinar la siguiente acción a tomar, que podría ser descargar una versión previamente cargada o cargar la nueva versión.
  4. Si el administrador determina que es seguro, le da al cargador los recursos necesarios y le dice al cargador que cargue la nueva versión.
  5. Los clientes solicitan al Gerente el Servable, ya sea especificando una versión explícitamente o simplemente solicitando la última versión. El administrador devuelve un identificador para el Servable.

Por ejemplo, supongamos que una fuente representa un gráfico de TensorFlow con pesos de modelo que se actualizan con frecuencia. Los pesos se almacenan en un archivo en disco.

  1. La fuente detecta una nueva versión de los pesos del modelo. Crea un cargador que contiene un puntero a los datos del modelo en el disco.
  2. La fuente notifica al administrador dinámico de la versión aspirada.
  3. Dynamic Manager aplica la Política de versiones y decide cargar la nueva versión.
  4. Dynamic Manager le dice al Loader que hay suficiente memoria. Loader crea una instancia del gráfico de TensorFlow con los nuevos pesos.
  5. Un cliente solicita un identificador para la última versión del modelo y Dynamic Manager devuelve un identificador a la nueva versión del Servable.

Extensibilidad

TensorFlow Serving proporciona varios puntos de extensión donde puede agregar nuevas funciones.

Política de versión

Las políticas de versión especifican la secuencia de carga y descarga de la versión dentro de una única secuencia servible.

TensorFlow Serving incluye dos políticas que se adaptan a la mayoría de los casos de uso conocidos. Estas son la Política de preservación de disponibilidad (evite dejar cero versiones cargadas; generalmente cargue una nueva versión antes de descargar una antigua) y la Política de preservación de recursos (evite tener dos versiones cargadas simultáneamente, lo que requiere el doble de recursos; descargue una versión anterior antes de cargar uno nuevo). Para un uso simple de TensorFlow Serving donde la disponibilidad de servicio de un modelo es importante y los costos de los recursos son bajos, la Política de conservación de disponibilidad asegurará que la nueva versión esté cargada y lista antes de descargar la anterior. Para un uso sofisticado de TensorFlow Serving, por ejemplo, administrar versiones en varias instancias de servidor, la Política de conservación de recursos requiere la menor cantidad de recursos (sin búfer adicional para cargar nuevas versiones).

Fuente

New Sources podría admitir nuevos sistemas de archivos, ofertas en la nube y backends de algoritmos. TensorFlow Serving proporciona algunos elementos básicos comunes para facilitar y agilizar la creación de nuevas fuentes. Por ejemplo, TensorFlow Serving incluye una utilidad para ajustar el comportamiento del sondeo en torno a una fuente simple. Las fuentes están estrechamente relacionadas con los cargadores para algoritmos específicos y servidores de alojamiento de datos.

Consulte el documento Fuente personalizada para obtener más información sobre cómo crear una fuente personalizada.

Cargadores

Los cargadores son el punto de extensión para agregar algoritmos y backends de datos. TensorFlow es uno de esos algoritmos de backend. Por ejemplo, implementaría un nuevo cargador para cargar, proporcionar acceso y descargar una instancia de un nuevo tipo de modelo de aprendizaje automático útil. Anticipamos la creación de cargadores para tablas de búsqueda y algoritmos adicionales.

Consulte el documento Servicio personalizado para aprender a crear un servicio personalizado.

Dosificador

La agrupación de múltiples solicitudes en una sola solicitud puede reducir significativamente el costo de realizar inferencias, especialmente en presencia de aceleradores de hardware como las GPU. TensorFlow Serving incluye un widget de procesamiento por lotes de solicitudes que permite a los clientes agrupar fácilmente sus inferencias específicas de tipo en solicitudes en solicitudes por lotes que los sistemas de algoritmos pueden procesar de manera más eficiente. Consulte la Guía de lotes para obtener más información.