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

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

Вы можете опробовать графический интерфейс по адресу: https://arcane-tundra-83748.herokuapp.com/ (запуск дино может занять минуту)

Часть Градио

Я предполагаю, что вы уже немного знакомы с библиотекой Gradio (https://github.com/gradio-app/gradio). Если нет, то это руководство по MNIST - хорошее место для начала. Краткий обзор: Gradio - это библиотека Python, которая позволяет создавать пользовательские интерфейсы на основе вашей модели машинного обучения, указав 3 вещи: функцию Python, компонент ввода и компонент вывода.

Шаг 1. Создайте приложение Gradio

Мы начнем со сценария, который создает интерфейс изображения с перетаскиванием вокруг модели Inception. Создайте новый каталог и скопируйте и вставьте приведенный ниже код в файл Python, который мы назовем app.py:

В этом скрипте происходит загрузка классификатора изображений Inception Net с помощью Tensorflow Keras. Поскольку это модель классификации изображений, мы будем использовать интерфейс ввода Image. Мы выведем словарь меток и соответствующие им оценки достоверности с помощью интерфейса вывода Label. (Чтобы развернуть собственную модель, замените ее своим кодом).

Шаг 2. Напишите свой requirements.txt файл

Нам нужно убедиться, что мы обозначили все библиотеки Python, которые нам понадобятся, как зависимости. Поэтому создайте файл requirements.txt с зависимостями в том же каталоге, что и app.py. В моем случае это:

Заставить версии пакетов работать на Heroku может быть немного сложно, но пакеты и версии, указанные выше, мне подходят. Важно: Heroku ограничивает размер вашей сборки 500 МБ, что может легко заполнить, учитывая размер пакета Tensorflow. Я предлагаю использовать библиотеку Tensorflow 2.0.0, которая меньше, чем некоторые другие версии библиотеки.

Если вы хотите протестировать сценарий локально (что вам следует!), Запустите из Терминала: pip install -r requirements.txt, чтобы установить зависимости, а затем python app.py, чтобы запустить пользовательский интерфейс. На этом этапе вы должны увидеть, что ваш интерфейс работает на localhost:7860 (или другом порту), который, если вы перейдете в браузере, должен отобразить ваш графический интерфейс!

Этот URL доступен локально. Как нам поделиться этим с миром? Gradio поставляется со встроенным параметром share, который может создавать общедоступные URL-адреса, но срок их действия истекает через определенное время. Для создания постоянных публичных ссылок мы будем использовать Heroku!

Часть Heroku

Чтобы развернуть свое веб-приложение на Heroku, вам понадобится учетная запись Heroku, и также очень удобно иметь Heroku CLI. Так что продолжайте и создайте учетную запись Heroku и загрузите CLI, если вы еще этого не сделали.

А теперь перейдем к развертыванию!

Шаг 3. Создайте setup.sh файл

Чтобы правильно развернуть наше приложение на Heroku, нам нужно убедиться, что оно обслуживается по правильному URL-адресу и порту. Следующие ниже команды делают это, поэтому поместите их в файл с именем setup.sh в том же каталоге, что и ваше приложение.

Что здесь происходит, так это то, что мы говорим Gradio обслуживать пользовательский интерфейс на 0.0.0.0 и, в частности, использовать порт, который динамометрический стенд Heroku делает видимым для всего мира.

Шаг 4. Создайте Procfile

Теперь мы собираемся создать файл с именем Procfile (вот и все, у этого файла нет расширения!), Задача которого - сообщить Heroku, какие команды запускать для запуска приложения Gradio. Есть всего две команды: запустить сценарий bash, который мы создали на предыдущем шаге, а затем запустить наше приложение. Итак, наш Heroku Procfile выглядит так:

web: source setup.sh && python app.py

Если вам интересно, почему мы используем source вместо sh, то это потому, что нам нужно, чтобы переменные среды сохранялись после завершения выполнения скрипта.

Шаг 5. Разверните!

На этом этапе ваш каталог должен выглядеть так:

Если вы еще не добавили эти файлы в репозиторий git, сделайте это, выполнив в терминале следующее:

git init
git add -A
git commit -am "commit message here"

Нам просто нужно передать это на динамометрический стенд Heroku. Во-первых, давайте выделим для нашего приложения дино Heroku, выполнив:

heroku create

Heroku автоматически раскрутится и присвоит вашему приложению случайное имя. Теперь мы переносим наши изменения в Heroku:

git push heroku master

Дайте ему несколько минут, чтобы установить все зависимости на вашем динамометрическом стенде. Здесь могут возникнуть проблемы с зависимостями, которые можно решить, прочитав сообщения об ошибках и установив правильную версию каждой библиотеки (см. Мое примечание выше об ограничениях размера Heroku). Если вы не видите никаких ошибок, вы можете открыть свое приложение, выполнив:

heroku ps:scale web=1
heroku open

Эта последняя команда откроет ваш браузер по умолчанию и перенесет вас в приложение. Вы заметите, что веб-адрес - это автоматически сгенерированное имя экземпляра плюс домен Heroku.

Вот и все! У вас есть живая ссылка, которой вы можете поделиться с кем угодно. Пора делать прогнозы :)