flusso tensoriale:: servendo:: BasicManager

Questa è una classe astratta.

#include <basic_manager.h>

Aiuta a gestire il ciclo di vita dei servable, inclusi il caricamento, il servizio e lo scarico.

Riepilogo

Il gestore accetta servable sotto forma di Loader.

Iniziamo a gestire un servibile tramite uno dei metodi ManageServable*. Si può andare avanti per caricare il servibile dopo questo chiamando LoadServable () . Il caricamento renderà anche il pubblicabile disponibile per il servizio. Una volta che si decide di scaricarlo, è possibile chiamare UnloadServable () su di esso, che renderà disponibile per servire, quindi scaricare il servibile.

Servables vengono mantenuti fino StopManagingServable () viene chiamato. Ciò consente a un manager di livello superiore con più informazioni di decidere quando è sicuro dimenticare un servibile.

BasicManager tiene traccia delle risorse (ad esempio RAM) utilizzati da servables caricati, e permette solo di caricare nuovi servables che si adattano all'interno del pool globale delle risorse.

BasicManager può essere configurato per utilizzare un pool di thread per farlo di carico e di singole discariche. Questo rende il LoadServable () e UnloadServable () metodi programmare il carico / singole discariche anziché eseguirli sincrono. Se sono presenti più carichi/scaricamenti in sospeso rispetto ai thread nel pool di thread, vengono elaborati in ordine FIFO.

In presenza di caricatori che sovrastimano le esigenze di risorse dei loro servable e/o legano solo le risorse dei loro servable alle istanze del dispositivo, la concorrenza di caricamento/scaricamento può essere ridotta al di sotto della dimensione del pool di thread. Questo perché potrebbe essere necessario attendere il completamento del caricamento/scaricamento di un servibile per definire la disponibilità delle risorse per il caricamento di un altro utilizzabile.

RICHIEDE:

  1. Ordine di chiamate di metodo - ManageServable () (e varianti) -> LoadServable () -> UnloadServable () -> StopManagingServable () .
  2. Non pianificare carichi e scarichi simultanei dello stesso server.
  3. Non chiamare load o unload più volte sullo stesso servable.

Questa classe è thread-safe.

Esempio di utilizzo:

const ServableId id = {kServableName, 0};
std::unique_ptr<Loader> loader = ...;
...
BasicManager manager;
TF_CHECK_OK(manager.ManageServable(
  CreateServableData(id, std::move(loader))));
TF_CHECK_OK(manager.LoadServable(id));

...
TF_CHECK_OK(manager.GetServableHandle(
    ServableRequest::Latest(kServableName), &handle));
...

TF_CHECK_OK(manager.UnloadServable(id));
TF_CHECK_OK(manager.StopManagingServable(id));  

Eredità

Eredita da: tensorflow :: :: servire Responsabile

Costruttori e Distruttori

~BasicManager ()
Se configurato per utilizzare un pool di thread di caricamento/scaricamento, attende il completamento di tutti i caricamenti e scaricamenti pianificati, quindi elimina il set di thread.

tipi pubblici

DoneCallback usando
std::function< void(const Status &status)>
Richiamata chiamata alla fine di {Load,Unload}Servable().
PreLoadHook usando
std::function< void(const ServableId &)>

Classi di amici

test_util::BasicManagerTestAccess
friend class

Funzioni statiche pubbliche

Create ( Options options, std::unique_ptr< BasicManager > *manager)
Status

Funzioni pubbliche

CancelLoadServableRetry (const ServableId & id)
void
Annulla Retrying il carico servibile durante LoadServable () .
GetAdditionalServableState (const ServableId & id)
T *
GetAvailableUntypedServableHandles () const override
virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > >
GetManagedServableNames () const
std::vector< string >
GetManagedServableStateSnapshot (const ServableId & id)
optional< ServableStateSnapshot< T > >
GetManagedServableStateSnapshots (const string & servable_name) const
std::vector< ServableStateSnapshot< T > >
GetUntypedServableHandle (const ServableRequest & request, std::unique_ptr< UntypedServableHandle > *untyped_handle) override
virtual Status
ListAvailableServableIds () const override
virtual std::vector< ServableId >
Ottiene un elenco di tutti gli ID utilizzabili disponibili, ad es
LoadServable (const ServableId & id, DoneCallback done_callback)
void
Carica il pubblicabile con questo ID e aggiorna anche la mappa di servizio.
ManageServable (ServableData< std::unique_ptr< Loader >> servable)
Status
Inizia a gestire il servibile.
ManageServableWithAdditionalState (ServableData< std::unique_ptr< Loader >> servable, std::unique_ptr< T > additional_state)
Status
Simile al metodo precedente, ma i chiamanti, di solito altri gestori costruiti su questo, possono associare uno stato aggiuntivo al servibile.
StopManagingServable (const ServableId & id)
Status
Dice al manager di interrompere la gestione di questo servibile.
UnloadServable (const ServableId & id, DoneCallback done_callback)
void
Scarica il pubblicabile con questo ID e aggiorna anche la mappa di servizio.

Strutture

tensorflow :: :: servire BasicManager :: Opzioni

Opzioni di configurazione e gli oggetti inseribili che verranno utilizzati dal BasicManager .

tipi pubblici

FattoRichiamata

std::function< void(const Status &status)> DoneCallback

Richiamata chiamata alla fine di {Load,Unload}Servable().

Passiamo lo stato dell'operazione al callback.

PreCaricamento

std::function< void(const ServableId &)> PreLoadHook

Classi di amici

test_util::BasicManagerTestAccess

friend class test_util::BasicManagerTestAccess

Funzioni statiche pubbliche

Creare

Status Create(
  Options options,
  std::unique_ptr< BasicManager > *manager
)

