В этой статье мы проведем вас через процесс развертывания Flask API и приложения Streamlit локально и на платформе Heroku. К концу этого руководства у вас будет готовая и работающая модель машинного обучения, доступная через удобную панель инструментов Streamlit.

Обзор модели машинного обучения:

Прежде чем мы приступим к развертыванию, давайте уделим немного времени тому, чтобы понять модель машинного обучения, с которой мы будем работать. Наша модель была обучена на данных Stack Overflow и предназначена для прогнозирования тегов для вопросов. Чтобы достичь этого, мы использовали countVectorizer для извлечения признаков и использовали метод классификатора «один против остальных» для прогнозирования нескольких тегов для каждого вопроса. Обученная модель была сохранена с помощью joblib.

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

Предпосылки:

Прежде чем мы начнем, убедитесь, что у вас есть следующее:

  1. Создайте основную папку проекта.
  2. Подключить необходимые файлы с https://github.com/sbendimerad/ml_deployment:
  • Предварительно обученная модель «OneVs_logReg.joblib», которую я уже сохранил.
  • Файлы «topProcfiletags», «» и «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, что упрощает взаимодействие пользователей с вашими прогнозами.

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