flusso tensoriale:: servendo:: Caricatore

Questa è una classe astratta.

#include <loader.h>

Un'astrazione standardizzata per un oggetto che gestisce il ciclo di vita di un servibile, inclusi il caricamento e lo scaricamento.

Riepilogo

I servibili sono oggetti arbitrari che servono algoritmi o dati che spesso, anche se non necessariamente, utilizzano un modello appreso dalla macchina.

Un caricatore per un oggetto servibile rappresenta un'istanza di un flusso di versioni pubblicabili, tutti condividono un nome comune (ad esempio "my_servable") e un numero crescente di versione, in genere rappresentano i parametri del modello aggiornati imparato dai dati di training freschi.

Un caricatore dovrebbe iniziare in uno stato senza carico, il che significa che nessun lavoro è stato fatto per prepararsi per eseguire le operazioni. Un'istanza tipica che non è stata ancora caricata contiene semplicemente un puntatore a una posizione da cui possono essere caricati i suoi dati (ad es. un percorso del file system o un percorso di rete). La costruzione e la distruzione delle istanze dovrebbero essere abbastanza economiche. Operazioni di inizializzazione costoso dovrebbe essere fatto in Load () .

Le sottoclassi possono facoltativamente memorizzare un puntatore alla sorgente che ha avuto origine esso, per l'accesso stato condiviso tra più oggetti pubblicabili in un determinato flusso servibile.

Le implementazioni devono garantire che i metodi che espongono siano thread-safe o documentare attentamente e/o coordinare le loro proprietà di thread-safe con i loro client per garantire la correttezza. Servables non hanno bisogno di preoccuparsi di esecuzione concorrente di Load () / scarico () come il chiamante farà in modo che ciò non accada.

Eredità

Dirigere sottoclassi noti: tensorflow :: :: servono ResourceUnsafeLoader

Costruttori e Distruttori

~Loader ()
Il distruttore verrà mai chiamato su un Loader cui servibile è attualmente caricato, cioè

Funzioni pubbliche

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
Stima le risorse che utilizzerà un serverable.
Load ()
virtual Status
Recupera i dati che deve essere caricato prima di utilizzare il servibile restituito da servibile () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
Simile al metodo di cui sopra, ma prende metadati come param, che può essere utilizzato dall'implementazione loader appropriato.
Unload ()=0
virtual void
Libera tutte le risorse durante Load () (eccetto forse per le risorse condivise di tutti servables che sono ancora necessari per altri quelli attivi).
servable ()=0
virtual AnyPtr
Restituisce un'interfaccia opaca all'oggetto pubblicabile sottostante.

Strutture

tensorflow :: :: servire Loader :: metadati

I metadati sono costituiti da ServableId.

Funzioni pubbliche

StimaRisorse

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

Stima le risorse che utilizzerà un serverable.

IMPORTANTE: l'implementazione di questo metodo deve rispettare i seguenti requisiti, che consentono al sistema di pubblicazione di ragionare correttamente su quali servable possono essere caricati in sicurezza:

  1. La stima deve rappresentare un limite superiore del valore effettivo.
  2. Prima del caricamento, la stima può includere risorse non legate a nessuna istanza specifica del dispositivo, ad esempio la RAM su una delle due GPU.
  3. Durante il caricamento, per eventuali dispositivi con più istanze (es. due GPU), la stima deve specificare l'istanza a cui è associata ciascuna risorsa.
  4. La stima deve essere monotonamente non crescente, cioè non può aumentare nel tempo. Motivi per farlo diminuire potenzialmente nel tempo ritorna
    una stima delle risorse che il servibile consumerà una volta caricato. Se il file server è già stato caricato, restituisce una stima dell'utilizzo effettivo delle risorse.

Caricare

virtual Status Load()

Recupera i dati che deve essere caricato prima di utilizzare il servibile restituito da servibile () .

Può utilizzare senza più risorse rispetto alla stima riportata da EstimateResources () .

Se attuazione Load () , non è necessario eseguire l'override LoadWithMetadata () .

Carica con metadati

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

Simile al metodo di cui sopra, ma prende metadati come param, che può essere utilizzato dall'implementazione loader appropriato.

Se stai sovrascrivendo LoadWithMetadata () , perché è possibile utilizzare i metadati in modo appropriato, è possibile ignorare l'override Load () .

Scaricare

virtual void Unload()=0

Libera tutte le risorse durante Load () (eccetto forse per le risorse condivise di tutti servables che sono ancora necessari per altri quelli attivi).

Il caricatore non deve ritornare allo stato "nuovo" (cioè Load () non può essere chiamato dopo di scaricamento () ).

servibile

virtual AnyPtr servable()=0

Restituisce un'interfaccia opaca all'oggetto pubblicabile sottostante.

Il chiamante dovrebbe conoscere il tipo preciso dell'interfaccia per poterla utilizzare effettivamente. Per esempio:

CustomLoader implementazione:

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

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Servire su richiesta dell'utente:

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

Se servibile () viene chiamato dopo successo Load () e prima di scaricamento () , restituisce una, non nullo oggetto AnyPtr valido. Se chiamato prima di un successo Load () chiamata o dopo Unload () , restituisce AnyPtr nullo.

~Caricatore

virtual  ~Loader()=default

Il distruttore verrà mai chiamato su un Loader cui servibile è attualmente caricato, cioè

tra chiamate (riusciti) a load () e scaricamento () .