przepływ tensorowy:: porcja:: Ładowarka

To jest klasa abstrakcyjna.

#include <loader.h>

Standaryzowana abstrakcja dla obiektu, która zarządza cyklem życia serwowalnego, w tym ładowaniem i rozładowywaniem go.

Streszczenie

Serwable to dowolne obiekty, które obsługują algorytmy lub dane, które często, choć niekoniecznie, wykorzystują model uczący się maszynowo.

Ładowarka dla servable obiektu reprezentuje jedno wystąpienie strumieniu servable wersjach, wszystkie dzielą wspólną nazwę (na przykład „my_servable”) i rosnące numery wersji, zazwyczaj reprezentujący aktualizowane parametry modelu wyuczone ze świeżych danych treningowych.

Ładowarka powinna rozpocząć się w stanie nieobciążonym, co oznacza, że żadna praca nie została wykonana, aby przygotować się do wykonywania operacji. Typowa instancja, która nie została jeszcze załadowana, zawiera jedynie wskaźnik do lokalizacji, z której można załadować jej dane (np. ścieżka systemu plików lub lokalizacja sieciowa). Budowa i niszczenie instancji powinno być dość tanie. Operacje drogie inicjalizacji należy zrobić w load () .

Podklasy mogą ewentualnie przechowywać wskaźnik do Źródła , że pochodzi on, stan dostępu współdzielonego w wielu servable obiektów w danym servable strumienia.

Implementacje muszą zapewnić, że metody, które uwidaczniają, są bezpieczne dla wątków lub dokładnie dokumentują i/lub koordynują ich właściwości bezpieczeństwa wątków z klientami, aby zapewnić poprawność. Servables nie trzeba się martwić o równoczesną realizację load () / Unload () jako rozmówca zapewnia, że nie dzieje.

Dziedzictwo

Znane kierować podklasy: tensorflow :: serwujące :: ResourceUnsafeLoader

Konstruktory i destruktory

~Loader ()
Destruktor nie zostanie wywołana na Loader , który jest aktualnie załadowany servable, czyli

Funkcje publiczne

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
Szacuje zasoby, z których będzie korzystał element udostępniany.
Load ()
virtual Status
Pobiera żadnych danych, które mają być uruchomione przed użyciem servable zwrócony przez servable () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
Podobnie jak w przypadku powyższego sposobu, ale bierze Metadane jako param, które mogą być wykorzystane w realizacji ładowarki odpowiednio.
Unload ()=0
virtual void
Zwalnia wszystkie zasoby przydzielone podczas obciążenia () (z wyjątkiem być może do zasobów udostępnionych w poprzek servables które są nadal potrzebne dla innych aktywnych z nich).
servable ()=0
virtual AnyPtr
Zwraca nieprzezroczysty interfejs do bazowego obiektu serwowalnego.

Struktury

tensorflow :: służąc :: Loader :: Metadane

Metadane składają się z ServableId.

Funkcje publiczne

Oszacuj zasoby

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

Szacuje zasoby, z których będzie korzystał element udostępniany.

WAŻNE: Implementacja tej metody musi być zgodna z następującymi wymaganiami, które umożliwią systemowi obsługującemu prawidłowe rozumowanie, które serwable można bezpiecznie załadować:

  1. Szacunek musi stanowić górną granicę rzeczywistej wartości.
  2. Przed załadowaniem oszacowanie może obejmować zasoby, które nie są powiązane z żadną konkretną instancją urządzenia, np. pamięć RAM na jednym z dwóch procesorów graficznych.
  3. Po załadowaniu w przypadku dowolnych urządzeń z wieloma instancjami (np. dwoma procesorami graficznymi) oszacowanie musi określać instancję, z którą powiązany jest każdy zasób.
  4. Oszacowanie musi być monotonicznie nierosnące, tj. nie może wzrastać w czasie. Powody, dla których potencjalnie może się zmniejszać z czasem Zwroty
    oszacowanie zasobów, które zużyje udostępniany po załadowaniu. Jeśli serwable został już załadowany, zwraca oszacowanie rzeczywistego wykorzystania zasobów.

Obciążenie

virtual Status Load()

Pobiera żadnych danych, które mają być uruchomione przed użyciem servable zwrócony przez servable () .

Mogą wykorzystywać nie więcej zasobów niż szacunek donosi EstimateResources () .

Jeśli wdrożenie load () , nie trzeba zastąpić LoadWithMetadata () .

Wczytaj z metadanymi

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

Podobnie jak w przypadku powyższego sposobu, ale bierze Metadane jako param, które mogą być wykorzystane w realizacji ładowarki odpowiednio.

Jeśli nadrzędne LoadWithMetadata () , ponieważ można użyć odpowiednio metadane, można pominąć nadrzędnymi load () .

Rozładować

virtual void Unload()=0

Zwalnia wszystkie zasoby przydzielone podczas obciążenia () (z wyjątkiem być może do zasobów udostępnionych w poprzek servables które są nadal potrzebne dla innych aktywnych z nich).

Ładowarka nie wymaga, aby powrócić do „nowego” państwa (tj load () nie można nazwać po rozładować () ).

serwowalny

virtual AnyPtr servable()=0

Zwraca nieprzezroczysty interfejs do bazowego obiektu serwowalnego.

Dzwoniący powinien znać dokładny typ interfejsu, aby móc z niego faktycznie korzystać. Na przykład:

CustomLoader realizacji:

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

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Obsługujących żądania użytkownika:

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

Jeśli servable () jest wywoływana po pomyślnym load () i przed rozładować () , zwraca poprawny, niż null AnyPtr obiekt. Jeśli wywołana przed udany load () rozmowy lub po rozładować () , to zwraca NULL AnyPtr.

~Ładowarka

virtual  ~Loader()=default

Destruktor nie zostanie wywołana na Loader , który jest aktualnie załadowany servable, czyli

pomiędzy (udane) Wezwanie do load () i Unload () .