Авторы Хирен Рупчандани, Абхинав Джангир и Ашиш Лепча
Теперь, когда наша модель готова к развертыванию, в этой статье будет рассказано, как мы можем локально развернуть ее с помощью flask. Прежде чем продолжить, давайте вспомним основы развертывания.
- Развертывание определяется как процесс, посредством которого вы интегрируетемодель машинного обучения в существующую производственную среду для принятия эффективных бизнес-решений на основе данных.
- Это один из последних шагов в жизненном цикле машинного обучения.
- Цель развертывания вашей модели состоит в том, чтобы вы могли сделать прогнозы из обученной модели машинного обучения доступными для других, будь то пользователи, управление или другие системы.
Необходимые шаги в развертывании модели
Четыре шага к развертыванию машинного обучения включают в себя:
- Разработайте и создайте модель в учебной среде.
- Протестируйте и очистите код, чтобы подготовить его к развертыванию.
- Подготовьтесь к развертыванию контейнера.
- Запланируйте непрерывный мониторинг и техническое обслуживание после развертывания машинного обучения.
Тип развертывания модели
Несколько способов развертывания модели можно разделить на следующие категории:
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.
Подпишитесь на нас, чтобы не пропустить новые статьи, посвященные науке о данных, машинному обучению и искусственному интеллекту.
Кроме того, дайте нам аплодисменты👏, если вы находите эту статью полезной, так как ваша поддержка стимулирует вдохновение и помогает создавать еще больше интересных вещей, подобных этой. .