Быстрая и простая сборка контейнера Docker с простой моделью машинного обучения.

Идея этой статьи состоит в том, чтобы быстро и легко построить контейнер Docker с помощью простой модели машинного обучения и запустить его. Перед прочтением этой статьи обязательно прочтите Зачем использовать Docker для машинного обучения и Быстрая установка и первое использование Docker.

Чтобы приступить к созданию контейнера Docker для модели машинного обучения, давайте рассмотрим три файла: Dockerfile, train.py, inference.py.

Вы можете найти все файлы на GitHub.

train.py - это сценарий Python, который принимает и нормализует данные ЭЭГ в файле csv (train.csv) и обучает две модели для классификации данных (с помощью scikit-learn). Скрипт сохраняет две модели: линейный дискриминантный анализ (clf_lda) и многослойный перцептрон нейронных сетей (clf_NN).

inference.py будет вызываться для выполнения пакетного вывода путем загрузки двух ранее созданных моделей. Приложение нормализует новые данные ЭЭГ, поступающие из файла csv (test.csv), выполнит логический вывод для набора данных и распечатает точность классификации и прогнозы.

Давайте создадим простой Dockerfile с изображением jupyter / scipy-notebook в качестве нашего базового образа. Нам необходимо установить joblib, чтобы обеспечить сериализацию и десериализацию нашей обученной модели. Копируем в изображение файлы train.csv, test.csv, train.py и inference.py. Затем мы запускаем train.py, который подбирает и сериализует модели машинного обучения как часть нашего процесса построения образа, что дает несколько преимуществ, таких как возможность отладки в начале процесса, использование Docker Image ID для отслеживания или использования разных версий.

Чтобы создать образ, мы запускаем в нашем терминале следующую команду:

docker build -t docker-ml-model -f Dockerfile .

Результат следующий:

Пришло время выполнить вывод на основе новых данных (test.csv):

docker run docker-ml-model python3 inference.py

Результат следующий:

Мы можем сделать несколько вещей, которые могут улучшить наш опыт контейнеризации. Например, мы можем связать каталог хоста в контейнере с помощью WORKDIR в Dockerfile:

В inference.py мы можем решить, например, сохранить файл output.csv с данными X_test в нем:

Когда вы его соберете и запустите, вы увидите файл output.csv в / mydata:

Мы также можем добавить инструкцию VOLUME в файл Docker, в результате чего будет создан образ, который создаст новую точку монтирования:

С указанным нами именем инструкция VOLUME создает точку монтирования, которая помечается как содержащая внешне смонтированный том с собственного хоста или других контейнеров, в которых мы находим данные, которые хотим обработать.

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

Возьмем еще один пример с новым Dockerfile:

Нам нужно добавить переменные среды в train.py:

и inference.py:

Что дальше ?

Цель заключалась в том, чтобы выполнить быстрые и простые шаги по созданию контейнера Docker с простой моделью машинного обучения. Для сборки достаточно выполнить docker build -t my-docker-image.

С этого шага мы можем начать развертывание наших моделей, которое будет намного проще и избавит от страха публиковать и масштабировать вашу модель машинного обучения. Следующим шагом является создание рабочего процесса с помощью инструмента CI / CD (непрерывная интеграция / непрерывная доставка), такого как Jenkins. Благодаря такому подходу станет возможным создавать и обслуживать док-контейнер в любом месте и предоставлять REST API, чтобы внешние заинтересованные стороны могли его использовать. Если вы тренируете модель глубокого обучения, которая требует высоких вычислений, вы можете переместить свои контейнеры на высокопроизводительные вычислительные серверы или любую платформу по вашему выбору, например, локальное, частное или общедоступное облако. Идея состоит в том, что вы можете масштабировать свою модель, а также создать устойчивое развертывание, поскольку вы можете масштабировать контейнер по регионам / зонам доступности.

Надеюсь, вы видите, насколько просты и гибки контейнеры. Поместив свое приложение машинного / глубокого обучения в контейнер, вы можете сделать его видимым для всего мира. Следующим шагом будет его развертывание в облаке и предоставление доступа к нему. В определенные моменты времени вам потребуется организовать, отслеживать и масштабировать свои контейнеры для обслуживания миллионов пользователей с помощью таких технологий, как Red Hat OpenShift, дистрибутив Kubernetes.

Источники

Https://docs.docker.com/engine/reference/builder/

Https://mlinproduction.com/docker-for-ml-part-3/

Https://theaisummer.com/docker/