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

В этой статье я буду обсуждать развертывание и размещение любой модели машинного обучения внутри контейнера Docker. Он будет включать в себя пошаговое руководство по подготовке вашей модели машинного обучения к развертыванию на любом устройстве и любой платформе, что представляет собой огромный скачок в конвейере машинного обучения.К сожалению, я не буду обсуждать как или какую модель построить перед развертыванием, поскольку обе эти темы выходят за рамки этой статьи. Однако, если вы хотите реализовать указанные темы, Мастерство машинного обучения будет хорошим началом.

Докер, подождите, почему?

Docker — это служба, которая позволяет содержать базы данных, API, модели или практически все что угодно внутри контейнера и развертывать где угодно с помощью всего нескольких строк кода.

Docker быстрый, надежный и легкий. Это позволяет быстро и легко получить доступ к любому изображению внутри него с минимальной вычислительной памятью. Он содержит все необходимые зависимости для запуска размещенного на нем образа (отсюда и слово «контейнер»). Таким образом, развертывание и обновление образов внутри контейнера выполняется надежно и без усилий.

Docker и ваша модель машинного обучения

Теперь, когда мы знаем о важности и необходимости Docker, пришло время начать с хостинга и развертывания. Чтобы это произошло, нам нужно выполнить следующие простые шаги:

  1. Обучайте, подгоняйте и сохраняйте модель машинного обучения.
  2. Создайте API для отправки и получения данных.
  3. Создайте файл Docker.
  4. Разверните приложение.

Обучайте, подгоняйте и сохраняйте свою модель машинного обучения.

Существует множество способов сохранить и загрузить модели машинного обучения в зависимости от используемой библиотеки/фреймворка обучения. В основном, сохранение вашей модели включает в себя:

  • Построение вашей модели.
  • Сохранение копий ваших контрольных точек во время обучения.
  • Сохранение самой модели.

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

Создайте API для отправки и получения данных

Теперь давайте создадим API для отправки данных в нашу модель машинного обучения. В нашей демонстрации я буду использовать Flask; библиотека Python, специально созданная для веб-запросов. Я выбрал эту библиотеку, так как она тоже написана на python — языке, на котором построено большинство моделей машинного обучения; однако вы можете использовать любой знакомый вам API для выполнения этого кода.

Чтобы мы создали API для модели, используйте этот код:

Вы найдете описание того, что делает каждая строка кода, в комментариях к фрагменту кода.

Создайте файл Docker с необходимым контейнером

Теперь мы создадим основную часть процесса. Функция, которая позволяет нам размещать нашу модель в контейнере Docker: файл Docker. Мы не будем, хотя и возможно, физически добавлять модель в наш образ Docker, поскольку нам нужно только разместить ее. Как правило, хорошей практикой является создание одного изображения для каждой цели.

Чтобы создать файл Docker, следуйте следующему шаблону:

Давайте посмотрим, что делает код шаг за шагом:

  1. Строка 1: импортирует основной образ Python Docker. Этот образ взят из Docker hub, официального общедоступного репозитория.
FROM python:3.7-slim-buster

2.Строка 3: добавляет файл требований для правильного развертывания содержащейся в нем модели. Файл требований содержит имена всех зависимостей, используемых моделью.

COPY requirements.txt /requirements.txt
-- Sample Requirements.txt -- 
tensorflow
flask
...

3.Строка 5: устанавливает необходимые зависимости, перечисленные в файле требований внутри контейнера.

RUN pip install -r requirements.txt

4. Строка 7: копирует исходный код из текущего каталога в контейнер. Код может включать в себя созданный flask API, модели машинного обучения и т. д. и т. д. 

ADD . /app

5. Строка 9: устанавливает рабочий каталог.

WORKDIR /app

6. Строка 11: показывает порт, на котором работает Flask. Короче говоря, он позволяет вам делать запросы к порту, который Flask использует для подключения к модели через API.

EXPOSE 8000

7. Строка 14: запускает Flask.

CMD ["flask", "run", "--host=0.0.0.0", "--port=8000"]

Создание файла Docker Compose (необязательно):

Файл компоновки docker — это файл yaml, который определяет способ создания контейнера. Хотя в этом нет необходимости, рекомендуется создать его, поскольку он упрощает множество функций Docker, а также упрощает чтение параметров.

Чтобы узнать больше о Docker compose, вы можете обратиться к официальной документации.

Создание образа и контейнера Docker

Давайте создадим докер-контейнер. Откройте Docker в вашей операционной системе, это можно сделать следующим образом:

  • Командная строка Windows.

  • Терминал Линукс.

Если вы создали файл Docker Compose, введите следующую команду для создания контейнера:

docker-compose up -d

В противном случае вам понадобятся следующие команды для сборки и запуска контейнера:

docker build -t <insert_image_name> .
docker run --rm --name <insert_container_name> <same_image_name>

Чтобы узнать, успешно ли вы создали контейнер Docker, проверьте приложение Docker Desktop для пользователей Windows или вы можете использовать команду Docker PS из своего терминала.

Развертывание модели

Поздравляем, вы это сделали!

Вы можете попробовать развернуть свою модель на многих движках, включая Amazon ECS и Google Kubernetes Engine.Наконец, вы можете найти модель, которую я использовал для этой демонстрации, здесь.

Краткое содержание

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