Присоединяйтесь к нам на DevFest for Ukraine 14-15 июня Онлайн Зарегистрироваться сейчас

Архитектура

TensorFlow Serving - это гибкая, высокопроизводительная система обслуживания моделей машинного обучения, разработанная для производственных сред. TensorFlow Serving упрощает развертывание новых алгоритмов и экспериментов, сохраняя при этом ту же архитектуру сервера и API. TensorFlow Serving обеспечивает встроенную интеграцию с моделями TensorFlow, но может быть легко расширен для обслуживания других типов моделей.

Ключевые идеи

Чтобы понять архитектуру TensorFlow Serving, вам необходимо понимать следующие ключевые концепции:

Сервировки

Servables являются центральной абстракцией в TensorFlow сервировке. Обслуживаемые объекты - это базовые объекты, которые клиенты используют для выполнения вычислений (например, поиска или вывода).

Размер и степень детализации обслуживаемого объекта гибкие. Один обслуживаемый объект может включать в себя что угодно, от одного фрагмента таблицы поиска до одной модели и кортежа моделей вывода. Обслуживаемые объекты могут быть любого типа и интерфейса, что обеспечивает гибкость и будущие улучшения, такие как:

  • результаты потоковой передачи
  • экспериментальные API
  • асинхронные режимы работы

Обслуживаемые объекты не управляют собственным жизненным циклом.

Типичные обслуживаемые объекты включают следующее:

  • TensorFlow SavedModelBundle ( tensorflow::Session )
  • таблица поиска для встраивания или поиска по словарю

Обслуживаемые версии

TensorFlow Обслуживание может обрабатывать один или несколько версий servable в течение срока службы единственного экземпляра сервера. Это позволяет загружать свежие конфигурации алгоритмов, веса и другие данные с течением времени. Версии позволяют загружать более одной версии обслуживаемого объекта одновременно, поддерживая постепенное развертывание и экспериментирование. Во время обслуживания клиенты могут запросить либо последнюю версию, либо конкретный идентификатор версии для конкретной модели.

Обслуживаемые потоки

Servable поток представляет собой последовательность версий servable, отсортировано путем увеличения номера версии.

Модели

TensorFlow Порция представляет собой модель в качестве одного или нескольких servables. Модель с машинным обучением может включать в себя один или несколько алгоритмов (включая изученные веса) и таблицы поиска или встраивания.

Вы можете представить составную модель как одно из следующих действий :

  • несколько независимых обслуживаемых
  • одиночный составной обслуживаемый

Обслуживаемый объект также может соответствовать части модели. Например, большая таблица поиска может быть сегментирована по многим экземплярам TensorFlow Serving.

Погрузчики

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

Источники

Источники плагин модули , которые находят и обеспечивают servables. Каждый источник предоставляет ноль или более обслуживаемых потоков. Для каждого обслуживаемого потока Source предоставляет по одному экземпляру Loader для каждой версии, которую он делает доступной для загрузки. (Источник фактически связан с нулем или несколькими SourceAdapter, и последний элемент в цепочке испускает загрузчики.)

Интерфейс TensorFlow Serving для источников может обнаруживать обслуживаемые объекты из произвольных систем хранения. TensorFlow Serving включает стандартные реализации исходного кода. Например, источники могут обращаться к таким механизмам, как RPC, и могут опрашивать файловую систему.

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

Желаемые версии

Версии стремились представляют набор servable версий , которые должны быть загружены и готовы. Источники передают этот набор обслуживаемых версий для одного обслуживаемого потока за раз. Когда Источник передает новый список желаемых версий Менеджеру, он заменяет предыдущий список для этого обслуживаемого потока. Менеджер выгружает все ранее загруженные версии, которых больше нет в списке.

Смотрите расширенный учебник , чтобы увидеть , как вариант загрузки работает на практике.

Менеджеры

Менеджеры обрабатывать полный жизненный цикл Servables, в том числе:

  • загрузка Servables
  • сервировка сервировок
  • разгрузка Servables

