Treten Sie der SIG TFX-Addons-Community bei und helfen Sie mit, TFX noch besser zu machen! SIG TFX-Addons beitreten
Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Tensorflow :: Portion:: Lader

Dies ist eine abstrakte Klasse.

#include <loader.h>

Eine standardisierte Abstraktion für ein Objekt, die den Lebenszyklus eines Servables verwaltet, einschließlich des Ladens und Entladens.

Zusammenfassung

Servables sind beliebige Objekte, die Algorithmen oder Daten bereitstellen, die häufig, wenn auch nicht unbedingt, ein maschinell erlerntes Modell verwenden.

Ein Loader für ein servable Objekt stellt eine Instanz eines Streams servable Versionen dar, die alle einen gemeinsamen Namen (z. B. "my_servable") und zunehmende Versionsnummern haben und normalerweise aktualisierte Modellparameter darstellen, die aus neuen Trainingsdaten gelernt wurden.

Ein Loader sollte im entladenen Zustand gestartet werden. Dies bedeutet, dass keine Arbeiten zur Vorbereitung der Ausführung von Vorgängen durchgeführt wurden. Eine typische Instanz, die noch nicht geladen wurde, enthält lediglich einen Zeiger auf einen Speicherort, von dem ihre Daten geladen werden können (z. B. einen Dateisystempfad oder einen Netzwerkspeicherort). Der Bau und die Zerstörung von Instanzen sollten ziemlich billig sein. Teure Initialisierungsvorgänge sollten in Load () durchgeführt werden .

Unterklassen können optional einen Zeiger auf die Quelle speichern, von der er stammt, um auf den Status zuzugreifen, der von mehreren servierbaren Objekten in einem bestimmten servable Stream gemeinsam genutzt wird.

Implementierungen müssen sicherstellen, dass die von ihnen bereitgestellten Methoden threadsicher sind, oder ihre Thread-Sicherheitseigenschaften sorgfältig dokumentieren und / oder mit ihren Kunden koordinieren, um die Richtigkeit sicherzustellen. Servables müssen sich nicht um die gleichzeitige Ausführung von Load () / Unload () kümmern, da der Aufrufer sicherstellt, dass dies nicht geschieht.

Erbe

Direkt bekannte Unterklassen: tensorflow :: Serving :: ResourceUnsafeLoader

Konstruktoren und Destruktoren

~Loader ()
Der Destruktor wird niemals auf einem Loader aufgerufen, dessen Servable gerade geladen ist, d. H.

Öffentliche Funktionen

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
Schätzt die Ressourcen, die ein Servable verwenden wird.
Load ()
virtual Status
Ruft alle Daten ab, die geladen werden müssen, bevor das von servable () zurückgegebene servable verwendet wird .
LoadWithMetadata (const Metadata & metadata)
virtual Status
Ähnlich wie bei der obigen Methode, verwendet jedoch Metadaten als Parameter, die von der Loader-Implementierung entsprechend verwendet werden können.
Unload ()=0
virtual void
Gibt alle Ressourcen frei, die während Load () zugewiesen wurden (außer möglicherweise Ressourcen, die von mehreren Servables gemeinsam genutzt werden und für andere aktive Ressourcen noch benötigt werden).
servable ()=0
virtual AnyPtr
Gibt eine undurchsichtige Schnittstelle zum zugrunde liegenden servierbaren Objekt zurück.

Strukturen

Tensorflow :: Serving :: Loader :: Metadaten

Die Metadaten bestehen aus der ServableId.

Öffentliche Funktionen

EstimateResources

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

Schätzt die Ressourcen, die ein Servable verwenden wird.

WICHTIG: Die Implementierung dieser Methode muss die folgenden Anforderungen erfüllen, damit das Serving-System richtig darüber nachdenken kann, welche Servables sicher geladen werden können:

  1. Die Schätzung muss eine Obergrenze für den tatsächlichen Wert darstellen.
  2. Vor dem Laden kann die Schätzung Ressourcen enthalten, die nicht an eine bestimmte Geräteinstanz gebunden sind, z. B. RAM auf einer der beiden GPUs.
  3. Während des Ladevorgangs muss für alle Geräte mit mehreren Instanzen (z. B. zwei GPUs) in der Schätzung die Instanz angegeben werden, an die jede Ressource gebunden ist.
  4. Die Schätzung muss monoton nicht ansteigen, dh sie kann sich im Laufe der Zeit nicht erhöhen. Gründe dafür, dass es im Laufe der Zeit möglicherweise abnimmt Kehrt zurück
    eine Schätzung der Ressourcen, die der Servable nach dem Laden verbraucht. Wenn das Servable bereits geladen wurde, wird eine Schätzung des tatsächlichen Ressourcenverbrauchs zurückgegeben.

Belastung

virtual Status Load()

Ruft alle Daten ab, die geladen werden müssen, bevor das von servable () zurückgegebene servable verwendet wird .

Darf nicht mehr Ressourcen verbrauchen als die von EstimateResources () gemeldete Schätzung .

Wenn Sie Load () implementieren, müssen Sie LoadWithMetadata () nicht überschreiben.

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

Ähnlich wie bei der obigen Methode, verwendet jedoch Metadaten als Parameter, die von der Loader-Implementierung entsprechend verwendet werden können.

Wenn Sie LoadWithMetadata () überschreiben, können Sie das Überschreiben von Load () überspringen, da Sie die Metadaten entsprechend verwenden können.

Entladen

virtual void Unload()=0

Gibt alle Ressourcen frei, die während Load () zugewiesen wurden (außer möglicherweise Ressourcen, die von mehreren Servables gemeinsam genutzt werden und für andere aktive Ressourcen noch benötigt werden).

Der Loader muss nicht in den "neuen" Zustand zurückkehren (dh Load () kann nach Unload () nicht aufgerufen werden).

wartbar

virtual AnyPtr servable()=0

Gibt eine undurchsichtige Schnittstelle zum zugrunde liegenden servierbaren Objekt zurück.

Der Anrufer sollte den genauen Typ der Schnittstelle kennen, um sie tatsächlich nutzen zu können. Beispielsweise:

CustomLoader-Implementierung:

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

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Benutzeranforderung bedienen:

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

Wenn servable () nach erfolgreichem Load () und vor Unload () aufgerufen wird , wird ein gültiges AnyPtr-Objekt ungleich Null zurückgegeben. Wenn es vor einem erfolgreichen Load () -Aufruf oder nach Unload () aufgerufen wird , wird null AnyPtr zurückgegeben.

~ Lader

virtual  ~Loader()=default

Der Destruktor wird niemals auf einem Loader aufgerufen, dessen Servable gerade geladen ist, d. H.

zwischen (erfolgreichen) Aufrufen von Load () und Unload () .