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 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, es necesario comprender los siguientes conceptos clave:

servibles

Los servables son la abstracción central de TensorFlow Serving. Los servables 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 son flexibles. Un único Servable puede incluir cualquier cosa, desde un único fragmento de una tabla de búsqueda hasta un único modelo y una tupla de modelos de inferencia. Los servables pueden ser de cualquier tipo e interfaz, lo que permite flexibilidad y mejoras futuras como:

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

Los servables no gestionan su propio ciclo de vida.

Los servicios típicos incluyen los siguientes:

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

Versiones disponibles

TensorFlow Serving puede manejar una o más versiones de un servidor durante la vida útil de una única instancia de servidor. Esto permite cargar nuevas configuraciones de algoritmos, pesos y otros datos con el tiempo. Las versiones permiten cargar más de una versión de un servable simultáneamente, lo que permite una implementación y experimentación graduales. En el momento de la entrega, 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 servir

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

Modelos

TensorFlow Serving representa un modelo como uno o más servables. Un modelo aprendido por máquina puede incluir uno o más algoritmos (incluidos pesos aprendidos) y tablas de búsqueda o incrustaciones.

Puede representar un modelo compuesto como cualquiera de los siguientes:

  • múltiples servicios independientes
  • servicio compuesto único

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

Cargadores

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

Fuentes

Las fuentes son módulos complementarios que encuentran y proporcionan servicios. Cada fuente proporciona cero o más flujos que se pueden servir. Para cada secuencia que se puede servir, una fuente proporciona una instancia de Loader para cada versión que pone a disposición para su carga. (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 Sources puede descubrir servables de sistemas de almacenamiento arbitrarios. TensorFlow Serving incluye implementaciones de código fuente 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 un estado que se comparte entre varios servables o versiones. Esto es útil para servables que usan actualizaciones delta (diff) entre versiones.

Versiones aspiradas

Las versiones aspiradas representan el conjunto de versiones disponibles que deben cargarse y estar listas. Las fuentes comunican este conjunto de versiones disponibles para una única secuencia disponible a la vez. Cuando una Fuente proporciona una nueva lista de versiones a las que se aspira al Administrador, reemplaza la lista anterior para esa secuencia que se puede servir. El Administrador descarga cualquier versión cargada previamente que ya no aparece en la lista.

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

Gerentes

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

  • cargando servibles
  • sirviendo servibles
  • descargando servables

Los administradores 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 directivos también podrán 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 esté cargada en todo momento.

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

Centro

Utilizando 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 servables y cargadores como objetos opacos.

La vida de un servible

diagrama de arquitectura de servicio tf

Hablando en general:

  1. Las fuentes crean cargadores para versiones que se pueden servir.
  2. Los cargadores se envían como versiones aspiradas al administrador, que los carga y sirve 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 todos los metadatos que necesita para cargar el servable.
  2. La Fuente utiliza 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 proporciona al cargador los recursos necesarios y le indica que cargue la nueva versión.
  5. Los clientes solicitan el Servable al Administrador, 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, digamos que una Fuente representa un gráfico de TensorFlow con pesos de modelo actualizados 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 Administrador Dinámico de la Versión Aspirada.
  3. El Administrador Dinámico aplica la Política de Versión y decide cargar la nueva versión.
  4. El administrador dinámico le dice al cargador que hay suficiente memoria. El cargador 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 de 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 versiones dentro de una única secuencia 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 antigua) y la Política de preservación de recursos (evite tener dos versiones cargadas simultáneamente, lo que requerirá 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 recursos son bajos, la Política de preservación de disponibilidad garantizará 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 múltiples instancias de servidor, la Política de preservació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 de nube y backends de algoritmos. TensorFlow Serving proporciona algunos componentes básicos comunes para que la creación de nuevas fuentes sea fácil y rápida. Por ejemplo, TensorFlow Serving incluye una utilidad para ajustar el comportamiento de sondeo a una fuente simple. Las fuentes están estrechamente relacionadas con Loaders para algoritmos específicos y servicios 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 cargador para cargar, proporcionar acceso y descargar una instancia de un nuevo tipo de modelo de aprendizaje automático disponible. Anticipamos la creación de cargadores para tablas de búsqueda y algoritmos adicionales.

Consulte el documento Servible personalizado para aprender cómo crear un servidor personalizado.

dosificador

La agrupación de múltiples solicitudes en una sola solicitud puede reducir significativamente el costo de realizar la inferencia, 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 de tipo específico entre 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.