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 :: ResourceUnsafeLoaderKonstruktory 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ć:
- Szacunek musi stanowić górną granicę rzeczywistej wartości.
- 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.
- 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.
- 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.