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



В этом руководстве мы создадим виртуальную среду. В этой виртуальной среде мы подготовим файл Python для веб-приложения и файл требований для списка библиотек. Затем мы импортируем модель (ранее обученную в той же виртуальной среде), файлы python и требований в Github. Мы запустим виртуальную машину (EC2) на AWS и извлечем файлы и модель из Github. Затем мы создадим наше веб-приложение с этими файлами на EC2. Наше веб-приложение будет работать на AWS EC2, даже если мы выключим компьютер.

В этом уроке мы будем использовать модель прогнозирования цен на автомобили. Это не настоящие данные, поэтому цены могут отличаться, а некоторые функции могут не влиять на цену, как обычно. Скачать модель можно по этой ссылке.

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

1 - Создание виртуальной среды

Прежде всего, нам нужна виртуальная среда. Мы можем думать о виртуальной среде как об изолированном пространстве. Библиотеки, которые мы используем при обучении модели или создании файла Python Streamlit, хранятся в этой виртуальной среде со своими текущими версиями, и обновления библиотек не повлияют на нашу модель или файлы, когда мы запустим их позже в этой виртуальной среде. Мы можем вести список библиотек, и если мы хотим запускать наши работы в других средах или платформах, мы можем установить версии библиотек из списка. При работе с AWS EC2 нам понадобится этот список библиотек, который называется файлом requirements.txt.

Давайте создадим виртуальную среду;

Я пользователь ubuntu, этот процесс похож на мой для MacO и дистрибутивов Linux. Вы можете подписаться на меня или проверить эту ссылку на окна и другие детали.

В первую очередь нам понадобится модуль venv на компьютере;

sudo apt install python3-venv

После установки модуля venv мы можем легко создать нашу среду. Я создам среду с именем web_app_env.

python3 -m venv web_app_env

И активируйте его;

source web_app_env/bin/activate

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

2 - Файл Python

Нам нужен файл python (расширение py) для приложения. Мы напишем коды в этот файл для веб-приложения. Мы построим наше приложение на этом файле. Его можно создавать и редактировать с помощью текстового редактора, но для работы требуется интерпретатор Python. py-файлы часто используются для программирования веб-серверов и других административных компьютерных систем.

Сначала мы создадим файл python, я сделаю это на терминале. Я перехожу в соответствующий каталог, где находится моя модель (мы будем использовать модель прогнозирования цен на автомобили, обученную ранее с помощью случайной регрессии леса). Я создаю файл py с помощью touch my_first_app.py.

Если у вас нет Streamlit, вам необходимо установить Streamlit. Вам просто нужно ввести pip install streamlit в свой терминал, и он готов к использованию. (Если у вас нет pip, сначала установите pip.)

pip install streamlit

Затем введите streamlit run my_first_app.py в соответствующем каталоге терминала и запустите его. Файл Python работает, даже если он пуст и дает вам URL-адрес. Наше веб-приложение Streamlit готово, теперь мы можем заполнить этот файл.

streamlit run my_first_app.py

Нажмите на URL (неважно, какой), эта ссылка откроется в вашем браузере.

Когда мы что-то записываем в файл Python (my_first_app.py) и каждый раз, когда мы сохраняем файл, веб-приложение будет меняться одновременно. Вы можете сохранить файл (ctrl + s или command + s), и веб-приложение спросит вас: «Stream файл изменен, запускать или запускать всегда.». Нажмите перезапускать всегда, чтобы он не предупреждал нас каждый раз, а также менял вид.

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

import streamlit as st
import pickle
import pandas as pd
html_temp = """
<div style="background-color:tomato;padding:10px">
<h1 style="color:white;text-align:center;">Car Price Prediction </h1>
</div>"""
st.markdown(html_temp,unsafe_allow_html=True)
model = pickle.load(open("my_model", "rb"))

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

Наш исходный набор данных выглядит следующим образом. За пределами нашего целевого столбца (цена) есть 7 столбцов. Вот почему мы добавим в наше приложение 7 интерактивных блоков / ползунков.

Поставим ползунки для столбиков л.с. и км.

Мы поместим поля выбора для столбцов make_model, body_type, Body Color и Gearing Type. Мы добавим все уникальные значения, найденные в этих столбцах, как выборку в этих полях выбора.

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

Пользователь выберет желаемые функции, и будет показана цена.

hp=st.slider("What is the hp of your car?", 60, 200, step=5)
km=st.slider("What is the km of your car", 0,100000, step=500)
car_model=st.selectbox("Select model of your car", ('Audi A1', 'Audi A2', 'Audi A3'))
body_type=st.selectbox("Select body type of your car", ('Convertible', 'Coupe', 'Off-Road', 'Other', 'Sedans', 'Station wagon', 'Compact'))
color=st.selectbox("What is the color of your car", ('Black', 'Red', 'Brown','White','Grey','Blue','Silver','Beige','Violet','Yellow','Green','Bronze','Orange'))
gear=st.selectbox("What is the gearing type of your car", ('Automatic', 'Manual', 'Semi-automatic'))
extras=st.multiselect("Select extras for your car", ('Alloy wheels', 'Cab or rented Car', 'Catalytic Converter','Handicapped enabled','Right hand drive','Roof rack','Shift paddles','Ski bag','Sport package','Sport seats','Sport suspension','Touch screen','Trailer hitch','Tuned car','Voice Control','Winter tyres'))

