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

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

  1. Создайте свою модель машинного обучения
  2. Разработайте свое веб-приложение с помощью Flask и интегрируйте свою модель в приложение.
  3. Разверните свое веб-приложение на облачной платформе Heroku

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

Системные Требования:

Я выполняю этот проект в Windows (используя Anaconda Prompt). Однако те же шаги можно использовать в Linux и Macbook. Для создания приложения нам понадобится python 2.x или 3.x. В дополнение к этому установите на свой компьютер Heroku CLI, Git и brew.

Для Windows python можно установить с помощью Anaconda. Anaconda позволяет использовать подсказку Anaconda, которую можно использовать вместо терминала.

1. Создайте свою модель машинного обучения

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



Набор данных состоит из 4 независимых функций (Цена_за_неделю, Население, Месячный_доход, Средняя_парковка_за_месяц) и зависимых функций или меток (Число_недельных_райдеров).

Мы используем встроенный класс Multiple LinearRegression() от sklearn для построения нашей регрессионной модели. Следующий код помогает нам сохранить нашу модель с помощью модуля Pickle как «model.pkl». Позже мы будем использовать этот файл для прогнозирования вывода, когда из нашего веб-приложения будут предоставлены новые входные данные.

Pickle:модуль pickle Python используется для сериализации и десериализации структур объектов Python. Процесс преобразования любого типа объекта Python (список, словарь и т. д.) в потоки байтов (0 и 1) называется травлением, сериализацией, сглаживанием или маршаллингом. Мы можем преобразовать поток байтов (сгенерированный путем травления) обратно в объекты Python с помощью процесса, называемого распаковкой.

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

Строка 1–6 импортирует все необходимые пакеты и модули. Если в вашей системе нет ни одного из упомянутых пакетов, просто введите pip install {package_name} в командной строке или оболочке.

Строка 9 предназначена для преобразования файла CSV в кадр данных pandas.

Строка 12–13 предназначена для разделения первых 4 независимых функций и последней функции/метки на фрейм данных data_x и data_y соответственно.

Строка 17 предназначена для разделения данных на набор для обучения и набор для тестирования. Соотношение между обучением и тестированием составляет 7:3. Это означает, что набор данных для обучения составляет 70%, а набор данных для тестирования — 30%.

Строка 20 предназначена для создания объекта линейной регрессии. Линейная регрессия — это класс, импортированный из модуля sklearn.linear_model.

Строка 21 предназначена для обучения модели линейной регрессии с набором обучающих данных.

Строка 26 предназначена для хранения данных объекта в файле. рассол. Функция dump() принимает 3 аргумента. Первый аргумент — это объект, который вы хотите сохранить. Второй аргумент — это файловый объект, который вы получаете, открывая нужный файл в режиме двоичной записи (wb).

2. Разработайте свое веб-приложение с помощью Flask и интегрируйте свою модель в приложение.

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

2.1. Установите Flask: вы можете использовать команду «pip install flask». Я использовал Sublime Text 3 и Anaconda Prompt для запуска приложения.

2.2. Импортируйте необходимые библиотеки, инициализируйте приложение flask и загрузите нашу модель машинного обучения: мы инициализируем наше приложение, а затем загрузим в приложение файл «model.pkl».

#import libraries
import numpy as np
from flask import Flask, request, jsonify, render_template
import pickle
import math
app = Flask(__name__)
model =  pickle.load(open('taxi.pkl','rb'))

2.3. Определить маршрут приложения для страницы веб-приложения по умолчанию. Маршруты относятся к шаблонам URL приложения (например, myapp.com/home или myapp.com/index). @app.route("/") — это декоратор Python, который Flask предоставляет для простого назначения URL-адресов в нашем приложении.

#default page of our web-app
@app.route('/')
def home():
    return render_template('index.html')

Декоратор сообщает нашему @app, что всякий раз, когда пользователь посещает домен нашего приложения (localhost:5000 для локальных серверов) в заданном .route(), выполняется функция home(). Flask использует библиотеку шаблонов Jinja для рендеринга шаблонов. В нашем приложении мы будем использовать шаблоны для рендеринга HTML, который будет отображаться в браузере.

