przepływ tensorowy:: porcja:: Menedżer podstawowy
To jest klasa abstrakcyjna.#include <basic_manager.h>
Pomaga zarządzać cyklem życia obiektów do wyświetlania, w tym ich ładowaniem, udostępnianiem i rozładowywaniem.
Streszczenie
Menedżer akceptuje serwisy w postaci Loaderów.
Zarządzanie serwerem zaczynamy za pomocą jednej z metod ManageServable*. Można pójść na załadowanie servable Po tym dzwoniąc LoadServable () . Wczytywanie sprawi również, że serwable będzie dostępny do wyświetlenia. Jeśli zdecydują się go rozładować, można zadzwonić UnloadServable () na nim, które sprawiają, że jest niedostępna, aby służyć, a następnie rozładować servable.
Servables są zachowywane aż StopManagingServable () jest wywoływana. Dzięki temu menedżer wyższego poziomu dysponujący większą ilością informacji może zdecydować, kiedy można bezpiecznie zapomnieć o serwowalnym.
BasicManager śledzi zasobów (np RAM) wykorzystywanych przez załadowanych servables, a jedynie umożliwia ładowanie nowych servables które mieszczą się w ogólnej puli zasobów.
BasicManager może być skonfigurowany do korzystania z nitki basen zrobić to za obciążenie i rozładowuje. To sprawia, że LoadServable () i UnloadServable () metody zaplanować obciążenia / odciążenia zamiast wykonywania ich synchronicznie. Jeśli w puli wątków jest więcej oczekujących załadowań/rozładowań niż wątków, są one przetwarzane w kolejności FIFO.
W obecności programów ładujących, które przeszacowują zapotrzebowanie na zasoby swoich serwerów i/lub wiążą je tylko z instancjami urządzeń, współbieżność ładowania/rozładowywania może zostać zmniejszona poniżej rozmiaru puli wątków. Dzieje się tak dlatego, że być może będziemy musieli poczekać na zakończenie ładowania/rozładowywania jednego serwowalnego, aby określić dostępność zasobów do załadowania innego serwowalnego.
WYMAGA:
- Kolejność wywołań metod - ManageServable () (i warianty) -> LoadServable () -> UnloadServable () -> StopManagingServable () .
- Nie planuj równoczesnego wczytywania i wyładowywania tego samego serwowalnego.
- Nie wywołuj wielokrotnie ładowania lub rozładowywania na tym samym serwerze.
Ta klasa jest bezpieczna wątkowo.
Przykładowe zastosowania:
const ServableId id = {kServableName, 0}; std::unique_ptr<Loader> loader = ...; ... BasicManager manager; TF_CHECK_OK(manager.ManageServable( CreateServableData(id, std::move(loader)))); TF_CHECK_OK(manager.LoadServable(id)); ... TF_CHECK_OK(manager.GetServableHandle( ServableRequest::Latest(kServableName), &handle)); ... TF_CHECK_OK(manager.UnloadServable(id)); TF_CHECK_OK(manager.StopManagingServable(id));
Dziedzictwo
Dziedziczy z: tensorflow :: :: Menedżer służącKonstruktory i destruktory | |
---|---|
~BasicManager () Jeśli skonfigurowano korzystanie z puli wątków ładowania/rozładowywania, czeka, aż wszystkie zaplanowane ładowania i zwolnienia zostaną zakończone, a następnie niszczy zestaw wątków. |
Typy publiczne | |
---|---|
DoneCallback | za pomocąstd::function< void(const Status &status)> Callback wywoływany na końcu {Load,Unload}Servable(). |
PreLoadHook | za pomocąstd::function< void(const ServableId &)> |
Zajęcia z przyjaciółmi | |
---|---|
test_util::BasicManagerTestAccess | friend class |
Publiczne funkcje statyczne | |
---|---|
Create ( Options options, std::unique_ptr< BasicManager > *manager) | Status |
Funkcje publiczne | |
---|---|
CancelLoadServableRetry (const ServableId & id) | void Anuluje przystąpieniem do ponownej servable obciążenie podczas LoadServable () . |
GetAdditionalServableState (const ServableId & id) | T * |
GetAvailableUntypedServableHandles () const override | virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > > |
GetManagedServableNames () const | std::vector< string > |
GetManagedServableStateSnapshot (const ServableId & id) | optional< ServableStateSnapshot< T > > |
GetManagedServableStateSnapshots (const string & servable_name) const | std::vector< ServableStateSnapshot< T > > |
GetUntypedServableHandle (const ServableRequest & request, std::unique_ptr< UntypedServableHandle > *untyped_handle) override | virtual Status |
ListAvailableServableIds () const override | virtual std::vector< ServableId > Pobiera listę wszystkich dostępnych identyfikatorów serwowalnych, tj. |
LoadServable (const ServableId & id, DoneCallback done_callback) | void Wczytuje serwowalny z tym identyfikatorem i aktualizuje również mapę udostępniania. |
ManageServable (ServableData< std::unique_ptr< Loader >> servable) | Status Rozpoczyna zarządzanie serwowalnym. |
ManageServableWithAdditionalState (ServableData< std::unique_ptr< Loader >> servable, std::unique_ptr< T > additional_state) | Status Podobna do powyższej metody, ale wywołujący, zwykle inni menedżerowie zbudowani na tym, mogą powiązać dodatkowy stan z serwowalnym. |
StopManagingServable (const ServableId & id) | Status Informuje menedżera, aby przestał zarządzać tym elementem udostępnianym. |
UnloadServable (const ServableId & id, DoneCallback done_callback) | void Zwalnia serwowalny z tym identyfikatorem i aktualizuje również mapę udostępniania. |
Struktury | |
---|---|
tensorflow :: służąc :: BasicManager :: Opcje | Opcje konfiguracyjne i wtykowym obiekty, które będą wykorzystywane przez BasicManager . |
Typy publiczne
GotoweOddzwoń
std::function< void(const Status &status)> DoneCallback
Callback wywoływany na końcu {Load,Unload}Servable().
Do wywołania zwrotnego przekazujemy status operacji.
Hak ładowania wstępnego
std::function< void(const ServableId &)> PreLoadHook
Zajęcia z przyjaciółmi
test_util::BasicManagerTestAccess
friend class test_util::BasicManagerTestAccess
Publiczne funkcje statyczne
Tworzyć
Status Create( Options options, std::unique_ptr< BasicManager > *manager )
Funkcje publiczne
AnulujLoadServableRetry
void CancelLoadServableRetry( const ServableId & id )
Anuluje przystąpieniem do ponownej servable obciążenie podczas LoadServable () .
Nie robi nic, jeśli element udostępniany nie jest zarządzany.
Jeśli ponowna próba zostanie anulowana, serwable przechodzi w stan zależny od ostatniego wywołania funkcji Load(). Jeśli ostatnia metoda Load() powiodła się, będzie w stanie kReady, w przeciwnym razie w stanie kError.
Uzyskaj dodatkowy stan do udostępniania
T * GetAdditionalServableState( const ServableId & id )
WYMAGANIA: Ten menedżer powinien już zarządzać tym serwowalnym, w przeciwnym razie zwracamy nullptr.
Detale | |
---|---|
Zwroty | dodatkowy stan dla serwowalnego. Zwraca nullptr, jeśli nie ma dodatkowej konfiguracji stanu lub jeśli istnieje niezgodność typu między tym, co zostało ustawione, a tym, o co jest pytany. |
UzyskajAvailableNieopisaneUsługi do obsługi
virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > > GetAvailableUntypedServableHandles() const override
GetManagedServableNames
std::vector< string > GetManagedServableNames() const
Detale | |
---|---|
Zwroty | nazwy wszystkich serwisów zarządzanych przez tego menedżera. Nazwy będą wolne od duplikatów i nie będą ułożone w określonej kolejności. |
GetManagedServableStateSnapshot
optional< ServableStateSnapshot< T > > GetManagedServableStateSnapshot( const ServableId & id )
WYMAGANIA: Ten menedżer powinien już zarządzać tym elementem do wyświetlenia, w przeciwnym razie zwracamy wartość nullopt.
Detale | |
---|---|
Zwroty | migawka stanu konkretnego serwable-id zarządzanego przez tego menedżera, jeśli jest dostępna. |
GetManagedServableStateSnapshots
std::vector< ServableStateSnapshot< T > > GetManagedServableStateSnapshots( const string & servable_name ) const
T jest typem stanu dodatkowego, jeśli istnieje.
Detale | |
---|---|
Zwroty | migawki stanu wszystkich obiektów serwowalnych danego strumienia, zarządzane przez tego menedżera. |
GetUntypedServableHandle
virtual Status GetUntypedServableHandle( const ServableRequest & request, std::unique_ptr< UntypedServableHandle > *untyped_handle ) override
ListaAvailableServableIds
virtual std::vector< ServableId > ListAvailableServableIds() const override
Pobiera listę wszystkich dostępnych identyfikatorów serwowalnych, tj.
każdy z nich można pobrać za pomocą GetServableHandle.
Możliwość wczytywania
void LoadServable( const ServableId & id, DoneCallback done_callback )
Wczytuje serwowalny z tym identyfikatorem i aktualizuje również mapę udostępniania.
Zwraca done_callback z ok IFF servable został załadowany prawidłowo, w przeciwnym wypadku zwraca kod błędu.
W przypadku korzystania z puli wątków, ta metoda przenosi serwowalną wiązkę w stan kLoading, planuje ładowanie i zwraca, w przeciwnym razie kończy ładowanie przed powrotem.
Wymagania: Menadżer powinien zostały zarządzania tym servable już na to, aby być załadowany, inaczej nazywamy done_callback ze statusem błędu. Nie wywołuj tego wiele razy na tym samym serwerze. Tylko jeden z nich się powiedzie, a reszta zakończy się niepowodzeniem ze statusem błędu.
ZarządzajObsługiwany
Status ManageServable( ServableData< std::unique_ptr< Loader >> servable )
Rozpoczyna zarządzanie serwowalnym.
Zwraca błąd, jeśli podano serwable, który jest już zarządzany.
Jeśli servable jest w stanie błędu, metoda ta nie zwraca błąd. Zamiast tego menedżer akceptuje serwer, ustawia go w stan kError (z powiadomieniem wysłanym do magistrali zdarzeń), a następnie natychmiast przestaje nim zarządzać. Takie zachowanie ułatwia jednolitą obsługę błędów występujących w źródłach (np. nieprawidłowa ścieżka pliku do danych serwowalnych) oraz tych, które występują w menedżerze (np. niewystarczające zasoby do załadowania serwowalnego).
Zarządzaj udostępnianymi ze stanem dodatkowym
Status ManageServableWithAdditionalState( ServableData< std::unique_ptr< Loader >> servable, std::unique_ptr< T > additional_state )
Podobna do powyższej metody, ale wywołujący, zwykle inni menedżerowie zbudowani na tym, mogą powiązać dodatkowy stan z serwowalnym.
Dodatkowym stanem może być lista ACL lub metadane okresu istnienia dla tego serwera. Własność państwa przechodzi do tej klasy.
ZatrzymajZarządzanieObsługiwane
Status StopManagingServable( const ServableId & id )
Informuje menedżera, aby przestał zarządzać tym elementem udostępnianym.
Wymaga, aby serwable był aktualnie zarządzany, a jego stan to {kNew, kError, kDisabled}.
Możliwość wyładowania
void UnloadServable( const ServableId & id, DoneCallback done_callback )
Zwalnia serwowalny z tym identyfikatorem i aktualizuje również mapę udostępniania.
Zwraca done_callback z ok IFF servable został rozładowany pomyślnie, w przeciwnym wypadku zwraca kod błędu.
Jeśli używasz puli wątków, ta metoda przenosi serwowalną wiązkę do stanu kQuiescing, planuje wyładowanie i powroty, w przeciwnym razie kończy wyładowanie przed powrotem.
Wymagania: Menadżer powinien był załadowany i uczynił to servable dostępny, na to, aby zostać rozładowane, połączenia else done_callback ze statusem błędu. Nie wywołuj tego wiele razy na tym samym serwerze. Tylko jeden z nich się powiedzie, a reszta zakończy się niepowodzeniem ze statusem błędu.
~Menedżer podstawowy
~BasicManager() override
Jeśli skonfigurowano korzystanie z puli wątków ładowania/rozładowywania, czeka, aż wszystkie zaplanowane ładowania i zwolnienia zostaną zakończone, a następnie niszczy zestaw wątków.