тензорный поток :: сервировка :: BasicManager
Это абстрактный класс.#include <basic_manager.h>
Помогает управлять жизненным циклом обслуживаемых объектов, включая их загрузку, обслуживание и разгрузку.
Резюме
Менеджер принимает серваблы в виде загрузчиков.
Мы начинаем управлять обслуживаемым объектом с помощью одного из методов ManageServable *. Вы можете перейти к загрузке servable после этого по телефону LoadServable () . Загрузка также сделает обслуживаемый доступным для обслуживания. После того, как вы решили выгрузить его, вы можете позвонить UnloadServable () на нем, что сделает его недоступным для обслуживания, а затем выгрузить servable.
Servables сохраняются до StopManagingServable () называется. Это позволяет более высокоуровневому менеджеру, располагающему дополнительной информацией, решать, когда можно забыть об обслуживаемом элементе.
BasicManager отслеживает ресурсы (например , ОЗУ) , используемых нагруженных servables, и только позволяет загрузить новый servables , которые вписываются в общем пуле ресурсов.
BasicManager может быть настроен на использование поточно-бассейн , чтобы сделать это груз и выгружает. Это делает LoadServable () и UnloadServable () методу планирование загрузки / выгрузки , а не выполнение их синхронно. Если ожидающих загрузки / выгрузок больше, чем потоков в пуле потоков, они обрабатываются в порядке FIFO.
При наличии загрузчиков, которые переоценивают потребности своих обслуживаемых ресурсов в ресурсах и / или только связывают ресурсы своих обслуживаемых объектов с экземплярами устройств, параллелизм загрузки / выгрузки может быть уменьшен до уровня ниже размера пула потоков. Это потому, что нам, возможно, придется дождаться завершения загрузки / выгрузки одного обслуживаемого объекта, чтобы определить доступность ресурса для загрузки другого обслуживаемого объекта.
ТРЕБУЕТ:
- Порядок вызовов метода - ManageServable () (и варианты) -> LoadServable () -> UnloadServable () -> StopManagingServable () .
- Не планируйте одновременную загрузку и выгрузку одного и того же обслуживаемого объекта.
- Не вызывайте 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
Если настроен на использование пула потоков загрузки / выгрузки, ожидает завершения всех запланированных загрузок и выгрузок, а затем уничтожает набор потоков.