Менеджеры слушают Источники и отслеживают все версии. Менеджер пытается выполнить запросы Источников, но может отказать в загрузке желаемой версии, если, скажем, требуемые ресурсы недоступны. Менеджеры также могут отложить «разгрузку». Например, диспетчер может дождаться выгрузки, пока не закончит загрузку более новой версии, на основе политики, гарантирующей, что по крайней мере одна версия загружается постоянно.

TensorFlow Порции Менеджеры обеспечивают простой, узкий интерфейс - GetServableHandle() - для клиентов , для доступа загружается servable экземпляров.

Основной

Использование стандартного TensorFlow сервировки Apis, TensorFlow Обслуживание Ядро управляет следующими аспектами servables:

  • жизненный цикл
  • метрики

TensorFlow Serving Core обрабатывает обслуживаемые объекты и загрузчики как непрозрачные объекты.

Жизнь обслуживаемого

Схема архитектуры обслуживания tf

Говоря в широком смысле:

  1. Источники создают загрузчики для обслуживаемых версий.
  2. Загрузчики отправляются как ожидаемые версии менеджеру, который загружает их и обслуживает их по запросам клиентов.

Подробнее:

  1. Плагин Source создает загрузчик для определенной версии. Загрузчик содержит все метаданные, необходимые для загрузки обслуживаемого объекта.
  2. Источник использует обратный вызов, чтобы уведомить Менеджера об ожидаемой версии.
  3. Диспетчер применяет настроенную политику версий, чтобы определить следующее действие, которое необходимо предпринять, например, выгрузить ранее загруженную версию или загрузить новую версию.
  4. Если диспетчер определяет, что это безопасно, он предоставляет загрузчику необходимые ресурсы и указывает загрузчику загрузить новую версию.
  5. Клиенты запрашивают у Менеджера обслуживаемый объект, либо явно указывая версию, либо просто запрашивая последнюю версию. Менеджер возвращает дескриптор обслуживаемого объекта.

Например, предположим, что Source представляет собой график TensorFlow с часто обновляемыми весами модели. Веса хранятся в файле на диске.

  1. Источник обнаруживает новую версию весов модели. Он создает загрузчик, содержащий указатель на данные модели на диске.
  2. Источник уведомляет динамический менеджер о желаемой версии.
  3. Динамический менеджер применяет политику версий и решает загрузить новую версию.
  4. Динамический менеджер сообщает загрузчику, что памяти достаточно. Загрузчик создает экземпляр графа TensorFlow с новыми весами.
  5. Клиент запрашивает дескриптор последней версии модели, а динамический менеджер возвращает дескриптор новой версии обслуживаемого объекта.

Расширяемость

TensorFlow Serving предоставляет несколько точек расширения, где вы можете добавлять новые функции.

Политика версий

Политики версий определяют последовательность загрузки и выгрузки версии в одном обслуживаемом потоке.

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

Источник

Новые источники могут поддерживать новые файловые системы, облачные решения и серверные части алгоритмов. TensorFlow Serving предоставляет несколько общих строительных блоков, которые упрощают и ускоряют создание новых источников. Например, TensorFlow Serving включает в себя служебную программу для обертывания поведения опроса вокруг простого источника. Источники тесно связаны с загрузчиками для конкретных алгоритмов и обслуживаемых данных.

См пользовательский источник документ о том , как создать пользовательский источник.

Погрузчики

Загрузчики - это точка расширения для добавления алгоритмов и баз данных. TensorFlow - один из таких алгоритмов. Например, вы можете реализовать новый загрузчик, чтобы загрузить, предоставить доступ и выгрузить экземпляр нового типа обслуживаемой модели машинного обучения. Мы ожидаем создания загрузчиков для таблиц поиска и дополнительных алгоритмов.

См Пользовательские Servable документ , чтобы узнать , как создать пользовательский servable.

Дозатор

Группирование нескольких запросов в один запрос может значительно снизить стоимость выполнения логического вывода, особенно при наличии аппаратных ускорителей, таких как графические процессоры. TensorFlow Serving включает виджет пакетной обработки запросов, который позволяет клиентам легко группировать свои выводы, зависящие от типа, по запросам в пакетные запросы, которые системы алгоритмов могут обрабатывать более эффективно. Смотрите Руководство Batching для получения дополнительной информации.