тензорный поток :: сервировка :: BasicManager

Это абстрактный класс.

#include <basic_manager.h>

Помогает управлять жизненным циклом обслуживаемых объектов, включая их загрузку, обслуживание и разгрузку.

Резюме

Менеджер принимает серваблы в виде загрузчиков.

Мы начинаем управлять обслуживаемым объектом с помощью одного из методов ManageServable *. Вы можете перейти к загрузке servable после этого по телефону LoadServable () . Загрузка также сделает обслуживаемый доступным для обслуживания. После того, как вы решили выгрузить его, вы можете позвонить UnloadServable () на нем, что сделает его недоступным для обслуживания, а затем выгрузить servable.

Servables сохраняются до StopManagingServable () называется. Это позволяет более высокоуровневому менеджеру, располагающему дополнительной информацией, решать, когда можно забыть об обслуживаемом элементе.

BasicManager отслеживает ресурсы (например , ОЗУ) , используемых нагруженных servables, и только позволяет загрузить новый servables , которые вписываются в общем пуле ресурсов.

BasicManager может быть настроен на использование поточно-бассейн , чтобы сделать это груз и выгружает. Это делает LoadServable () и UnloadServable () методу планирование загрузки / выгрузки , а не выполнение их синхронно. Если ожидающих загрузки / выгрузок больше, чем потоков в пуле потоков, они обрабатываются в порядке FIFO.

При наличии загрузчиков, которые переоценивают потребности своих обслуживаемых ресурсов в ресурсах и / или только связывают ресурсы своих обслуживаемых объектов с экземплярами устройств, параллелизм загрузки / выгрузки может быть уменьшен до уровня ниже размера пула потоков. Это потому, что нам, возможно, придется дождаться завершения загрузки / выгрузки одного обслуживаемого объекта, чтобы определить доступность ресурса для загрузки другого обслуживаемого объекта.

ТРЕБУЕТ:

  1. Порядок вызовов метода - ManageServable () (и варианты) -> LoadServable () -> UnloadServable () -> StopManagingServable () .
  2. Не планируйте одновременную загрузку и выгрузку одного и того же обслуживаемого объекта.
  3. Не вызывайте load или unload несколько раз для одного и того же обслуживаемого объекта.

Этот класс потокобезопасен.

Пример использования:

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));  

Наследование

Наследуется от: tensorflow :: :: Менеджер обслуживания

Конструкторы и деструкторы

~BasicManager ()
Если настроен на использование пула потоков загрузки / выгрузки, ожидает завершения всех запланированных загрузок и выгрузок, а затем уничтожает набор потоков.

Публичные типы

DoneCallback с использованием
std::function< void(const Status &status)>
Обратный вызов вызывается в конце {Load, Unload} Servable ().
PreLoadHook с использованием
std::function< void(const ServableId &)>

Классы друзей

test_util::BasicManagerTestAccess
friend class

Публичные статические функции

Create ( Options options, std::unique_ptr< BasicManager > *manager)
Status

Публичные функции

CancelLoadServableRetry (const ServableId & id)
void
Отмена повторной попытки servable нагрузки при 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 >
Получает список всех доступных обслуживаемых идентификаторов, т.е.
LoadServable (const ServableId & id, DoneCallback done_callback)
void
Загружает обслуживаемый объект с этим идентификатором, а также обновляет карту обслуживания.
ManageServable (ServableData< std::unique_ptr< Loader >> servable)
Status
Начинает управлять обслуживаемым объектом.
ManageServableWithAdditionalState (ServableData< std::unique_ptr< Loader >> servable, std::unique_ptr< T > additional_state)
Status
Подобно вышеупомянутому методу, но вызывающие, обычно другие менеджеры, созданные поверх этого, могут связать дополнительное состояние с обслуживаемым.
StopManagingServable (const ServableId & id)
Status
Сообщает менеджеру прекратить управление этим обслуживаемым объектом.
UnloadServable (const ServableId & id, DoneCallback done_callback)
void
Выгружает обслуживаемый объект с этим идентификатором, а также обновляет карту обслуживания.

Структуры

tensorflow :: служит :: BasicManager :: Функции

Параметры конфигурации и вставные объекты , которые будут использоваться в BasicManager .

Публичные типы

Готово

std::function< void(const Status &status)> DoneCallback

Обратный вызов вызывается в конце {Load, Unload} Servable ().

Мы передаем статус операции обратному вызову.

PreLoadHook

std::function< void(const ServableId &)> PreLoadHook

Классы друзей

test_util :: BasicManagerTestAccess

friend class test_util::BasicManagerTestAccess

Публичные статические функции

Создавать

Status Create(
  Options options,
  std::unique_ptr< BasicManager > *manager
)

Публичные функции

ОтменаLoadServableRetry

void CancelLoadServableRetry(
  const ServableId & id
)

Отмена повторной попытки servable нагрузки при LoadServable () .

Ничего не делает, если обслуживаемый не управляется.

Если повторные попытки отменены, обслуживаемый объект переходит в состояние, зависящее от последнего вызванного для него Load (). Если последний Load () был успешным, он будет в состоянии kReady, иначе в kError.

GetAdditionalServableState

