tensorflow :: servicio:: Cargador

Esto es una clase abstracta.

#include <loader.h>

Una abstracción estandarizada para un objeto que administra el ciclo de vida de un servidor, incluida su carga y descarga.

Resumen

Los servibles son objetos arbitrarios que sirven a algoritmos o datos que a menudo, aunque no necesariamente, utilizan un modelo de aprendizaje automático.

A Cargador para un objeto servable representa una instancia de una corriente de versiones se pueden publicar y, todos comparten un nombre común (por ejemplo, "my_servable") y el aumento de números de versión, típicamente representan parámetros de modelo actualizados aprendido de datos de entrenamiento frescas.

Un cargador debe comenzar en un estado sin carga, lo que significa que no hay trabajo se ha hecho para prepararse para realizar las operaciones. Una instancia típica que aún no se ha cargado contiene simplemente un puntero a una ubicación desde la cual se pueden cargar sus datos (por ejemplo, una ruta del sistema de archivos o una ubicación de red). La construcción y destrucción de instancias debería ser bastante barata. Operaciones de inicialización caros deben hacerse en Load () .

Las subclases pueden almacenar opcionalmente un puntero a la fuente que lo originó, para acceder estado compartido entre varios objetos que se pueden publicar en una corriente servible dado.

Las implementaciones deben asegurarse de que los métodos que exponen sean seguros para subprocesos, o documentar y / o coordinar cuidadosamente sus propiedades de seguridad para subprocesos con sus clientes para garantizar la corrección. Servables no tienen que preocuparse por la ejecución simultánea de la carga () / Unload () como la persona que llama se asegurará de que eso no ocurra.

Herencia

Las subclases dirigir conocidos: tensorflow :: :: sirven ResourceUnsafeLoader

Constructores y Destructores

~Loader ()
El destructor nunca será llamado en un cargador de cuya servable está cargado actualmente, es decir,

Funciones publicas

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
Calcula los recursos que utilizará un servidor.
Load ()
virtual Status
Obtiene cualquier dato que necesita ser cargado antes de utilizar el servable devuelto por servable () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
Similar al método anterior, pero toma de metadatos como un parámetro, que puede ser utilizado por la aplicación loader apropiadamente.
Unload ()=0
virtual void
Libera los recursos asignados durante Load () (excepto quizás para los recursos compartidos a través de servables que aún son necesarios para otros activos).
servable ()=0
virtual AnyPtr
Devuelve una interfaz opaca al objeto servible subyacente.

Estructuras

tensorflow :: servir :: Cargador :: Metadatos

Los metadatos consisten en ServableId.

Funciones publicas

EstimateResources

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

Calcula los recursos que utilizará un servidor.

IMPORTANTE: La implementación de este método debe obedecer los siguientes requisitos, que permiten al sistema de servicio razonar correctamente sobre qué servidores se pueden cargar de forma segura:

  1. La estimación debe representar un límite superior del valor real.
  2. Antes de la carga, la estimación puede incluir recursos que no están vinculados a ninguna instancia de dispositivo específica, por ejemplo, RAM en una de las dos GPU.
  3. Mientras está cargado, para cualquier dispositivo con múltiples instancias (por ejemplo, dos GPU), la estimación debe especificar la instancia a la que está vinculado cada recurso.
  4. La estimación debe ser monótonamente no creciente, es decir, no puede aumentar con el tiempo. Razones para que disminuya potencialmente con el tiempo Devoluciones
    una estimación de los recursos que consumirá el servidor una vez cargado. Si el servidor ya se ha cargado, devuelve una estimación del uso real de los recursos.

Carga

virtual Status Load()

Obtiene cualquier dato que necesita ser cargado antes de utilizar el servable devuelto por servable () .

Puede utilizar sin más recursos que la estimación informado por EstimateResources () .

Si la aplicación Load () , que no tiene que anular LoadWithMetadata () .

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

Similar al método anterior, pero toma de metadatos como un parámetro, que puede ser utilizado por la aplicación loader apropiadamente.

Si está reemplazando LoadWithMetadata () , porque se puede utilizar los metadatos de forma adecuada, puede omitir anulando Load () .

Descargar

virtual void Unload()=0

Libera los recursos asignados durante Load () (excepto quizás para los recursos compartidos a través de servables que aún son necesarios para otros activos).

El cargador no tiene que volver al estado "nuevo" (es decir, Load () no puede ser llamado después Unload () ).

servible

virtual AnyPtr servable()=0

Devuelve una interfaz opaca al objeto servible subyacente.

La persona que llama debe conocer el tipo exacto de interfaz para poder hacer un uso real de la misma. Por ejemplo:

CustomLoader aplicación:

class CustomLoader : public Loader {
 public:
  ...
  Status Load() override {
    servable_ = ...;
  }

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Sirviendo a petición del usuario:

ServableHandle<CustomServable> handle = ...
CustomServable* servable = handle.get();
servable->...

Si servable () se llama después de éxito Load () y antes de descarga () , devuelve un objeto no nulo válida, AnyPtr. Si llama después de una exitosa Load () llamada o después Unload () , devuelve AnyPtr nula.

~ Cargador

virtual  ~Loader()=default

El destructor nunca será llamado en un cargador de cuya servable está cargado actualmente, es decir,

entre (con éxito) a las llamadas de carga () y de descarga () .