2.4. Перенаправление модели для прогнозирования количества поездок в Uber: мы создаем новый маршрут приложения ('/predict'), который считывает ввод из нашей формы index.html и при нажатии на кнопку прогнозирования выводит результат, используя рендер_шаблон.

@app.route('/predict', methods=['POST'])
def predict():
 int_feat = [int(x) for x in request.form.values()]
 final_feat = [np.array(int_feat)]
 prediction = model.predict(final_feat)
 output = round(prediction[0],2)
 return render_template('index.html',prediction_text = 'Number of weekly ride : {}'.format(math.floor(output)))

Давайте посмотрим на наш файл index.html:

2.5. Запуск сервера Flask:

if __name__ == '__main__':
 app.run(host='127.0.0.1',port=5000)

app.run() вызывается, и веб-приложение размещается локально на [localhost:5000].

Структура проекта:

Проект сохраняется в папке с именем «heroku_app». Сначала мы запускаем файл «mlmodel.py», чтобы получить нашу модель ML, а затем запускаем «app.py». При запуске этого файла наше приложение размещается на локальном сервере с портом 5000.

  • Taxi.csv — это набор данных, который мы использовали.
  • mlr.py — это код нашего машинного обучения.
  • Taxi.pkl — это файл, который мы получаем после запуска файла mlr.py. Он присутствует в том же каталоге
  • myapp.py — это приложение Flask, которое мы создали выше.
  • templates — эта папка содержит наш файл index.html. Это обязательно во Flask при рендеринге шаблонов. Все файлы HTML помещаются в эту папку.
  • static — эта папка содержит папку «css». Статическая папка в приложении Flask предназначена для хранения файлов CSS и JavaScript.

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

Чтобы узнать о виртуальной среде и о том, как ее создать, нажмите на эту ссылку.

Теперь давайте посмотрим, что произойдет, когда мы запустим myapp.py.

Скопируйте URL-ссылку и вставьте в адресную строку браузера:

Давайте проверим, работает ли он правильно или нет:

Ага, бежит.

Развертывание веб-приложения Flask ML в Heroku

Шаг 1: Установите gunicorn с помощью терминала. Gunicorn — это HTTP-сервер Python WSGI, использующий модель pre-fork worker. Используя gunicorn, вы сможете обслуживать свое приложение Flask более чем в одном потоке. Я буду использовать приглашение Anaconda в Windows. Для установки используйте следующую команду:

$ pip install gunicorn

Шаг 2.Создание файла требований.

На этом этапе мы создадим файл требований, который будет содержать все пакеты и API, используемые приложением и моделью. Файлы требований будут действовать как шаблон для Heroku для установки всех пакетов и создания платформы для запуска приложения в облаке.

$ pip freeze > requirements.txt

В «требованиях.txt». Упомяните все требования следующим образом:

Flask==1.1.1
gunicorn==19.9.0
Jinja2==2.10.1
MarkupSafe==1.1.1
Werkzeug==0.15.5
numpy>=1.9.2
scipy>=0.15.1
scikit-learn>=0.18
pandas>=0.19

Шаг 3.Создание Procfile

Procfile указывает команды, которые выполняются приложением Heroku при запуске. Откройте новый файл с именем Procfile (без расширения) в рабочем каталоге и вставьте следующее.

web: gunicorn app:app

Шаг 4. Загрузите весь проект в репозиторий GitHub.

Перед размещением в Heroku вам необходимо загрузить все каталоги проекта в новый репозиторий Github, как показано ниже:

Для развертывания в Heroku необходимо выполнить дополнительные 3–4 шага. вы можете перейти по этой ссылке.



И это все!! Браво!! Ваше приложение размещено на облачной платформе Heroku. Теперь любой может получить доступ к вашему веб-приложению в Интернете. Если вам понравилась эта статья и она была так или иначе полезна, не забудьте нажать кнопку "хлопать".

Спасибо ! Наслаждайся чтением !!!