Dołącz do społeczności SIG TFX-Addons i pomóż ulepszyć TFX!

tensorflow :: porcja:: Ładowarka

To jest klasa abstrakcyjna.

#include <loader.h>

Standaryzowana abstrakcja dla obiektu, która zarządza cyklem życia produktu udostępnianego, w tym jego ładowaniem i wyładowywaniem.

streszczenie

Elementy obsługowe to dowolne obiekty, które obsługują algorytmy lub dane, które często, choć niekoniecznie, używają modelu uczonego maszynowo.

Moduł ładujący dla obsługiwanego obiektu reprezentuje jedną instancję strumienia obsługiwanych wersji, z których wszystkie mają wspólną nazwę (np. „My_servable”) i rosną numery wersji, zazwyczaj reprezentując zaktualizowane parametry modelu, które zostały wyuczone na podstawie świeżych danych szkoleniowych.

Program ładujący powinien rozpocząć się w stanie nieobciążonym, co oznacza, że ​​nie wykonano żadnej pracy w celu przygotowania 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. Kosztowne operacje inicjalizacyjne powinny być wykonywane w Load () .

Podklasy mogą opcjonalnie przechowywać wskaźnik do źródła, które je utworzyło, w celu uzyskania dostępu do stanu współdzielonego przez wiele obsługiwanych obiektów w danym obsługiwanym strumieniu.

Implementacje muszą zapewnić, że metody, które ujawniają, są bezpieczne dla wątków, lub starannie dokumentować i / lub koordynować ich właściwości bezpieczeństwa wątków z klientami, aby zapewnić poprawność. Elementy obsługowe nie muszą martwić się o jednoczesne wykonywanie Load () / Unload (), ponieważ wywołujący upewni się, że tak się nie stanie.

Dziedzictwo

Znane bezpośrednio podklasy: tensorflow :: Serving :: ResourceUnsafeLoader

Konstruktorzy i niszczyciele

~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, które będą używane przez usługę.
Load ()
virtual Status
Pobiera wszystkie dane, które muszą zostać załadowane przed użyciem elementu obsługującego zwróconego przez servable () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
Podobna do powyższej metody, ale przyjmuje Metadata jako parametr, który może być odpowiednio używany przez implementację modułu ładującego.
Unload ()=0
virtual void
Zwalnia wszelkie zasoby przydzielone podczas Load () (z wyjątkiem być może zasobów współdzielonych między serwable, które są nadal potrzebne dla innych aktywnych).
servable ()=0
virtual AnyPtr
Zwraca nieprzezroczysty interfejs do bazowego obiektu obsługiwanego.

Struktury

tensorflow :: Serving :: Loader :: Metadata

Metadane składają się z ServableId.

Funkcje publiczne

EstimateResources

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

Szacuje zasoby, które będą używane przez usługę.

WAŻNE: implementacja tej metody musi być zgodna z następującymi wymaganiami, które umożliwiają systemowi obsługującemu prawidłowe rozumowanie, które usługi mogą być bezpiecznie ładowane:

  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. Podczas ładowania dla dowolnych urządzeń z wieloma instancjami (np. Dwa GPU) oszacowanie musi określać instancję, z którą powiązany jest każdy zasób.
  4. Szacunek musi być monotonicznie i nie wzrastać, tj. Nie może wzrastać w czasie. Powody, dla których może się to z czasem zmniejszyć Zwroty
    oszacowanie zasobów, które będą zużywać obsługiwane po załadowaniu. Jeśli obsługiwany plik został już załadowany, zwraca oszacowanie rzeczywistego wykorzystania zasobów.

Załaduj

virtual Status Load()

Pobiera wszystkie dane, które muszą zostać załadowane przed użyciem elementu obsługującego zwróconego przez servable () .

Może wykorzystywać nie więcej zasobów niż szacunki podane przez EstimateResources () .

W przypadku implementacji Load () nie musisz zastępować LoadWithMetadata () .

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

Podobna do powyższej metody, ale przyjmuje Metadata jako parametr, który może być odpowiednio używany przez implementację modułu ładującego.

Jeśli zastępujesz LoadWithMetadata () , ponieważ możesz odpowiednio używać metadanych, możesz pominąć zastępowanie Load () .

Rozładować

virtual void Unload()=0

Zwalnia wszelkie zasoby przydzielone podczas Load () (z wyjątkiem być może zasobów współdzielonych między serwable, które są nadal potrzebne dla innych aktywnych).

Moduł ładujący nie musi wracać do „nowego” stanu (tj. Load () nie może być wywołany po Unload () ).

serwowalny

virtual AnyPtr servable()=0

Zwraca nieprzezroczysty interfejs do bazowego obiektu obsługiwanego.

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

Implementacja CustomLoader:

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

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Żądanie obsługującego użytkownika:

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

Jeśli servable () jest wywoływane po pomyślnym Load () i przed Unload () , zwraca prawidłowy, niezerowy obiekt AnyPtr. Jeśli zostanie wywołana przed pomyślnym wywołaniem Load () lub po Unload () , zwraca wartość null AnyPtr.

~ Loader

virtual  ~Loader()=default

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

między (udanymi) wywołaniami Load () i Unload () .