тензорный поток :: сервировка :: Загрузчик

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

#include <loader.h>

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

Резюме

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

Погрузчик для servable объекта представляет один экземпляр потока servable версий, все разделяющие общее название (например , «my_servable») и увеличение числа версий, как правило , представляют обновленные параметры модели , извлеченные из свежих обучающих данных.

Погрузчик должен начаться в ненагруженном состоянии, а это означает , что никакой работы не было сделано , чтобы подготовить для выполнения операций. Типичный экземпляр, который еще не был загружен, содержит просто указатель на местоположение, из которого могут быть загружены его данные (например, путь в файловой системе или местоположение в сети). Строительство и уничтожение экземпляров должно быть довольно дешевым. Операции Дорого инициализации должны быть сделаны в Load () .

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

Реализации должны гарантировать, что методы, которые они предоставляют, являются потокобезопасными, или тщательно документируют и / или координируют свои свойства потокобезопасности со своими клиентами, чтобы гарантировать правильность. Servables не нужно беспокоиться о параллельном выполнении Load () / Unload () , как вызывающий абонент будет гарантировать , что не произойдет.

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

Направьте Известные Подклассы: tensorflow :: обслуживающих :: ResourceUnsafeLoader

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

~Loader ()
Деструктор никогда не будет вызываться на загрузчик которого servable в настоящее время загружен, т.е.

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

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
Оценивает ресурсы, которые будет использовать обслуживаемый объект.
Load ()
virtual Status
Выдает любые данные , которые должны быть загружены перед использованием servable , возвращенное servable () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
По аналогии с описанным выше способом, но принимает метаданные как пары, которые могут быть использованы в осуществлении загрузчика соответствующим образом .
Unload ()=0
virtual void
Очищает любые ресурсы , выделяемые во время нагрузки () ( за исключением , возможно ресурсов совместно через servables, которые по- прежнему необходимы для других активных).
servable ()=0
virtual AnyPtr
Возвращает непрозрачный интерфейс нижележащему обслуживаемому объекту.

Структуры

tensorflow :: служит :: Loader :: Метаданные

Метаданные состоят из ServableId.

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

EstimateResources

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

Оценивает ресурсы, которые будет использовать обслуживаемый объект.

ВАЖНО: реализация этого метода должна соответствовать следующим требованиям, которые позволяют обслуживающей системе правильно рассуждать о том, какие обслуживаемые объекты могут быть загружены безопасно:

  1. Оценка должна представлять верхнюю границу фактического значения.
  2. Перед загрузкой оценка может включать ресурсы, которые не привязаны к какому-либо конкретному экземпляру устройства, например ОЗУ на одном из двух графических процессоров.
  3. При загрузке для любых устройств с несколькими экземплярами (например, с двумя графическими процессорами) оценка должна указывать экземпляр, к которому привязан каждый ресурс.
  4. Оценка должна быть монотонно невозрастающей, т. Е. Не может увеличиваться с течением времени. Причины, по которым он может со временем уменьшаться Возврат
    оценка ресурсов, которые обслуживаемый объект будет потреблять после загрузки. Если обслуживаемый объект уже был загружен, возвращает оценку фактического использования ресурсов.

Нагрузка

virtual Status Load()

Выдает любые данные , которые должны быть загружены перед использованием servable , возвращенное servable () .

Может использовать не больше ресурсов , чем оценка сообщает EstimateResources () .

Если применение Load () , вы не должны переопределить LoadWithMetadata () .

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

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

Если вы перекрывая LoadWithMetadata () , потому что вы можете использовать метаданные надлежащим образом , вы можете пропустить перекрывая Load () .

Разгрузить

virtual void Unload()=0

Очищает любые ресурсы , выделяемые во время нагрузки () ( за исключением , возможно ресурсов совместно через servables, которые по- прежнему необходимы для других активных).

Загрузчик не нужно возвращаться к «новому» состояние (т.е. Load () не может быть вызвана после Unload () ).

обслуживаемый

virtual AnyPtr servable()=0

Возвращает непрозрачный интерфейс нижележащему обслуживаемому объекту.

Вызывающий должен знать точный тип интерфейса, чтобы реально его использовать. Например:

CustomLoader реализации:

class CustomLoader : public Loader {
 public:
  ...
  Status Load() override {
    servable_ = ...;
  }

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Обслуживание запроса пользователя:

ServableHandle<CustomServable> handle = ...
CustomServable* servable = handle.get();
servable->...

Если servable () вызывается после успешного Load () и перед Unload () , она возвращает действительный, непустой объект AnyPtr. При вызове до успешной загрузки () вызова или после Unload () , она возвращает нулевое AnyPtr.

~ Загрузчик

virtual  ~Loader()=default

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

между (успешные) вызовы Load () и Выгрузить () .