Автор: Али Яздизаде Харрази

Что такое машинное обучение CI/CD и почему его следует использовать?

Представленная в 2015 году Jupyter Notebooks — это мощная платформа для специалистов по данным, которая позволяет им быстро тестировать различные подходы к решению задач машинного обучения. Тем не менее, когда дело доходит до контроля исходного кода (он же контроль версий) вашего проекта или совместной работы над проектами с другими специалистами по данным и инженерами по машинному обучению, Jupyter Notebooks больше не является хорошим вариантом.

В идеале нам нужна платформа, которая отслеживает изменения и охватывает все этапы задачи машинного обучения, от предварительной обработки данных до обучения модели и, наконец, развертывания ее в рабочей среде. Вы можете думать об этом как о Документах Google по сравнению с работой в Microsoft Word на своем компьютере (извините, Microsoft! Мы будем использовать ваш Microsoft Edge позже в демонстрации), где вы можете легко сотрудничать с другими и отслеживать изменения и тех, кто их внес.

Здесь мы описываем и показываем сквозную среду машинного обучения, которая использует GitLab в качестве системы контроля версий, а с ее мощным инструментом CI/CD мы будем обучать и развертывать наши модели в SageMaker.

Видеоверсия этого урока

Видеоверсия этого урока доступна на нашем канале YouTube:

Обзор платформы

Технически эта платформа представляет собой репозиторий GitLab с двумя ветками: основной и разрабатываемой. В ветке разработки вы пробуете различные подходы к решению проблемы машинного обучения, а основная ветка предназначена только для развертывания выбранной модели. Вы запускаете запрос на слияние (также известный как запрос на извлечение) из разработки в основную ветку всякий раз, когда хотите увидеть, как работают ваши коды разработки.

GitLab CI создаст образ для обучения в соответствии с вашим файлом Dockerfile и отправит его в ECR. После этого он начнет задание обучения, используя созданное изображение, ваш сценарий обучения и входные данные, расположенные в корзине S3.

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

Если вы и ваш товарищ по команде довольны результатами, вы можете объединить их в основную ветку. Это запустит этап развертывания GitLab CI, который автоматически создаст конечную точку логического вывода в реальном времени, используя последнее задание обучения.

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

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

Схема корзины S3

Эта платформа ожидает корзину S3 со следующей иерархией:

sample-s3-bucket 
┗ name-of-this-project 
┃ ┗ input data file or files

После запуска первого задания обучения ваша корзина S3 будет выглядеть следующим образом, где report.csv — это полная история описаний ваших заданий обучения вместе с определенными вами показателями производительности. И выходная папка — это место, где SageMaker сохраняет артефакт модели учебных заданий:

sample-s3-bucket 
┗ name-of-this-project 
┃ ┣ input data file or files 
┃ ┣ output/ 
┃ ┗ reports.csv

Диаграмма файлов

Исходный репозиторий состоит из этих файлов:

  • .gitignore
  • README.md
  • .gitlab-ci.yml: Конфигурация CI GitLab
  • Dockerfile: Конфигурация нашего обучения и обслуживает образ Docker.
  • training-job.py: файл Python, который запускает задание обучения.
  • training-script.py: training-job.py использовать этот файл в качестве точки входа для обучающего задания.
  • serve-script.py: простое приложение Flask, которое будет использоваться для конечной точки.
  • deploy.py: файл Python, который по умолчанию создает конечную точку с последним заданием обучения.

Пример проекта, чтобы увидеть, как это работает

Здесь мы использовали игрушечный набор данных, жилье в Бостоне, с алгоритмом RandomForest из пакета scikit-learn для обучения и приложением Flask для прогнозирования в реальном времени. Если вы хотите использовать какой-либо другой пакет для обучения или вывода, включите его установку pip в Dockerfile.

В этом репозитории вы обычно работаете над веткой разработки, и как только вы запустите мерж-реквест (от разработки к основной ветке), будет запущен пайплайн. Этот конвейер состоит из двух шагов, один из которых создает образ докера в соответствии с конфигурацией, которую мы предоставили в Dockerfile, и отправляет его в Elastic Container Registry (ECR).

На втором этапе задание обучения отправляется в SageMaker с использованием полученного изображения, предоставленного нами пути к данным S3 и сценария обучения, который есть в нашем репозитории.

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

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

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

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

Примечание. Не забудьте снять флажок delete source branch when merge request accepted, чтобы не потерять ветку разработки, или, возможно, вы можете установить основную и разрабатываемую ветки как защищенные, чтобы их нельзя было удалить таким образом.

Дальнейшее развитие этой платформы

Эта платформа может быть расширена и персонализирована для вашего конкретного проекта. Например, вы можете добавить промежуточную ветку между основной веткой и веткой разработки, где вы развертываете свою модель в промежуточной среде, чтобы протестировать ее перед переходом в рабочую среду. Другими возможными улучшениями могут быть добавление шага обновления конечной точки перед развертыванием, поэтому вместо создания нового URL-адреса для новой модели вы можете использовать предыдущий URL-адрес, но с обновленной конфигурацией. Здесь мы также не рассмотрели этап обработки данных, но потенциальным решением было бы использование функции управления версиями данных S3, чтобы путь данных S3 к вашим данным не менялся каждый раз, когда вы заменяете новую версию данных или применяете новую предварительную обработку. метод. Дополнительные сведения о версионировании данных S3 см. в официальной документации.

Альтернативные решения той же проблемы

Здесь мы использовали GitLab CI для создания и отправки нашего образа Docker, отправки задания на обучение и развертывания окончательной модели. Если вы предпочитаете другого поставщика услуг Git, вам просто нужно изменить файл .yml и вызовы API в соответствии с этой службой. Аналогичный проект на GitHub можно найти в репозитории Сунг Ким. Эти цели также могут быть достигнуты многими другими способами. Одним из них, более интегрированным с AWS, является Проекты SageMaker, где вы можете настроить соединение между вашим репозиторием, а SageMaker выполнит другие действия. Пока у вас как вариант есть только GitHub, Bitbucket и CodeCommit, но для решения этой проблемы вы можете установить зеркалирование репозитория из GitLab на один из них.

Заключение

В этом посте показано, как настроить сквозной конвейер машинного обучения CI/CD, используя GitLab в качестве системы управления версиями и SageMaker для хранения данных, обучения и прогнозирования в реальном времени. Шаблон проекта доступен в нашем GitLab Repository. Демонстрацию этого проекта и других наших проектов смотрите на нашем YouTube Channel.

Первоначально опубликовано на https://datachef.co 22 октября 2021 г.