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

Предпосылки

Вам необходимо знать следующее:

  1. Python
  2. Машинное обучение
  3. Scikit-Learn
  4. REST API
  5. Докер

Оглавление

  1. Зачем нам нужен REST API для модели машинного обучения?
  2. Создайте модель машинного обучения с помощью SKLearn
  3. Упакуйте модель в файл рассола
  4. Создать FLASK API
  5. Создать образ докера
  6. Запустить контейнер локально
  7. Используйте конечную точку REST для прогнозирования

1. Зачем нам нужен REST API для модели машинного обучения?

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

2. Создайте модель машинного обучения с помощью SKLearn.

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

Исходный набор данных доступен в формате .csv в Конкретном наборе данных.

Поскольку цель этой публикации - создать конечную точку REST для обученной модели, мы пропустим этапы построения модели и обучения.

Модель построена с использованием Python и библиотеки машинного обучения Scikit-Learn. Вы можете получить доступ к файлу записной книжки модели jupiter здесь: model.ipynb

3. Упакуйте обученную модель в файл Pickle.

Как только мы создадим нашу обученную модель, сериализуем модель в файл pickle. Следующий код создает файл .pkl путем сериализации нашего обученного экземпляра модели.

import pickle
with open('concrete_strength_trained_model.pkl', 'wb') as m:
    pickle.dump(gb_rs_cv.best_estimator_, m)

Здесь gb_rs_cv.best_estimator - это последний обученный экземпляр модели с гипертонастройкой, который сериализуется в файл рассолаcrete_strength_trained_model.pkl.

4. Создайте Flask API.

Flask - это API Python, который позволяет нам создавать веб-приложения.

Чтобы установить Flask с помощью pip, выполните следующую команду.

pip install Flask

Для других типов установки, пожалуйста, обратитесь к Установка Flask.

После завершения установки создайте файл с именем server.py и вставьте следующий код:

server.py - это файл, который мы запускаем для выполнения проекта фляги.

predictor_api взят из другого импортированного файла python (мы увидим вкратце), который содержит код для ресурса REST.

app.register_blueprint (predictor_api, url_prefix = '/ model') регистрирует конечные точки REST в приложении FLASK и добавляет префикс / model в URL-адрес REST для всех конечных точек в predictor_api.

Следующий код запускается первым, когда мы запускаем server.py

if __name__ == '__main__':
   load_model() # load the model on flask start
   app.config['model'] = model
   app.run(host='0.0.0.0', port=80)

Функция load_model () читает файл .pkl (убедитесь, что у вас есть файл specific_strength_trained_model.pkl в том же каталоге), который мы создали ранее, загружает экземпляр модели и присваивает его переменной ' модель

app.config['model'] = model

мы назначаем экземпляр модели конфигурации приложения, чтобы его можно было использовать в разных файлах Python в проекте, в нашем случае predictor.py

app.run(host='0.0.0.0', port=80)

Вышеупомянутая строка запускает сервер на локальном хосте и на порту 80.

Создайте новый файл с именем predictor.py в той же папке, где мы создали server.py ранее, и вставьте следующий код:

Функция predic () вне класса Predictor - это наша конечная точка REST с URL-адресом «/ predic» и может быть вызвана как HTTP PUT метод. Эта функция считывает полезные данные запроса JSON и вызывает функцию прогнозирования класса Predictor, передавая экземпляр модели (экземпляр извлекается из app.config, current_app.config ['model'] делает это) и полезная нагрузка запроса

Метод predic (self, model, payload) класса Predictor преобразует полезную нагрузку во фрейм данных pandas и выполняет метод model.predict для фрейма данных. Наконец, он возвращает прогнозируемую прочность бетона со статусом http 200.

5. Создайте образ докера.

Контейнер Docker - это платформа для разработки программного обеспечения с открытым исходным кодом. Его основным преимуществом является упаковка приложений в контейнеры, что позволяет переносить их в любую систему, работающую под управлением операционной системы (ОС) Linux или Windows.

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

Создайте «requirements.txt» в папке, в которой мы создали файлы server.py, predictor.py, и вставьте следующие записи.

Flask==1.0.2
flask-restful
blueprint==3.4.2
numpy
pandas
scikit-learn==0.24.1

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

Теперь создайте файл с именем «Dockerfile» в той же папке. Вставьте приведенный ниже код

FROM python: 3.6-slim - извлекает базовый образ докера python

Все команды COPY копируют соответствующие файлы в папку «deploy».

WORKDIR / deploy / - делает папку «deploy» рабочим каталогом.

RUN pip install -r requirements.txt - устанавливает каждую библиотеку, указанную в файле requirements.txt.

EXPOSE 80 - выставить порт как 80

ENTRYPOINT [«python», «server.py»] - запускает файл «server.py»

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

Чтобы создать образ докера, выполните следующую команду

docker build -t <<docker_image_name>> .

Точка "." в конце важен, поскольку он указывает, что Dockerfile существует в текущем каталоге

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

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

6. Запустите контейнер локально.

Чтобы запустить контейнер докеров, выполните следующую команду

docker run -p 80:80 <<docker_image_name>>

7. Используйте конечную точку REST для прогнозирования.

Наконец, вызовите модель как REST для прогнозирования прочности бетона. Для этого мы можем использовать любой клиент REST, я использовал post-man. URL-адрес конечной точки для нашей модели будет http: // localhost: 80 / модель / прогноз.

Для данных испытаний наша модель предсказала, что прочность бетона составляет 30,261782 МПа (мегапаскалей).

Полный проект фляги доступен на Flask API Github.