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:

  1. Kolejność wywołań metod - ManageServable () (i warianty) -> LoadServable () -> UnloadServable () -> StopManagingServable () .
  2. Nie planuj równoczesnego wczytywania i wyładowywania tego samego serwowalnego.
  3. 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żąc

Konstruktory 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.