Существует множество онлайн-курсов по машинному обучению, но очень немногие преодолевают разрыв между анализом и развертыванием. Совершенная модель машинного обучения, которая на 100% точна, бесполезна, если ее нельзя развернуть. Часто при попытке развернуть модель вы сталкиваетесь с проблемой установки зависимостей на компьютер пользователя. После того, как вы пройдете через управление и ИТ-безопасность, могут пройти месяцы, прежде чем вы сможете внедрить модель в производство. Здесь на помощь приходят контейнеры Docker.

Контейнеры Docker - это легкие автономные виртуальные среды, которые можно развернуть в нескольких средах за секунды.

Почему контейнеризация?

  • Улучшает масштабируемость
  • Приложения развертываются быстро, надежно и единообразно в средах развертывания
  • Повышенная продуктивность разработчика

Я рассмотрю краткий пример того, как контейнеры докеров можно использовать для развертывания модели машинного обучения в AWS Elastic Beanstalk всего за несколько минут. Весь исходный код этого проекта будет находиться на моем Github:

Https://github.com/jgarcia1931/Iris_Flower_Dataset_Deployment

Пример модели цветка ириса:

Набор данных Iris Flower Kaggle - это популярный набор данных машинного обучения для классификации видов цветов ириса с использованием некоторых свойств цветов. После обучения и сохранения модели в файле pickle ее можно поместить в контейнер и развернуть на веб-сайте за считанные минуты. Я использовал Flask и Bootstrap для создания приложения. После разработки веб-приложения необходимыми файлами для контейнеризации приложения будут Dockerfile и requirements.txt.

Настройка Dockerfile:

FROM continuumio/anaconda3:4.4.0
COPY ./flask_demo /var/www/python/
EXPOSE 8000
WORKDIR /var/www/python/
RUN pip install -r requirements.txt
CMD python app.py
  • FROM - базовый образ контейнера
  • КОПИРОВАТЬ - копирует файлы с главного компьютера в контейнер.
  • EXPOSE - Выставляет порт из контейнера.
  • WORKDIR - устанавливает рабочий каталог для контейнера
  • RUN - запускает pip install и устанавливает все модули в файле requirements.txt.
  • CMD - запускает приложение flask

После создания Dockerfile обязательно удалите расширение файла, иначе он не будет работать.

Файл requirements.txt содержит все зависимости, необходимые приложению. Для этого приложения зависимости будут следующими:

flask
Flask-Bootstrap

После создания файла Dockerfile и requirements.txt файловая структура должна выглядеть, как в каталоге ниже. Все файлы находятся у меня на Github.

--Dockerfile
--flask_demo           #flask app directory
  --static             #static file directory
  --templates          #templates directory
  --pickel_model.pkl   #KNN pickled model
  --requirements.txt   #requirements file
  --app.py             #flask application

Тестирование контейнера на локальной машине

Прежде чем продолжить, убедитесь, что у вас установлен и запущен Docker.

В окне терминала перейдите в каталог, в котором существует файл Dockerfile. Сначала вы создадите контейнер Docker, выполнив команду docker ниже. Это займет несколько минут.

docker build -t iris_flower_app .

После успешной сборки вы выполните команду docker run и укажите порт, который вы будете использовать.

docker run -p 8000:8000 iris_flower_app

После успешного запуска вы сможете перейти к порту 8000 localhost и увидеть веб-приложение. Для своего приложения я указал локальный хост для работы на 0.0.0.0:8000

Развертывание AWS Elastic Beanstalk

Для начала вам нужно заархивировать Dockerfile и папку flask_demo. Если вы заархивируете каталог верхнего уровня, ваша модель выйдет из строя.

Шаг 1. Перейдите на страницу AWS Elastic Beanstalk.

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

Шаг 3. Выберите уровень среды

Шаг 4. Выберите Docker в качестве предварительно настроенной платформы, загрузите zip-файл и создайте среду.

Шаг 5: Процесс развертывания займет несколько минут, и вы увидите следующее окно. Затем вы можете перейти к своему веб-приложению по предоставленному URL-адресу.