В этой статье мы проведем вас через процесс развертывания Flask API и приложения Streamlit локально и на платформе Heroku. К концу этого руководства у вас будет готовая и работающая модель машинного обучения, доступная через удобную панель инструментов Streamlit.
Обзор модели машинного обучения:
Прежде чем мы приступим к развертыванию, давайте уделим немного времени тому, чтобы понять модель машинного обучения, с которой мы будем работать. Наша модель была обучена на данных Stack Overflow и предназначена для прогнозирования тегов для вопросов. Чтобы достичь этого, мы использовали countVectorizer для извлечения признаков и использовали метод классификатора «один против остальных» для прогнозирования нескольких тегов для каждого вопроса. Обученная модель была сохранена с помощью joblib.
В этом руководстве основное внимание уделяется процессу развертывания, а не тонкостям модели машинного обучения. Независимо от того, решите ли вы использовать свою собственную предварительно обученную модель или следовать предоставленной модели, цель состоит в том, чтобы получить представление о развертывании моделей машинного обучения.
Предпосылки:
Прежде чем мы начнем, убедитесь, что у вас есть следующее:
- Создайте основную папку проекта.
- Подключить необходимые файлы с https://github.com/sbendimerad/ml_deployment:
- Предварительно обученная модель «OneVs_logReg.joblib», которую я уже сохранил.
- Файлы «top
Procfile
tags», «» и «preprocessing.py». Эти файлы специфичны для моего варианта использования, вы можете использовать свои собственные файлы, если у вас есть конкретная задача ML. - Скрипты «flask_app.py» и «viz_app.py» для flask и streamlit.
3. Используйте файл «requirements.txt» для установки необходимых пакетов в вашей среде.
Локальное развертывание:
Настройка API фляги:
- Откройте свой терминал или Anaconda Prompt и перейдите в каталог, где находится ваш скрипт приложения Flask (
flask_app.py
). - Определите необходимые маршруты в скрипте Flask API (скопируйте/вставьте код):
- Создайте корневой API, который печатает «Hello World» только для теста.
- Реализуйте маршрут GET, который обрабатывает предварительную обработку текста, извлечение функций и прогнозирование тегов на основе предварительно обученной модели.
Тестирование Flask API:
- Запустите приложение Flask, выполнив в терминале следующую команду:
python flask_app.py
- Откройте веб-браузер и введите URL-адрес, отображаемый в терминале (например,
http://localhost:5000/
). Вы должны увидеть сообщение «Hello World!» отображается, подтверждая, что корневой маршрут работает правильно. - Чтобы протестировать конечную точку API, которая предсказывает теги для текста, добавьте
/api/text=
, а затем нужный текст к URL-адресу в браузере. Например:
http://localhost:5000/api/text="how to print text in python and java"
- Нажмите Enter или Go в браузере. API Flask обработает текст, извлечет функции и вернет ответ JSON с введенным текстом и предсказанными тегами.
Настройка Стримлита:
- Откройте файл
viz_app.py
в каталоге вашего проекта и определите пользовательский интерфейс для вашего приложения Streamlit. - Код должен включать поле ввода, в которое пользователи могут вводить текст, и кнопку для запуска прогноза (скопируйте/вставьте код).
- Приложение Streamlit отправит запрос к API Flask с введенным текстом и отобразит предсказанные теги в приложении.
Тестирование приложения Streamlit:
- В терминале перейдите в каталог, где находится ваш скрипт приложения Streamlit (
viz_app.py
). - В приложении Streamlit (
viz_app.py
) измените код, чтобы он выполнял вызовы API к Flask API, развернутому локально. Обновите конечную точку API, чтобы она соответствовала URL-адресу вашего развернутого API Flask (например,http://localhost:5000/
). - Запустите приложение Streamlit с помощью следующей команды:
streamlit run viz_app.py
- Панель инструментов Streamlit загрузится в вашем браузере. Введите текст в поле ввода и нажмите Enter. Приложение отправит запрос к API Flask, получит ответ JSON и отобразит предсказанные теги.
Развертывание Героку:
Развертывание Flask API:
- Создайте файл с именем
setup.sh
в корневом каталоге вашего проекта. Файлsetup.sh
должен включать все необходимые команды установки, такие как установка зависимостей или установка переменных среды.
mkdir -p ~/.streamlit echo "[server] headless = true port = $PORT enableCORS = false " > ~/.streamlit/config.tomlbashCopy code
- Создайте файл с именем
Procfile
(без расширения файла).Procfile
должен содержать команду для запуска вашего Flask API:
web: gunicorn flask_app:app
- Зафиксируйте и отправьте изменения, включая файлы
setup.sh
иProcfile
, в свой репозиторий Git. - Подключитесь к своей учетной записи Heroku и создайте новое приложение для своего Flask API.
- Следуйте процессу развертывания Heroku, который обычно включает в себя привязку репозитория Git к приложению Heroku и запуск развертывания.
Ссылаясь на Flask API от Streamlit:
- В локальном приложении Streamlit (
viz_app.py
) измените код, чтобы он выполнял вызовы API к Flask API, развернутому на Heroku. Обновите конечную точку API, чтобы она соответствовала URL-адресу вашего развернутого API Flask (например,https://your-flask-api.herokuapp.com
). - Протестируйте приложение Streamlit локально, чтобы убедиться, что оно успешно взаимодействует с Flask API, развернутым на Heroku.
Развертывание приложения Streamlit:
- Измените существующий файл
Procfile
в каталоге вашего приложения Streamlit, включив в него все необходимые конфигурации или этапы настройки, характерные для вашего приложения Streamlit.
web: gunicorn flask_app:app streamlit: sh setup.sh && streamlit run viz_app.py
- Добавьте обновленные
Procfile
,setup.sh
в свой репозиторий Git и отправьте изменения. - Подключитесь к своей учетной записи Heroku и перейдите к существующему приложению Heroku, в котором вы хотите развернуть приложение Streamlit.
- На панели инструментов Heroku перейдите на вкладку «Развертывание» и выберите метод развертывания. Выберите правильный репозиторий и ветку.
- Запустите процесс развертывания. Heroku обнаружит изменения в вашем репозитории и повторно развернет приложение, используя обновленные файлы.
Вывод: Поздравляем! Вы успешно развернули Flask API и приложение Streamlit локально и на Heroku. Ваша модель машинного обучения теперь доступна через удобную панель инструментов Streamlit, что упрощает взаимодействие пользователей с вашими прогнозами.
Не стесняйтесь настраивать и улучшать свои приложения, чтобы они соответствовали вашим конкретным требованиям проекта и потребностям пользователей.