T * GetAdditionalServableState(
  const ServableId & id
)

ТРЕБУЕТСЯ: этот менеджер уже должен был управлять этим обслуживаемым объектом, иначе мы вернем nullptr.

Подробности
Возврат
дополнительное состояние для обслуживаемого. Возвращает nullptr, если нет дополнительной настройки состояния или если есть несоответствие типа между тем, что было настроено, и тем, что запрашивается.

GetAvailableUntypedServableHandles

virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > > GetAvailableUntypedServableHandles() const override

GetManagedServableNames

std::vector< string > GetManagedServableNames() const 

Подробности
Возврат
имена всех сервейлов, управляемых этим менеджером. Имена будут без дубликатов и в произвольном порядке.

GetManagedServableStateSnapshot

optional< ServableStateSnapshot< T > > GetManagedServableStateSnapshot(
  const ServableId & id
)

ТРЕБУЕТСЯ: этот менеджер уже должен был управлять этим обслуживаемым объектом, иначе мы вернем nullopt.

Подробности
Возврат
снимок состояния определенного идентификатора обслуживаемого объекта, управляемого этим менеджером, если он доступен.

GetManagedServableStateSnapshots

std::vector< ServableStateSnapshot< T > > GetManagedServableStateSnapshots(
  const string & servable_name
) const 

T - тип дополнительного состояния, если таковой имеется.

Подробности
Возврат
снимки состояния всех обслуживаемых объектов определенного потока, управляемого этим менеджером.

GetUntypedServableHandle

virtual Status GetUntypedServableHandle(
  const ServableRequest & request,
  std::unique_ptr< UntypedServableHandle > *untyped_handle
) override

ListAvailableServableIds

virtual std::vector< ServableId > ListAvailableServableIds() const override

Получает список всех доступных обслуживаемых идентификаторов, т.е.

каждый из них можно получить с помощью GetServableHandle.

LoadServable

void LoadServable(
  const ServableId & id,
  DoneCallback done_callback
)

Загружает обслуживаемый объект с этим идентификатором, а также обновляет карту обслуживания.

Вызовы done_callback с нормально тогда и только тогда servable был загружен успешно, в противном случае возвращает состояние ошибки.

При использовании пула потоков этот метод переводит обслуживаемый жгут в состояние kLoading, планирует загрузку и возвращает, в противном случае он завершает загрузку перед возвратом.

Версия: Этот менеджер должен был управлять этой servable уже, для того , чтобы быть загружен, иначе мы называем done_callback со статусом ошибки. Не вызывайте это несколько раз для одного и того же обслуживаемого объекта. Только один из них будет успешным, а остальные выйдут из строя со статусом ошибки.

ManageServable

Status ManageServable(
  ServableData< std::unique_ptr< Loader >> servable
)

Начинает управлять обслуживаемым объектом.

Возвращает ошибку, если задан обслуживаемый объект, которым уже управляют.

Если servable находится в неисправном состоянии, этот метод не возвращает ошибку. Вместо этого менеджер принимает обслуживаемый объект, переводит его в состояние kError (с уведомлением, отправленным на шину событий), а затем немедленно прекращает управление им. Такое поведение способствует единообразной обработке ошибок, возникающих в источниках (например, неверный путь к файлу для обслуживаемых данных) и ошибок, возникающих в диспетчере (например, недостаточно ресурсов для загрузки обслуживаемых данных).

ManageServableWithAdditionalState

Status ManageServableWithAdditionalState(
  ServableData< std::unique_ptr< Loader >> servable,
  std::unique_ptr< T > additional_state
)

Подобно вышеупомянутому методу, но вызывающие, обычно другие менеджеры, созданные поверх этого, могут связать дополнительное состояние с обслуживаемым.

Дополнительным состоянием может быть ACL или метаданные времени жизни для этого обслуживаемого объекта. К этому классу переходит собственность государства.

StopManagingServable

Status StopManagingServable(
  const ServableId & id
)

Сообщает менеджеру прекратить управление этим обслуживаемым объектом.

Требуется, чтобы обслуживаемый объект в настоящее время находится в ведении и чтобы его состояние было одним из {kNew, kError, kDisabled}.

UnloadServable

void UnloadServable(
  const ServableId & id,
  DoneCallback done_callback
)

Выгружает обслуживаемый объект с этим идентификатором, а также обновляет карту обслуживания.

Вызовы done_callback с нормально тогда и только тогда servable был выгружен успешно, в противном случае возвращает состояние ошибки.

При использовании пула потоков этот метод переводит обслуживаемый жгут в состояние kQuiescing, планирует выгрузку и возвращает, в противном случае он завершает выгрузку перед возвратом.

Версия: Этот менеджер должен быть загружен и сделал это servable доступно, для того , чтобы быть выгружены, иначе вызовы done_callback со статусом ошибки. Не вызывайте это несколько раз для одного и того же обслуживаемого объекта. Только один из них будет успешным, а остальные выйдут из строя со статусом ошибки.

~ BasicManager

 ~BasicManager() override

Если настроен на использование пула потоков загрузки / выгрузки, ожидает завершения всех запланированных загрузок и выгрузок, а затем уничтожает набор потоков.