Существует множество онлайн-курсов по машинному обучению, но очень немногие преодолевают разрыв между анализом и развертыванием. Совершенная модель машинного обучения, которая на 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. Если вы заархивируете каталог верхнего уровня, ваша модель выйдет из строя.