Развертывание моделей TensorFlow в качестве конечных точек REST

Обучение модели машинного обучения (ML) — это только один шаг в жизненном цикле ML. Нет смысла в машинном обучении, если вы не можете получить ответ от своей модели. Вы должны иметь возможность размещать обученную модель для логического вывода. Существует множество вариантов хостинга/развертывания, которые можно использовать для машинного обучения, одним из самых популярных является TensorFlow Serving.

TensorFlow Serving помогает брать артефакты обученной модели и размещать их для логического вывода. Самый простой способ использовать TensorFlow Serving для инференса — Docker. В этой статье мы рассмотрим пример обучения модели, а затем ее размещения с использованием TensorFlow Serving в сочетании с Docker для обслуживания REST API для логического вывода. Если вы хотите сразу перейти к коду, загляните в этот репозиторий.

Оглавление

  1. Предварительные требования/настройка
  2. Архитектура обслуживания TensorFlow
  3. Обучение и сохранение вашей модели
  4. Размещение вашей модели с помощью TensorFlow Serving и Docker
  5. Кредиты + дополнительные ресурсы и заключение

Предварительные требования/настройка

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

Убедитесь, что Docker установлен и запущен. Чтобы полностью следовать статье, убедитесь, что вы также имеете базовое представление о командах Docker, а также о Python.

ПРИМЕЧАНИЕ. Набор данных был первоначально опубликован и лицензирован Harrison, D. и Rubinfeld, D.L. Гедонистические цены и спрос на чистый воздух, J. Environ. Экономика и управление».

Архитектура обслуживания TensorFlow

Главное, что нужно понять в TensorFlow Serving, — это объект Servable, который клиент использует для выполнения логического вывода. Обычно этот Servable представляет собой SavedModelBundle, который вы создадите после обучения своей модели. Каждый Servable будет иметь связанную версию, это можно указать при сохранении модели. Используя это, вы также можете обслуживать несколько разных моделей одновременно, если хотите.

Поток в целом выглядит следующим образом -

  • Источник: загружает модель из указанного пути к файлу, это обслуживаемый объект. Мы укажем этот путь при запуске нашего контейнера.
  • Loader: берет новую модель из источника, содержит функциональные возможности для загрузки и выгрузки servable, AspiredVersion создается на основе новой модели.
  • Диспетчер моделей: поддерживает жизненный цикл модели, то есть любые обновления версий/метаданных модели. Диспетчер по существу слушает источник и выполняет запросы, если необходимые ресурсы доступны (например, метаданные для конкретной версии, которая существует или не существует).
  • ServableHandle: это место для разговора с клиентским кодом, здесь раскрывается соответствующий API (REST или gRPC).

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

Обучение и сохранение вашей модели

Сначала мы обучим простую модель на наборе данных Boston Housing. Мы предоставляем все это в скрипте train.py, убедитесь, что установлены следующие импорты.

Мы можем загрузить набор данных Boston непосредственно из Sklearn и разделить набор данных для обучения.

Затем мы создаем нашу нейронную сеть и обучаем нашу модель.

Последняя строка сценария является ключом к правильному обслуживанию вашей модели.

«boston_model» будет имя_модели и каталогом, в котором мы будем указывать на артефакты нашей обученной модели. Созданный подкаталог «0000001» — это каталог с вашими метаданными модели: активами, переменными, keras_metadata.pb и save_model.pb. Обязательно запустите этот скрипт и убедитесь, что следующие каталоги созданы после выполнения, как показано ниже.

Размещение вашей модели с помощью TensorFlow Serving и Docker

Убедитесь, что Docker запущен и работает. Первое, что мы сделаем, — это вытащим образ TensorFlow Serving Docker с помощью следующей команды.

После того, как вы вытащили образ, нам нужно запустить контейнер, для REST API нам нужно выставить порт 8501. Обратите внимание, что gRPC также поддерживается, для этого выставляем порт 8500.

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

Обязательно добавьте путь к тому месту, где находится ваш проект, в исходной команде. Переменная среды «MODEL_NAME» — это каталог, в котором вы сохранили свою модель, именно здесь сохраняется последняя версия вашей модели. Обратите внимание, что вы также можете вводить другие переменные среды, с которыми ваш контейнер может работать здесь, а также при запуске контейнера.

Теперь, когда у нас есть конечная точка REST, мы можем отправить пример вызова с помощью команды Curl. Для одной точки данных выполните следующую команду.

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

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

Чтобы получить еще больше творчества или загрузить тест в большем масштабе, вы также можете использовать такие пакеты, как библиотека Python requests.

Заключение



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

Кредиты/дополнительные ресурсы

Модели обслуживания с помощью TF Serving и Docker

Серия Создатель мудрецов

Обслуживание TF с помощью Amazon SageMaker

Если вам понравилась эта статья, не стесняйтесь связаться со мной в LinkedIn и подписаться на мою Информационную рассылку. Если вы новичок в Medium, зарегистрируйтесь с помощью моего Реферала для участников.