Join us at DevFest for Ukraine June 14-15 Online Register now

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, mientras mantiene 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 ofrecer otros tipos de modelos.

Conceptos clave

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

Servables

Servables son la abstracción central en TensorFlow porción. 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 porción puede manejar una o más versiones de un servable 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

Una corriente servable es la secuencia de versiones de un servable, ordenada por el aumento de números de versión.

Modelos

TensorFlow Porción representa un modelo como uno o más servables. 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

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

Fuentes

Las fuentes se plugin de módulos que se encuentran y proporcionan servables. Cada fuente proporciona cero o más transmisiones servibles. 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

Versiones aspirado representan el conjunto de versiones se pueden publicar y que deben ser cargados y listos. 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.

Ver el tutorial avanzado para ver cómo la versión de carga funciona en la práctica.

Gerentes

Los gerentes manejan el ciclo de vida completo de Servables, incluyendo:

  • 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 que garantice que al menos una versión esté cargada en todo momento.

TensorFlow Managers Sirviendo proporcionan un simple, interfaz estrecho - GetServableHandle() - para los clientes acceder cargado casos se pueden publicar y.

Centro

Utilizando el estándar TensorFlow Sirviendo Apis, TensorFlow Sirviendo Core gestiona los siguientes aspectos de servables:

  • ciclo vital
  • métrica

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

Vida de un Servable

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. El cargador 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 versiones 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 cargarla). uno nuevo). Para el 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 conservación de disponibilidad asegurará que la nueva versión esté cargada y 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

New Sources podría admitir nuevos sistemas de archivos, ofertas en la nube y backends de algoritmos. TensorFlow Serving proporciona algunos componentes 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.

Ver el origen personalizado documento para obtener más información sobre cómo crear una costumbre de origen.

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.

Ver el servable personalizada documento para aprender cómo crear un servable 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 a través de solicitudes en solicitudes por lotes que los sistemas de algoritmos pueden procesar de manera más eficiente. Ver la Guía de procesamiento por lotes para obtener más información.