Обслуживать обученную модель Tensorflow с REST API с помощью Flask?

У меня есть обученная модель Tensorflow, и я хочу использовать метод прогнозирования с REST API. Я могу подумать о том, чтобы использовать Flask для создания простого REST API, который получает JSON в качестве входных данных, а затем вызывает метод предиката в Tensorflow и затем возвращает предсказанный результат на стороне клиента.

Я хотел бы знать, есть ли беспокойство, чтобы сделать это таким образом, особенно в производственной среде?

Большое спасибо!

3 ответа

Первое, что приходит мне в голову, это производительность.

Команда TensorFlow, похоже, разработала использование сервера / клиента. Вы можете посмотреть на подачу тензорного потока. По умолчанию он использует gRPC для протокола связи.

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

Настройка следующая:

  1. Поскольку сборка tfserving занимает вечность, мы создали образ докера (не для поддержки графического процессора или чего-либо еще, но он работает только для обслуживания модели, и это быстрее и лучше, чем обслуживание напрямую из огромного монолита Python/Flask). Образ сервера модели можно найти здесь: https://hub.docker.com/r/epigramai/model-server/
  2. Затем Flask используется для настройки API. Чтобы отправлять запросы на сервер модели, нам нужен клиент для прогнозирования grcp, поэтому мы создали его в Python, который можно импортировать непосредственно в API фляги, https://github.com/epigramai/tfserving_predict_client/.

Хорошо, что модель не обслуживается приложением Flask API. Сервер модели образов Docker может быть легко заменен сервером моделей, работающим на графическом процессоре, скомпилированном для аппаратного обеспечения машин вместо контейнера Docker.

Я думаю, что одной из ваших главных проблем может быть пакетирование запросов. Например, предположим, что ваша модель представляет собой обученный CNN, такой как VGG, Inception или аналогичный. Если вы внедряете обычную веб-службу с Flask, для каждого полученного вами запроса на прогнозирование (при условии, что вы работаете на графическом процессоре) вы будете делать прогноз одного изображения в графическом процессоре, что может быть неоптимальным, так как вы можете пакетировать подобные запросы, для пример.

Это одна из вещей, которые TensorFlow Serving стремится предложить: возможность объединять запросы для одной и той же модели / подписи в один пакет перед отправкой в ​​графический процессор, более эффективно использовать ресурсы и (потенциально) пропускную способность. Вы можете найти больше информации здесь: https://github.com/tensorflow/serving/tree/master/tensorflow_serving/batching

Тем не менее, это зависит от сценария очень сильно. Но группировка прогнозов - это то, что важно помнить.

Другие вопросы по тегам