Unisciti alla community di SIG TFX-Addons e aiutaci a rendere TFX ancora migliore! Iscriviti a SIG TFX-Addons

tensorflow :: servendo:: Caricatore

Questa è una classe astratta.

#include <loader.h>

Un'astrazione standardizzata per un oggetto che gestisce il ciclo di vita di un servable, incluso il caricamento e lo scaricamento di esso.

Sommario

I servable sono oggetti arbitrari che servono algoritmi o dati che spesso, anche se non necessariamente, utilizzano un modello di apprendimento automatico.

Un programma di caricamento per un oggetto servibile rappresenta un'istanza di un flusso di versioni servibili, che condividono tutte un nome comune (ad es. "My_servable") e numeri di versione crescenti, che tipicamente rappresentano i parametri del modello aggiornati appresi da nuovi dati di addestramento.

Un programma di caricamento dovrebbe essere avviato in uno stato scaricato, il che significa che non è stato svolto alcun lavoro per prepararsi a eseguire le operazioni. Un'istanza tipica che non è stata ancora caricata contiene semplicemente un puntatore a una posizione da cui è possibile caricare i suoi dati (ad esempio un percorso del file system o un percorso di rete). La costruzione e la distruzione delle istanze dovrebbero essere abbastanza economiche. Le costose operazioni di inizializzazione dovrebbero essere eseguite 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-safety con i loro clienti per garantire la correttezza. I servable non devono preoccuparsi dell'esecuzione simultanea di Load () / Unload () poiché il chiamante si assicurerà che ciò non avvenga.

Eredità

Sottoclassi note dirette: tensorflow :: serving :: ResourceUnsafeLoader

Costruttori e distruttori

~Loader ()
Il distruttore non verrà mai chiamato su un caricatore il cui servable è attualmente caricato, ad es

Funzioni pubbliche

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
Stima le risorse che verranno utilizzate da un servable.
Load ()
virtual Status
Recupera tutti i dati che devono essere caricati prima di utilizzare il servable restituito da servable () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
Simile al metodo precedente, ma accetta i metadati come parametro, che può essere utilizzato in modo appropriato dall'implementazione del caricatore.
Unload ()=0
virtual void
Libera tutte le risorse allocate durante Load () (tranne forse per le risorse condivise tra servable che sono ancora necessarie per altri attivi).
servable ()=0
virtual AnyPtr
Restituisce un'interfaccia opaca all'oggetto servibile sottostante.

Structs

tensorflow :: serving :: Loader :: Metadata

I metadati sono costituiti da ServableId.

Funzioni pubbliche

StimaRisorse

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

Stima le risorse che verranno utilizzate da un servable.

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

  1. La stima deve rappresentare un limite superiore al valore effettivo.
  2. Prima del caricamento, la stima può includere risorse che non sono vincolate a nessuna specifica istanza del dispositivo, ad esempio RAM su una delle due GPU.
  3. Durante il caricamento, per tutti i dispositivi con più istanze (ad esempio due GPU), la stima deve specificare l'istanza a cui è associata ciascuna risorsa.
  4. La stima deve essere monotonicamente non crescente, ovvero non può aumentare nel tempo. I motivi per averlo potenzialmente diminuiscono nel tempo ritorna
    una stima delle risorse che il servable consumerà una volta caricato. Se il servable è già stato caricato, restituisce una stima dell'utilizzo effettivo delle risorse.

Caricare

virtual Status Load()

Recupera tutti i dati che devono essere caricati prima di utilizzare il servable restituito da servable () .

Non può utilizzare più risorse rispetto alla stima riportata da ForecastResources () .

Se si implementa Load () , non è necessario sovrascrivere LoadWithMetadata () .

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

Simile al metodo precedente, ma accetta i metadati come parametro, che può essere utilizzato in modo appropriato dall'implementazione del caricatore.

Se stai sovrascrivendo LoadWithMetadata () , poiché puoi usare i metadati in modo appropriato, puoi saltare l'override di Load () .

Scaricare

virtual void Unload()=0

Libera tutte le risorse allocate durante Load () (tranne forse per le risorse condivise tra servable che sono ancora necessarie per altri attivi).

Il caricatore non ha bisogno di tornare allo stato "nuovo" (cioè non è possibile richiamare Load () dopo Unload () ).

servibile

virtual AnyPtr servable()=0

Restituisce un'interfaccia opaca all'oggetto servibile sottostante.

Il chiamante deve conoscere il tipo preciso di interfaccia per utilizzarla effettivamente. Per esempio:

Implementazione di CustomLoader:

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

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Richiesta utente in servizio:

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

Se servable () viene chiamato dopo Load () e prima di Unload () , restituisce un oggetto AnyPtr valido e non nullo. Se chiamato prima di una chiamata Load () riuscita o dopo Unload () , restituisce null AnyPtr.

~ Caricatore

virtual  ~Loader()=default

Il distruttore non verrà mai chiamato su un caricatore il cui servable è attualmente caricato, ad es

tra chiamate (riuscite) a Load () e Unload () .