Рубрики
Без рубрики

Mlops: Развертывание моделей машинного обучения с Docker и Google Cloud Platform (часть 2)

Введение модель развертывания Что на земле фланг? Начало работы с Flask Tele … Tagged с начинающими, DevOps, Python, Google Cloud.

  • Вступление
    • Модель развертывания
    • Что на земле фланг?
      • Начало работы с флекой
      • Начало работы с Swagger
    • Развертывание модели машинного обучения с колкой и чванством
    • Вывод
    • Ссылка/ресурсы

      Вступление

      В предыдущем Статья Мы узнали о машинном обучении, важности операций машинного обучения (MLOP) в жизненном цикле машинного обучения. Мы также узнали, как создать оператор проблемы, собирать необходимые данные, создать модель машинного обучения, оценивать модель и сохранить модель для будущего использования.

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

Модель развертывания

Мы уже обсуждали развертывание модели в предыдущей статье, но чтобы дать резюме. Развертывание модели – это процесс обеспечения моделей машинного обучения доступными для других через различные интерфейсы, такие как веб -сайты, мобильные телефоны, встроенные системы e.t.c. Flask и Swagger будут использованы для развертывания модели в этой статье, но что такое Flask и Swagger?

Что на земле фланг?

По словам Википедии

Flask – это микроам -структура, написанная на Python. Он классифицируется как микропрофликт, потому что он не требует определенных инструментов или библиотек.

Flask – это просто структура, которая помогает разработчикам Python создавать веб -сайты без необходимости изучения JavaScript. С флекой, полноценные веб-сайты могут быть построены с Python, HTML & CSS

Начало работы с флекой

Теперь, когда мы понимаем функциональность колбы, давайте погрузимся в практическое пример. Вам понадобится интегрированная среда разработки, такую как Visual Studio Code , Pycharm E.T.C, чтобы следовать. Вам также нужно установить колбу, вы можете установить колбу, перейдя к своей командной строке/терминалу и введите

pip install flask

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

  • Импортируйте класс Flask из модуля колбы
  • Инициализировать объект Flask () с именем текущего файла __name__ , __name__ поможет Python найти, где загружать другие зависимости (в данном случае в наш сценарий). Вы можете прочитать эту статью из Stackoverflow Чтобы понять цель __название__
  • Объявите переменную для хранения моего имени (замените на ваше имя)
  • Инициализируйте декоратор, декоратор будет вызван, когда пользователи нажимают на URL -адрес веб -сайта на главной странице (это то, что называется, когда вы нажимаете на www.google.com ). Вы можете прочитать это Статья От DataCamp, чтобы узнать больше о декораторах.
  • Определите функцию, которая связывается с декоратором (декоратор возвращает функцию всякий раз, когда она называется). Функция может вернуть HTML -файл или просто текст.
  • Напишите условное утверждение, которое ограничивает выполнение приложения для текущего сценария (т. Е. Если вы импортируете сценарий в другой сценарий, приложение не запускается). Вы можете прочитать это Статья От гиксфордных вещей, чтобы понять важность если
# Importing the Flask module from flask library
from flask import Flask

# initializing our application with the name of our module
app = Flask(__name__)
# Variable to store my name( change to your name)
my_name = 'idowu'

# Initializing the homepage route
@app.route('/')
def greet(): # function that will be returned
    return 'Hello ' + my_name

if __name__=='__main__':
    app.run(debug=True) 

Скопируйте приведенный выше код и сохраните его внутри файла, вы можете назвать файл my_flask.py. Теперь перейдите к тому, где вы сохранили файл, используя командную строку, и введите python my_flask.py.

python my_flask.py

Или просто нажав на значок запуска, если вы используете код Visual Studio.

Инжир. 1 Как запустить файл Python с помощью VSCODE (изображение от автора)

После запуска файла либо с командной строкой/терминалом, либо с VSCODE, вы будете представлены на этом экране.

Инжир. 2 изображение отображает информацию о колбе (изображение от автора)