Funzioni pubbliche

AnnullaCaricaServibileRiprova

void CancelLoadServableRetry(
  const ServableId & id
)

Annulla Retrying il carico servibile durante LoadServable () .

Non fa nulla se il servibile non è gestito.

Se i tentativi vengono annullati, il servibile passa in uno stato dipendente dall'ultimo Load() chiamato su di esso. Se l'ultimo Load() ha avuto successo, sarà nello stato kReady, altrimenti in kError.

Ottieni stato di servizio aggiuntivo

T * GetAdditionalServableState(
  const ServableId & id
)

RICHIEDE: questo gestore dovrebbe aver già gestito questo server, altrimenti restituiamo nullptr.

Particolari
ritorna
lo stato aggiuntivo per il servibile. Restituisce nullptr se non sono presenti ulteriori impostazioni dello stato o se è presente una mancata corrispondenza di tipo tra ciò che è stato impostato e ciò che viene richiesto.

GetAvailableUntypedservableHandles

virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > > GetAvailableUntypedServableHandles() const override

GetManagedServableNames

std::vector< string > GetManagedServableNames() const 

Particolari
ritorna
i nomi di tutti i servable gestiti da questo manager. I nomi saranno privi di duplicati e non in un ordine particolare.

GetManagedServableStateSnapshot

optional< ServableStateSnapshot< T > > GetManagedServableStateSnapshot(
  const ServableId & id
)

RICHIEDE: questo gestore avrebbe dovuto già gestire questo servibile, altrimenti restituiamo nullopt.

Particolari
ritorna
lo snapshot dello stato di un particolare servable-id gestito da questo gestore, se disponibile.

OttieniIstantanee di StatoServibileGestito

std::vector< ServableStateSnapshot< T > > GetManagedServableStateSnapshots(
  const string & servable_name
) const 

T è il tipo di stato aggiuntivo, se presente.

Particolari
ritorna
gli snapshot di stato di tutti i servable di un particolare flusso, gestiti da questo gestore.

GetUntypedservableHandle

virtual Status GetUntypedServableHandle(
  const ServableRequest & request,
  std::unique_ptr< UntypedServableHandle > *untyped_handle
) override

ListAvailableServableIds

virtual std::vector< ServableId > ListAvailableServableIds() const override

Ottiene un elenco di tutti gli ID utilizzabili disponibili, ad es

ognuno di questi può essere recuperato utilizzando GetServableHandle.

Loadservable

void LoadServable(
  const ServableId & id,
  DoneCallback done_callback
)

Carica il pubblicabile con questo ID e aggiorna anche la mappa di servizio.

Chiamate done_callback con ok se e solo se il servibile è stato caricato correttamente, altrimenti restituisce uno stato di errore.

Se si utilizza un pool di thread, questo metodo esegue la transizione del cablaggio servibile allo stato kLoading, pianifica il carico e restituisce, altrimenti completa il carico prima di tornare.

RICHIEDE: Questo manager dovrebbe avere gestisce questo servibile già, per essere caricato, altrimenti chiamiamo done_callback con uno stato di errore. Non chiamarlo più volte sullo stesso servibile. Solo uno di questi avrà esito positivo e il resto avrà esito negativo con uno stato di errore.

Gestisciservibile

Status ManageServable(
  ServableData< std::unique_ptr< Loader >> servable
)

Inizia a gestire il servibile.

Restituisce un errore se viene fornito un server che è già gestito.

Se servibile è in stato di errore, questo metodo non restituisce un errore. Il manager, invece, accetta il servibile, lo mette nello stato kError (con una notifica inviata al bus degli eventi), e poi smette immediatamente di gestirlo. Questo comportamento facilita la gestione uniforme degli errori che si verificano nelle origini (ad es. percorso file non valido per i dati utilizzabili) e di quelli che si verificano nel gestore (ad es. risorse insufficienti per caricare i dati utilizzabili).

GestisciServableWithAdditionalState

Status ManageServableWithAdditionalState(
  ServableData< std::unique_ptr< Loader >> servable,
  std::unique_ptr< T > additional_state
)

Simile al metodo precedente, ma i chiamanti, di solito altri gestori costruiti su questo, possono associare uno stato aggiuntivo al servibile.

Lo stato aggiuntivo può essere ACL o metadati a vita per quel server. La proprietà dello Stato viene trasferita a questa classe.

Interrompi GestionePubblicabile

Status StopManagingServable(
  const ServableId & id
)

Dice al manager di interrompere la gestione di questo servibile.

Richiede che il server sia attualmente gestito e che il suo stato sia {kNew, kError, kDisabled}.

ScaricaPubblicabile

void UnloadServable(
  const ServableId & id,
  DoneCallback done_callback
)

Scarica il pubblicabile con questo ID e aggiorna anche la mappa di servizio.

Chiamate done_callback con ok se e solo se il servibile è stato scaricato con successo, altrimenti restituisce uno stato di errore.

Se si utilizza un pool di thread, questo metodo esegue la transizione del cablaggio servibile allo stato kQuiescing, pianifica lo scaricamento e restituisce, altrimenti completa lo scaricamento prima di tornare.

RICHIEDE: Questo manager dovrebbe avere caricato e reso questo servibile a disposizione, per essere scaricato, chiamate altro done_callback con uno stato di errore. Non chiamarlo più volte sullo stesso servibile. Solo uno di questi avrà esito positivo e il resto avrà esito negativo con uno stato di errore.

~BasicManager

 ~BasicManager() override

Se configurato per utilizzare un pool di thread di caricamento/scaricamento, attende il completamento di tutti i caricamenti e scaricamenti pianificati, quindi elimina il set di thread.