Как с легкостью обслуживать модели машинного обучения

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

Кроме того, мы видим все больше и больше выпускаемых моделей-серверов типа TensorFlow Serving и Torch Serve. Хотя есть много веских причин для использования этих решений в производстве, поскольку они быстрые и эффективные, они не могут описать технические характеристики модели и детали реализации.

Вот почему я создал mlserving. Пакет python, который помогает специалистам по обработке данных сосредоточить больше внимания на логике машинного обучения и меньше - на технических деталях сервера.

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

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

Этот интерфейс представляет собой общий поток прогнозов.

Давайте посмотрим на пример (при условии, что у нас уже есть обученная модель)

Сначала мы загружаем нашу обученную модель в конструктор и реализуем интерфейс.

Позже мы создадим ServingApp и добавим наш только что реализованный обработчик вывода.

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

Вызов нашей модели осуществляется путем отправки запроса POST.

curl -X POST http://localhost:1234/api/v1/predict \
-H 'Content-Type: application/json' \
  -d '{
    "features": [...]
}'

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

docker run -p 8501:8501 \
  --mount type=bind,source=/path/to/my_model/,target=/models/model \
  -e MODEL_NAME=model -t tensorflow/serving

Подробнее читайте здесь: https://www.tensorflow.org/tfx/serving/docker

Теперь, когда нам удалось запустить TensorFlow Serving, давайте создадим вокруг него слой обработки Python:

На этот раз мы не загружаем нашу модель в конструктор, поскольку она уже загружена службой TensorFlow.

Метод def predict реализован TFServingPrediction , и в основном он отправляет полезную нагрузку, возвращенную def pre_process , и обрабатывает вывод при обслуживании TensorFlow. Итак, все, что нам осталось сделать, это реализовать предварительную обработку и постобработку.

Вот и все! Нам удалось обернуть наши модели простым в использовании API.

Я хотел бы услышать любые отзывы или предложения, не стесняйтесь обращаться к нам в любое время!

Спасибо за прочтение!

Дополнительные ресурсы