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

Развертывание моделей ML с использованием колбы

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

Автор оригинала: Pankaj Kumar.

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

Что такое развертывание?

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

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

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

Что такое колба?

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

Еще одной важной особенностью Flask является то, что он не навязывает никаких дополнительных зависимостей, предоставляя разработчику выбор в отношении того, какие библиотеки использовать. Для установки/обновления flash вы можете использовать команду pip в своем терминале:

pip install -U Flask

Примечание: Пользователи Linux могут захотеть использовать pip3 для версии python 3.

Шаги по развертыванию моделей ML с помощью Flask

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

1. Подготовка вашей модели

Теперь, когда у вас установлена колба, следующая на очереди-модель, которую нам нужно развернуть. Если вы разработали свою модель в ноутбуке/IDE, сейчас самое время сохранить обученную модель. Следует отметить, что модель не будет обучаться во время развертывания. Мы будем использовать многослойный персептрон для классификации изображений набора данных MNIST . Для сохранения модели тензорного потока мы используем следующее:

model.save('/my_model.h5')

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

Модель Работает

2. Разработка нашего рабочего процесса

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

  1. Пользователь загружает изображение на сервер с помощью запроса HTTP POST .
  2. Изображение будет получено и сохранено на сервере. Мы также можем проверить изображение на наличие некоторых потенциальных угроз безопасности.
  3. Сохраненное изображение прошло через модель.
  4. Результаты модели возвращаются пользователю в виде текста.

Вот блок – схема, обобщающая это:

Рабочий процесс

Примечание: Это чрезмерно упрощенная модель. Реальные модели гораздо сложнее проектировать и реализовывать, и они включают в себя создание сложных конвейеров данных, которые выходят за рамки данной статьи.

3. Кодирование API колбы

Мы создаем файл python app.py это запускает наше приложение.

Инструкции по импорту:

# os to handle saving/deleting images
import os

# Import the required functions from flask
from flask import Flask, request, flash, redirect, send_file

# TensorFlow for loading the model
import tensorflow as tf

Создание нашего приложения

# Creates a flask app with a name same as the file name
# we can refer to this flask app as 'app' in our program
app = Flask(__name__)

Настройка папки загрузки изображений

# uploaded images are stored in 'images' folder
UPLOAD_FOLDER = './images'

# Setting a environment variable
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

Загрузка модели

# Assuming the model is saved in folder models as model_1.h5
model = tf.keras.models.load_model('models/model_1.h5')

REST API для нашего приложения

Наше приложение получает и отправляет данные пользователю. Для этого нам нужно определить определенный набор правил. Декоратор приложения привязывает функцию upload_file() к нашему приложению. Функция перенаправляется на базовый URL-адрес( указанный как”/”), и единственным разрешенным методом является POST, т. Е. Пользователь может загрузить на базовый URL-адрес. upload_file() заботится о многих условиях загрузки файлов – от отсутствия файла до правильного файла.

@app.route('/', methods=['POST'])
def upload_file():
    
    if 'file' not in request.files:
        flash('No file part')
        return redirect(request.url)
    file = request.files['file']
    if file.filename == '':
        flash('No selected file')
        return redirect(request.url)
    if file:
        filename = secure_filename(file.filename)
        filename = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        file.save(filename)

        # Read from file and convert to tensor
        img_tensor = tf.io.decode_image(filename)
        results = model.predict(img_tensor)
        
        # Delete the file
        os.remove(filename)
        return "\n[+] The number is : "+str(results)+"\n\n"

Примечание: Эта часть приложения запускается снова и снова для каждого запроса клиента, в отличие от других частей кода.

4. Запустите приложение

# If this file is run as standalone file
# The app will run in debug mode
if __name__ == '__main__':
    app.run(debug=True)

Запустите и запустите сервер

# If your file server name is app.py
python3 app.py
Вывод на сервер

Обратите внимание, что сервер работает на http://127.0.0.1:5000/который является конечной точкой нашего приложения. Теперь, когда наше приложение работает на вашем локальном компьютере, мы можем получить доступ к приложению, просто используя URL-адрес.

Загрузка изображения

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

curl -X POST -H "Content-Type: multipart/form-data" -F "file=@"  http://127.0.0.1:5000/

Замените <расположение файла> на расположение изображения.

Срок Вывода

Вывод

Мы видим, что мы можем легко развернуть нашу модель машинного обучения на нашей локальной машине, чтобы пользователи, подключенные к вашей сети, могли использовать ваши службы приложений. Чтобы служба приложений работала 24×7, приложение должно работать на вашем компьютере круглосуточно. В этом случае вы можете запустить свой код на таких серверах, как Heroku, DigitalOcean, Azure и т. Д. Мы рассмотрим развертывание кода на сервере в следующей статье. Оставайтесь с нами.