Нажмите на ссылку ( http://127.0.0.1:5000/), oonce Вы нажимаете на ссылку, вы увидите экран ниже. Рис.3 Изображение, показывающее вывод функции приветствия (Изображение автором)

Когда вы нажимаете на ссылку ( http://127.0.0.1:5000/ ), колба автоматически называется @app.route ('/') Декоратор, это потому, что вы пытаетесь получить доступ к домашней странице (которая является / ). Декоратор @app.route автоматически вызовет Приветствую Функция и вывод функции будут возвращены. Вы заметите, что мы резко кодировали имя переменной в наш сценарий, который не является интуитивно понятным. Что если мы хотим принять имя от пользователей и вернуть Привет + user_name В Мы можем сделать это, создав еще один индекс для имени. Нам нужно переписать программы в нашем сценарии. Код ниже будем

  • Свяжите приветственную функцию с домашним маршрутом ( / )
  • Свяжите другую функцию Greet_Name с /приветствие/имя декоратор. Этот декоратор позволит пользователям вставлять свои имена (это похоже на www.google.com/search/query ). www.google.com URL Home Route URL, пока /Поиск для маршрута поиска.
from flask import Flask
app = Flask(__name__)

@app.route("/")
def welcome():
    return 'Hello welcome to my first flask website'

@app.route("/greet/")
def greet_name(name):
    return 'Hello ' + name

if __name__=='__main__':
    app.run(debug=True)

Удалить предыдущие коды в my_flask.py и скопируйте приведенный выше код в my_flask.py (Убедитесь, что вы сохраняете файл)

Теперь попробуйте бежать my_flask.py и нажмите на URL -адрес домашней страницы.

python my_flask.py

Вам будет представлен экран ниже рис. 4 домашняя страница веб -сайта (изображение автора)

Теперь, чтобы пользователи могли вставить свои имена, пользователям нужно будет добавить /приветствовать/их_name После URL домашней страницы, то есть ( http://127.0.0.1:5000/greet/their_username ).

Находясь на домашней странице, попробуйте добавить /Greet/your_name [замените на ваше имя] Инжир. 5 изображение, показывающее ответ от Greet Route

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

Swagger позволяет вам описать структуру ваших API, чтобы машины могли их читать. Способность API описать свою собственную структуру является корнем всей удивительности в чванстве. Почему это так здорово? Что ж, прочитав структуру вашего API, мы можем автоматически создать красивую и интерактивную документацию API. Источник

Начало работы с Swagger

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

pip install flasgger

Приведенный ниже код будет

  • Импортируйте модуль запроса и колбы из колбы.
  • Импорт Swagger из Flasgger
  • Инициализировать объект Flask
  • Оберните приложение объекта Flask Swagger. Это помогает нашему приложению наследовать свойства от Swagger.
  • Создайте декоратор для нашей домашней страницы
  • Создайте декоратор для нашего Greet URL. Если вы заметили, что у нас есть что -то отличное от того, что мы определяли ранее. @app.route () Декоратор для Greet URL принимает параметр методов со значением Get. Есть два основных метода, которые @app.route получает

    • Метод получения (метод получения используется, когда вы хотите что -то получить, когда вы перемещаетесь на www.google.com Вы косвенно вызываете метод получения для возврата файла HTML для домашней страницы)
    • Метод POST используется для отправки информации на сервер. Вы можете прочитать это Статья От гиксфордных вещей, чтобы узнать больше о почте и получить методы.
  • Внутри Greet_Name () Функция, вам придется использовать DocString для определения интерфейса Swagger.

    • Интерфейс ожидает;
    • Название запроса
    • информация о запросе
    • параметры, которые будут введены. Поля параметров ожидают
      • имя поля
      • Режим, в который будет введен параметр, его можно вручную вставить в виде значений (запрос) или вставка пути к значению.
      • Тип параметра (он может быть целым числом или строкой)
      • Если параметр является обязательным или нет (если это требуется, то параметр не может быть опущен)
    • ответы.
  • N.B Убедитесь, что вы рассчитываете на Docstring с четырьмя пространствами, также вам нужно будет рассказать о деталях по параметрам и ответам, иначе Swagger не будет отображать дисплей.

  • Чтобы получить доступ к user_name по параметрам, вам нужно будет использовать модуль запроса для доступа к параметру

  • Наконец, вы можете вернуть приветствие и user_name.

Скопируйте код ниже в my_flask.py

from flask import Flask, request 
from flasgger import Swagger 
app = Flask(__name__)
Swagger(app)

@app.route("/")
def welcome():
    return 'Hello, welcome to my first flask website'


@app.route('/greet', methods=["Get"])
def greet_name():
    """Greetings
    This is using docstrings for specifications.
    ---
    parameters:
        - name: user_name
          in: query
          type: string
          required: true
    responses:
      200:
         description: "greetings with user's name"
    """

    user_name = request.args.get("user_name")

    print(user_name)

    return "Hello " + user_name

if __name__=='__main__':
    app.run(debug=True)

Теперь попробуйте запустить my_flask.py с

python my_flask.py

Инжир. 6 изображение, показывающее домашнюю страницу (изображение автора)

Чтобы получить доступ к пользовательскому интерфейсу Swagger, добавьте /apidocs После домашней страницы URL, т.е. http://127.0.0.1:5000/апидоки

Инжир. 7 Изображение, показывающее пользовательский интерфейс Swagger (изображение автора)

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

Инжир. 8 Изображение показывает пользовательский интерфейс под кнопкой получить кнопку.

Если вы заметили, вы не можете вставить какой -либо параметр в user_name, чтобы вставить значение в поле user_name, вам нужно будет нажать на кнопку Try It Out.

Теперь вы можете вставить любое имя в поле user_name, и как только вы закончите нажмите на Выполнить кнопка.

Инжир. 9 изображение показывает ответ

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

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

Чтобы успешно развернуть модель, нам нужно будет создать простой конвейер, который будет получать входные данные пользователей и сделать прогноз. Нам нужно переписать нашу программу Swagger, чтобы приспособить больше информации. Код ниже будем

  • Импортная колба и запрос из колбы
  • Импорт Swagger из Flasgger
  • Импорт joblib (это будет полезно позже)
  • Загрузите ранее сохраненный меток-кодер для условия продажи и сохранение в переменную LB_SAlecond
  • Загрузите ранее сохраненный меток-экодер для продажи и сохранение в переменную LB_SAletype
  • Загрузите ранее сохраненную модель линейной регрессии и сохранить в переменную модели
  • Инициализировать наш объект приложения Flask
  • Оберните объект приложения Swagger
  • Определите маршрут для домашней страницы.
  • Определите еще один маршрут для индекса прогнозирования_приса.
  • Определите имя каждого параметра и другую информацию, которая обсуждалась ранее. По умолчанию указывается параметр по умолчанию, а перечисление – создать раскрывающий список значений.
  • Используйте модуль запроса, чтобы получить все параметры, которые были введены.
  • Преобразовать салину из строки в число (это обсуждалось в части 1)
  • Преобразовать тип продажи из строки в число.
  • хранить все параметры в список
  • Используйте модель, чтобы сделать прогнозы и вернуть прогнозируемую цену для дома. Скопируйте код ниже в my_flask.py
from flask import Flask, request 
from flasgger import Swagger
import joblib 
lb_salecond = joblib.load('lb_sc')
lb_saletype = joblib.load('lb_st') 
model = joblib.load('lr_model')
app = Flask(__name__)
Swagger(app)


@app.route("/")
def welcome():
    return 'Hello welcome to my first flask website'

['Normal', 'Partial', 'Abnorml', 'Family', 'Alloca', 'AdjLand']
@app.route('/predict_price', methods=["Get"])
def predict_prices():
    """Welcome to Moowale House Prediction Website
    This is using docstrings for specifications.
    ---
    parameters:
        - name: MSSubClass
          in: query
          type: integer
          required: true
        - name: LotFrontage
          in: query
          type: integer
          required: true
        - name: Year_sold
          in: query
          type: integer
          required: true
        - name: Sale_type
          in: query
          type: string
          required: true
          default: New
          enum: ['WD', 'New', 'COD', 'ConLD', 'ConLI', 'ConLw', 'CWD', 'Oth', 'Con']
        - name: Sale_condition
          in: query
          type: string
          default: Normal
          enum: ['Normal', 'Partial', 'Abnorml', 'Family', 'Alloca', 'AdjLand']
    responses:
      200:
         description: House Price Prediction
    """

    mssubclass = request.args.get("MSSubClass")
    lotfrontage = request.args.get("LotFrontage")
    year_sold = request.args.get("Year_sold")
    saletype = request.args.get("Sale_type")
    salecondition = request.args.get("Sale_condition")

    label_encode_sc = lb_salecond.transform([salecondition])
    label_encode_st = lb_saletype.transform([saletype])

    columns_list = [mssubclass,lotfrontage,year_sold,label_encode_sc,label_encode_st]

    price = round(model.predict([columns_list])[0])
    return f'The predicted price is ${price:.0f}'

if __name__=='__main__':
    app.run(debug=True)

Запустите my_flask.py, нажмите на URL и прикрепите /apidocs После домашней страницы URL. Вы увидите экран ниже,

Инжир. 10 изображение, показывающее пользовательский интерфейс Moowale (изображение автора)

Нажмите «Попробуй это» и вставьте эти значения для вставки 20 MSSUBClass для вставки LotFrontage 80, для MSSOLD INSERT 2007, для продажи тип и оставьте SaleCondition по умолчанию и нажмите «Выполнить».

Рис.11 Изображение, показывающее прогноз (изображение автора)

Теперь, когда у нас развернута наша модель, мы подошли к концу второй статьи в этой серии.

Вывод

Эта статья познакомила вас с процессом развертывания моделей машинного обучения с помощью колбы и создания интерактивных визуальных эффектов с Swagger. В третьей части этой серии вы узнаете, как контейнерить API с Docker и развернуть на платформе Google Cloud. Вы можете связаться со мной на LinkedIn

Ссылка/ресурсы

Видео от Криша Найка канал

Flasgger

Оригинал: “https://dev.to/idowuilekura1/mlops-deploying-machine-learning-models-with-docker-and-google-cloud-platform-part-2-3024”