Архитектура

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Модели

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

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

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

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

Погрузчики

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

Источники

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

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

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

Амбициозные версии

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

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

Менеджеры

Менеджеры управляют полным жизненным циклом Servables, включая:

  • загрузка обслуживаемых объектов
  • обслуживание
  • выгрузка обслуживаемых объектов

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

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

Основной

Используя стандартные обслуживающие API TensorFlow, TensorFlow Serving Core управляет следующими аспектами обслуживаемых объектов:

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

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

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

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

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

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

Более детально:

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

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

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

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

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

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

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

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

Источник

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

Дополнительную информацию о том, как создать собственный источник, см. в документе «Пользовательский источник».

Погрузчики

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

См. документ Custom Servable , чтобы узнать, как создать собственный сервируемый объект.

Дозатор

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