Arquitectura

TensorFlow Serving es un sistema de servicio 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, manteniendo la misma arquitectura de servidor y API. TensorFlow Serving proporciona una integración inmediata con los modelos de TensorFlow, pero se puede ampliar fácilmente para servir a otros tipos de modelos.

Conceptos clave

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

Servibles

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

El tamaño y la granularidad de un Servible son flexibles. Un solo servidor 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 futuras mejoras, como:

  • transmisión de resultados
  • API experimentales
  • modos de operación asíncronos

Los servicios no gestionan su propio ciclo de vida.

Los servicios típicos incluyen lo siguiente:

  • un Paquete de modelo guardado de TensorFlow ( tensorflow::Session )
  • una tabla de búsqueda para incrustar o buscar vocabulario

Versiones de servicio

TensorFlow Serving puede manejar una o más versiones de un servidor durante la vida útil de una sola instancia de servidor. Esto permite cargar nuevas configuraciones de algoritmos, pesos y otros datos con el tiempo. Las versiones permiten que se cargue más de una versión de un servicio al mismo tiempo, lo que admite 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 de servicio

Un flujo de servicio 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 servicios. 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 servidores independientes
  • solo compuesto servible

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

Cargadores

Los cargadores gestionan el ciclo de vida de un servidor. Loader API 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 complemento que encuentran y proporcionan servicios. Cada fuente proporciona cero o más flujos de servicio. Para cada flujo útil, un origen proporciona una instancia de cargador para cada versión que pone a disposición para cargar. (En realidad, una fuente está encadenada con cero o más adaptadores de fuente, 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 origen de referencia común. Por ejemplo, las fuentes pueden acceder a mecanismos como RPC y pueden 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 de servicio que deben cargarse y estar listas. Las fuentes comunican este conjunto de versiones de servicio para un único flujo de servicio a la vez. Cuando una fuente proporciona una nueva lista de versiones aspiradas al administrador, reemplaza la lista anterior para esa transmisión útil. 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 los Servables, lo que incluye:

  • cargando servibles
  • sirviendo servibles
  • descarga de servibles

Los gerentes escuchan las Fuentes y rastrean todas las versiones. El administrador intenta cumplir con las solicitudes de las fuentes, pero puede negarse a cargar una versión aspirada 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 termine de cargarse una versión más nueva, según una política para garantizar que al menos una versión se cargue en todo momento.

TensorFlow Serving Managers proporciona una interfaz simple y estrecha GetServableHandle() para que los clientes accedan a las instancias de servicio cargadas.

Centro

Mediante el uso de las API 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 servicios y los cargadores como objetos opacos.

Vida de un servidor

diagrama de arquitectura de servicio tf

Hablando en general:

  1. Las fuentes crean cargadores para versiones de servicio.
  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. El cargador contiene los metadatos que necesita para cargar el servidor.
  2. La Fuente usa una devolución de llamada para notificar al Gerente de la Versión Aspirada.
  3. El administrador aplica la política de versiones configurada para determinar la siguiente acción a realizar, 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 Administrador el Servible, ya sea especificando una versión explícitamente o simplemente solicitando la última versión. El administrador devuelve un identificador para el servidor.

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 el 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 Gerente Dinámico de la Versión Aspirada.
  3. El administrador dinámico aplica la política de versiones y decide cargar la nueva versión.
  4. El administrador dinámico le dice al cargador 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 para la nueva versión del servidor.

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 un único flujo de servicio.

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 anterior) 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 preservación de la disponibilidad garantizará que la nueva versión se cargue y esté lista antes de descargar la anterior. Para el 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

Las nuevas fuentes podrían admitir nuevos sistemas de archivos, ofertas en la nube y backends de algoritmos. TensorFlow Serving proporciona algunos componentes básicos comunes para que sea fácil y rápido crear nuevas fuentes. Por ejemplo, TensorFlow Serving incluye una utilidad para envolver el comportamiento de 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 backend. Por ejemplo, implementaría un nuevo Loader 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 Servible personalizado para obtener información sobre cómo crear un servidor personalizado.

dosificador

El procesamiento por lotes de múltiples solicitudes en una sola solicitud puede reducir significativamente el costo de realizar inferencias, especialmente en presencia de aceleradores de hardware como 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 a través de solicitudes en solicitudes por lotes que los sistemas de algoritmos pueden procesar de manera más eficiente. Consulte la Guía de procesamiento por lotes para obtener más información.