Автор оригинала: 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. Разработка нашего рабочего процесса
Теперь, когда у нас есть обученная модель, мы можем спроектировать, как наш сервер должен обрабатывать запросы пользователей. Вот предлагаемая модель:
- Пользователь загружает изображение на сервер с помощью запроса HTTP POST .
- Изображение будет получено и сохранено на сервере. Мы также можем проверить изображение на наличие некоторых потенциальных угроз безопасности.
- Сохраненное изображение прошло через модель.
- Результаты модели возвращаются пользователю в виде текста.
Вот блок – схема, обобщающая это:
Примечание: Это чрезмерно упрощенная модель. Реальные модели гораздо сложнее проектировать и реализовывать, и они включают в себя создание сложных конвейеров данных, которые выходят за рамки данной статьи.
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 и т. Д. Мы рассмотрим развертывание кода на сервере в следующей статье. Оставайтесь с нами.