В этой статье основное внимание уделяется развертыванию модели машинного обучения с использованием контейнеров Docker, Streamlit, Google App Engine. Если вас интересует развертывание вашей модели с помощью Google Cloud Functions, ознакомьтесь с моей статьей здесь.

Если вы хотите сразу перейти к коду, посетите здесь.

Google App Engine

Google Cloud Platform очень удобна для пользователя. Развернуть приложение с помощью App Engine так же просто, как нажать кнопку. Для всего этого достаточно одной командной строки развернуть приложение gcloud. Он масштабируется автоматически, и вы платите только за то, что используете.

Стримлит

Создание веб-приложений с помощью Streamlit легко и не требует большого количества кода фреймворка веб-разработки. С помощью всего нескольких строк кода вы можете разработать приложение за считанные минуты. В этой статье наш код вывода модели будет взаимодействовать со Streamit как с веб-приложением.

Докер

Docker помогает обернуть ваше приложение и все его зависимости внутри контейнера, который затем можно запустить в любой среде. Мы будем использовать Docker для контейнеризации нашего приложения и его развертывания в Google App Engine.

Вот некоторые предварительные условия, которые необходимо учитывать перед тем, как начать:

  • Предположим, что у вас уже есть аккаунт GCP. Если у вас его нет, зарегистрируйтесь здесь, чтобы получить кредит в размере 300 долларов США.
  • Установите google cloud SDK, чтобы взаимодействовать с google cloud из вашего локального компьютера.
  • Установите Docker здесь.
  • Установите Streamlit отсюда.
  • Обученная модель машинного обучения.

Для краткости я сгенерировал модель ML, которая принимает изображение в качестве входных данных и выводит заголовок для этого изображения. Аналогичный код для обучения модели подписей к изображениям можно найти здесь.

Шаг 1: Запустите приложение Streamlit локально

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

Давайте посмотрим на app.py.

Мы использовали библиотеку streamlit для создания заголовков, заголовка, загрузки изображения в приложение и т. д. При необходимости вы можете добавить дополнительные виджеты.

Мы загрузили файл токенизатора и добавили код вывода модели в app.py. Запустите streamlit run app.py со своего терминала, после чего веб-приложение Streamlit откроется в вашем браузере.

Шаг 2. Докеризируйте приложение Streamlit и протестируйте его локально

Нам нужен Dockerfile, содержащий инструкции по сборке контейнера. Давайте посмотрим на наш Dockerfile.

Инструкции довольно понятны. Далее нам нужно собрать образ докера из файла Dockerfile. Запустите docker build -f Dockerfile -t [docker_image_name] . с вашего терминала. Этот процесс может занять некоторое время, он запускает каждую инструкцию построчно из Dockerfile.

После завершения сборки вы можете запустить образ Docker с помощью этой команды docker run -p 9999:8080 -ti [docker_image_name]

Этакоманда запускает образ Docker и сопоставляет порт 9999 на вашем локальном компьютере с портом контейнера 8080. Это отобразит веб-приложение Streamlit в вашем браузере по адресу http://localhost:9999/ из контейнера ( работающий экземпляр образа).

В качестве примечания вы также можете просмотреть список запущенных контейнеров Docker с помощью этой команды docker ps -a

Если до этого шага все работает без каких-либо ошибок на вашем локальном компьютере, мы можем перейти к последнему шагу, который заключается в развертывании нашего приложения в App Engine.

Шаг 3. Разверните приложение Streamlit в Google App Engine.

Нам нужен файл app.yaml, который содержит параметры конфигурации для движка приложения. Инструкции можно найти здесь и здесь.

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

Вы можете развернуть приложение с помощью команды gcloud app deploy.

Эта команда отправляет образ докера в облако, сохраняет его в реестре контейнеров Google и развертывает контейнер в ядре приложения. Это может занять некоторое время. Теперь вы можете увидеть приложение на целевом URL.

Каждый раз, когда вы запускаете развертывание приложения gcloud, создается новая версия, как вы можете видеть здесь. Не забудьте ПРЕКРАТИТЬ обслуживание, как только вы закончите играть с приложением.

Использованная литература -

Код виджетов приложения Streamlit вдохновлен видео Daniel Bourke на YouTube — https://www.youtube.com/watch?v=fw6NMQrYc6w&t=3867s

Я все еще изучаю и изучаю стратегии развертывания. Не стесняйтесь вливать свои предложения в поле для комментариев.