Авторы Хирен Рупчандани, Абхинав Джангир и Ашиш Лепча

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

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

Необходимые шаги в развертывании модели

Четыре шага к развертыванию машинного обучения включают в себя:

  1. Разработайте и создайте модель в учебной среде.
  2. Протестируйте и очистите код, чтобы подготовить его к развертыванию.
  3. Подготовьтесь к развертыванию контейнера.
  4. Запланируйте непрерывный мониторинг и техническое обслуживание после развертывания машинного обучения.

Тип развертывания модели

Несколько способов развертывания модели можно разделить на следующие категории:

1. Разовые

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

2. Пакет

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

3. В режиме реального времени

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

  • Многие системы используют гибрид обоих — в реальном времени и пакетного развертывания.

Что такое Фласк?

  • Flask — это микровеб-фреймворк, написанный на Python. Он классифицируется как микрофреймворк, поскольку не требует особых инструментов или библиотек.
  • Он не имеет уровня абстракции базы данных, проверки формы или каких-либо других компонентов, где существующие сторонние библиотеки предоставляют общие функции.
  • Flask зависит от механизма шаблонов Jinja и набора инструментов WSGI Werkzeug.

Что такое Нгрок?

  • Ngrok — это бесплатная программа, которая открывает процесс, запущенный на вашем локальном хосте, в общедоступный Интернет.
  • Ngrok — это удобный инструмент, который создает безопасный общедоступный доступный туннель URL для приложения, работающего на localhost.
  • Вы можете поделиться URL-адресом туннеля, чтобы другие могли просматривать вашу работу, или вы можете сделать его общедоступным доступным.
  • Для этого мы будем использовать библиотеку pyngrok. pyngrok — это оболочка Python для ngrok, которая делает ngrok доступным через удобный Python API.

Установка Flask и Pyngrok

  • Библиотеки Flask и pyngrok можно установить просто с помощью пакета pip:
!pip install -U Flask
!pip install pyngrok
  • Мы также импортируем необходимые пакеты для развертывания.
import threading
from pyngrok import ngrok
from PIL import Image
from flask import Flask, redirect, url_for, request, render_template, jsonify

Развертывание модели с помощью Flask

  • Создание среды разработки:
os.environ["FLASK_ENV"] = "development"
  • Инициализируйтевеб-приложение flask и установите номер порта:
app = Flask(__name__)
port = 5000
  • Установка токена авторизации позволяет нам открывать несколько туннелей одновременно:
ngrok.set_auth_token("22m1k05FJ4yE6oKKMz1aUShlBvX_6CiGv4wP95U7pvddczArE")
  • Откройте туннель ngrok для HTTP-сервера:
public_url = ngrok.connect(port).public_url
print(" * ngrok tunnel \"{}\" -> \"http://127.0.0.1:{}\"".format(public_url, port))
  • Вы найдете токен аутентификации ngrok, который можно установить в качестве базового URL.

P.S. Каждый пользователь получает собственный токен ngrok. Пожалуйста, создайте свой собственный токен на веб-сайте ngrok, войдя в систему.

  • Обновите все базовые URL-адреса, чтобы использовать общедоступный URL-адрес ngrok:
app.config["BASE_URL"] = public_url
  • Загрузите предварительно обученную модель Keras:
model = load_model('/content/drive/MyDrive/AI Deployment materials /Deploy Face mask Detection/3. Model Building/Mask_detection_model(3).h5')
  • Визуализация нашего основного шаблона:

Мы уже создали страницу «index1.html», куда мы можем загрузить наше изображение и отправить на него нашу модель для прогнозов.

@app.route('/')
def index():
____# Main page
____return render_template('index1.html')
  • Получите файл из почтового запроса, предварительно обработайте файл и сделайте прогноз с помощью модели.
@app.route('/predict', methods=['POST'])
def upload():
____if request.method == 'POST':
____# Get the file from post request
____f = request.files['file']
____# Opening Uploaded File
____image = Image.open(request.files['file'].stream)
____# Resizing Image Based On Model Requiremen
____timage = image.resize((224,224))
____# Changing Image to Array of p
____ixelsimage = img_to_array(image)
____# Preprocessing Image
____image = preprocess_input(image)
____image=np.expand_dims(image, axis=0)
____# Predicting on Test Image
____predictions=model.predict(image)     
____predictions=predictions.reshape(-1)
____threshold=0.5
____y_pred=np.where(predictions >= threshold, 'Non Mask','Mask')
____result = y_pred[0]
____print('[PREDICTED CLASSES]: {}'.format(y_pred))
____print('[RESULT]: {}'.format(result))
____return result
  • Мы будем использовать другой поток для запуска нашего фляжного сервера.
  • Threading позволяет выполнять более одной работы практически одновременно в одной и той же рабочей среде. Это один из методов параллельного программирования.
  • Thread предоставляет нам удобство, сокращая время загрузки.
  • Запустите сервер Flask в новом потоке.
threading.Thread(target=app.run, kwargs={"use_reloader": False}).start()
  • Перейдите по URL-адресу, указанному в выходных данных. Для нашей системы URL задается как:
ngrok tunnel "http://177b-35-196-84-151.ngrok.io" -> "http://127.0.0.1:5000"
  • При переходе по URL мы видим следующую страницу:

  • Теперь вы можете выбрать любое изображение (с маской/без маски) и делать прогнозы:

  • Ура! Наконец-то мы развернули нашу модель!

Что дальше?

В следующей статье этой серии мы увидим, как мы можем развернуть нашу модель на сервере с помощью GCP.

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

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