Обещаю, я буду краток.
Есть 3 типа развертывания:
- Локально - вы должны установить и настроить свое приложение, данные, среду выполнения, промежуточное ПО, ОС, серверы самостоятельно.
- IAAS - (Инфраструктура как услуга) Здесь вы должны предоставить только свое приложение, данные, среду выполнения и ОС. Другие детали, такие как серверы, сеть и т. Д., Обрабатываются самими платформами. Пример: AWS, Azure, GCP и т. Д.
- PAAS - (Платформа как услуга) Здесь вы предоставляете только свое приложение и данные. В остальном все важные вещи, подобные упомянутым в вышеупомянутых услугах, обрабатываются самой платформой.
Сегодня мы сосредоточимся только на PAAS с использованием python для бэкэнда и HTML с jinja2 для внешнего интерфейса на основе веб-фреймворка Flask.
Шаг 1
Сначала сделайте свою модель машинного обучения.
Сначала создайте один файл models.py в каталоге вашего проекта.
import numpy as np import matplotlib.pyplot as plt import pandas as pd import pickle dataset = pd.read_csv('dummy_data.csv') dataset['quality'].fillna(0, inplace=True) dataset['rating'].fillna(dataset['rating'].mean(),inplace=True) X = dataset.iloc[:, :3] #Converting words to integer values y = dataset.iloc[:, -1] data. from sklearn.linear_model import LinearRegression regressor = LinearRegression() #Fitting model with training data regressor.fit(X, y)
Таким образом мы создаем простую модель для прогнозирования цены продукта в зависимости от качества и рейтинга продукта.
Шаг 2
Мы не хотим раскрывать определение нашей модели внешнему миру через наше Приложение. Итак, мы делаем файл рассола нашей модели. Файл Pickle в основном преобразует нашу модель в байты. вы увидите, что в вашем рабочем каталоге будет создан один файл model.pkl.
pickle.dump(regressor, open('model.pkl','wb'))
Шаг 3
Теперь мы создадим файл app.py, который будет точкой входа в наше приложение.
import numpy as np from flask import Flask, request, jsonify, render_template import pickle app = Flask(__name__) model = pickle.load(open('model.pkl', 'rb')) @app.route('/') def home(): return render_template('page.html') @app.route('/predict',methods=['POST']) def predict(): ''' For rendering results on HTML GUI ''' int_features = [int(x) for x in request.form.values()] final_features=[np.array(int_features)] prediction = model.predict(final_features) output = round(prediction[0], 2) return render_template('page.html', prediction_text='Price of the Product should be $ {}'.format(output)) if __name__ == "__main__": app.run(debug=True)
Шаг 4
Теперь мы создадим файл шаблона с именем page.html и поместим его в папку шаблон в папке вашего проекта.
<!DOCTYPE html> <html > <!--From https://codepen.io/frytyler/pen/EGdtg--> <head> <meta charset="UTF-8"> <title>ML API</title> <link href='https://fonts.googleapis.com/css?family=Pacifico' rel='stylesheet' type='text/css'> <link href='https://fonts.googleapis.com/css?family=Arimo' rel='stylesheet' type='text/css'> <link href='https://fonts.googleapis.com/css?family=Hind:300' rel='stylesheet' type='text/css'> <link href='https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300' rel='stylesheet' type='text/css'> </head> <body> <div class="login"> <h1>Predict Salary Analysis</h1> <!-- Main Input For Receiving Query to our ML --> <form action="{{ url_for('predict')}}"method="post"> <input type="text" name="rating" placeholder="Rating" required="required" /> <input type="text" name="quality" placeholder="Quality" required="required" /> <input type="text" name="demand_value" placeholder="Demand" required="required" /> <button type="submit" class="btn btn-primary btn-block btn-large">Price Predictor</button> </form> <br> <br> {{ prediction_text }} </div> </body> </html>
Шаг 5
Файлы конфигурации
- Сначала нам нужно предоставить файлы requirements.txt для операторов импорта, которые мы использовали в наших файлах python.
пример формата файла
Flask==1.1.1 gunicorn==19.9.0 itsdangerous==1.1.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 matplotlib>=1.4.3 pandas>=0.19
2. Нам нужно добавить один Procfile в наш проект.
web: gunicorn app:app
первое приложение - это имя файла для точки входа в приложение.
второе приложение - это имя приложения, которое мы назвали во время создания приложения Flask.
пример: app = Falsk (__ name__)
Загрузите все файлы с необходимой структурой в репозиторий github.
ШАГ 6
Теперь создайте учетную запись в Heroku. После входа в систему вы попадете на похожий экран, как показано ниже.
Нажмите Создать.
Введите имя вашего приложения в нижнем регистре.
Остальные разделы оставил как есть.
Вы попадете на этот экран.
Подключите свой репозиторий Github к проекту.
Теперь есть 2 варианта Автоматическое развертывание и Развертывание вручную.
Если вы выберете Автоматическое развертывание, каждый раз, когда вы объединяете свой код в упомянутую ветку, Heroku будет развертывать ваше приложение один раз, и в течение нескольких минут (5–10 минут) изменения будут отражены на вашем реальном сервере.
Если вы выберете Развертывание вручную, то после объединения кода в упомянутой ветке вам необходимо вручную развернуть приложение в облаке, нажав кнопку Развернуть ветку.
Я рекомендую в первый раз выбрать развертывание вручную и проверить журналы.
После сборки пакета вашего приложения, когда будет выполнено развертывание, будет сгенерирована ссылка для вашего приложения для запуска на живом сервере.
Это оно. Нажмите URL-адрес, созданный из журналов развертывания.
HOLA !!!!!!!!!!!!!!!!!
Ваше приложение запущено и работает. Поместите значения по вашему выбору, и ваша модель будет готова предсказать значение.
** Примечание. Вам не нужно размещать код models.py в Github. Каждый раз, когда вы меняете модель, генерируйте файл models.pkl и загружайте обновленный в github.