Теперь мы преобразуем наш фрейм данных в структуру модели.

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

Для одного горячего кодирования мы будем использовать функцию Pandas get_dummies. Мы будем использовать параметр Fill_value = 0. То есть выбранное значение / столбец будет 1, остальные - 0. Мы используем str.get_dummies для столбца Extras, потому что есть несколько вариантов выбора. Подробнее о get_dummies читайте в этой статье.

my_dict = {
    "hp": hp,
    "km": km,
    "make_model": car_model,
    "body_type": body_type,
    "Body Color": color,
    "Gearing Type": gear,
    "Extras":extras
}
df = pd.DataFrame.from_dict([my_dict])
columns=['hp',
         'km',
 'make_model_A1', 'make_model_A2', 'make_model_A3',
 'body_type_Convertible', 'body_type_Coupe', 'body_type_Off-Road', 'body_type_Other', 'body_type_Coupe', 'body_type_Sedans',
 'body_type_Station wagon', 'body_type_Compact'
 'Body Color_Black', 'Body Color_Blue', 'Body Color_Bronze', 'Body Color_Brown', 'Body Color_Green', 'Body Color_Grey', 'Body Color_Orange', 'Body Color_Red', 'Body Color_Silver', 'Body Color_Violet', 'Body Color_White', 'Body Color_Yellow', 'Body Color_Beige',
 'Gearing Type_Manual', 'Gearing Type_Semi-automatic', 'Gearing Type_Automatic']
df1 = df.drop(['Extras'], axis = 1)
df1 = pd.get_dummies(df1).reindex(columns=columns, fill_value=0)
df_extra = df['Extras'].str.get_dummies(',')
df = df1.join(df_extra)

В последней части файла мы сделаем прогноз и дадим результат.

prediction = model.predict(df)
st.success("The estimated price of your car is €{}. ".format(int(prediction[0])))

Последняя версия файла my_first_app.py будет следующей.

Наше веб-приложение и файл Python готовы.

3 - requirements.txt

Мы сохраняем библиотеки, которые используем при обучении модели и создании файла Python вместе с их версиями, в файле requirements.txt. Если мы хотим запустить наши работы в другой среде или на другой платформе, мы можем установить версии библиотек из списка. При работе с AWS EC2 мы будем использовать файл requirements.txt.

Создать файл requirements.txt очень просто, напишем в терминале pip freeze ›requirements.txt.

pip freeze > requirements.txt

Мы создали это в виртуальной среде web_app_env, поэтому библиотек всего несколько.

Наконец, я отправил файлы my_model, my_first_app.py и requirements.txt в Github для дальнейшего использования на AWS EC2. Теперь мы можем запустить нашу виртуальную машину на AWS.

4 - Запустите EC2 на AWS

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

Если у вас есть учетная запись на AWS, подпишитесь на нее,

Откройте Консоль управления AWS и выберите Запустить виртуальную машину;

Затем выберите Ubuntu Server 20.04 LTS из списка AMI для нашей виртуальной машины;

Перейдите непосредственно к шагу 6, оставив шаги 2, 3, 4 и 5 со значениями по умолчанию.

На шаге 6 в разделе «Настроить группу безопасности» мы добавим диапазон портов для Streamlit. Для протоколов TCP мы добавим диапазон портов 8501, 8502, а для источника будет значение Anywhere.

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

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

После подключения к виртуальной машине введите следующие команды для установки последних обновлений: python3, pip и git.

sudo apt-get update -y
sudo apt-get install python3-pip -y
sudo apt-get install git -y

Затем мы клонируем подготовленный файл python, модель и созданные нами файлы requirements.txt.

git clone https://github.com/NavarraB/Streamlit.git

Нужные нам файлы находятся в каталоге Car_Price в репозитории Streamlit. Итак, мы перейдем в этот каталог и установим библиотеки с помощью файла requirements.txt.

sudo pip3 install -r requirements.txt

Мы установили библиотеки для веб-приложения. Вы можете контролировать то, что имеете;

sudo pip3 freeze

Наконец, мы можем запустить веб-приложение;

streamlit run my_first_app.py &

С амперсандом (&) наше веб-приложение будет работать в AWS EC2, даже если мы выключим компьютер. Вы можете выйти из AWS EC2 с помощью ctrl + d или command + d и проверить, работает ли ваше веб-приложение. Просто позвольте EC2 работать.

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

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