Введение

MLOPs в течение многих лет находится на подъеме, и компании сталкиваются с проблемами, связанными с созданием конвейеров и автоматизации для жизненного цикла машинного обучения. Фокусными точками являются создание моделей, развертывание вывода и оркестровка, особенно для инженеров машинного обучения, как эффективно автоматизировать эти элементы и создавать ценные продукты с помощью алгоритмов машинного обучения и глубокого обучения, а не только развертывания хороших моделей сейчас. [1]

MLOps применяется ко всему жизненному циклу — от интеграции с созданием модели (жизненный цикл разработки программного обеспечения, непрерывная интеграция/непрерывная поставка), оркестровки и развертывания до работоспособности, диагностики, управления и бизнес-показателей.

Общая архитектура системы MLOps будет включать платформы обработки данных, на которых создаются модели и аналитические механизмы для выполнения вычислений, а инструмент MLOps организует перемещение моделей машинного обучения, данных и результатов между системами. В контексте MLOps нам может потребоваться некоторое вмешательство в платформы или инструменты для управления конвейерами или рабочими процессами, если мы создадим систему CI/CD в MLOps, в чем могут помочь некоторые управляемые сервисы, такие как Amazon SageMaker. MLOps в основном охватывают следующие области:

  • Развертывание и автоматизация
  • Воспроизводимость моделей и прогнозов
  • Диагностика
  • Управление и соблюдение нормативных требований
  • Масштабируемость
  • Сотрудничество
  • Бизнес использует

Amazon SageMaker — это платформа машинного обучения на базе AWS, которая позволяет разработчикам создавать модели машинного обучения, обучать данные, развертывать точку вывода в общедоступном облаке. Он состоит из различных сервисов, таких как Ground Truth для создания наборов обучающих данных и управления ими, SageMaker Notebooks, который представляет собой записные книжки одним щелчком мыши с EC2 (Elastic Compute), и SageMaker Studio, который представляет собой интегрированную среду разработки (IDE) для машинного обучения и т. д. . SageMaker использует вычислительные ресурсы EC2 для обучения модели машинного обучения и выполнения развернутого вывода. Даже без SageMaker NoteBooks есть привязки для ряда языков, включая Ruby, Python, Java, Node.js, для управления набором рабочих процессов с помощью кода. [2]

Эта статья также помогает подробно разобраться в рабочих процессах машинного обучения.



Amazon SageMaker — это великолепный инструмент для охвата двух вышеупомянутых областей, в которых особенно нуждаются MLOps: развертывание и автоматизация, а также воспроизводимость моделей и прогнозов. MLOps нуждается в обширных работах и ​​взаимосвязях сервисов (например, давайте подумаем об отдельных микросервисах для предоставления каждого рабочего процесса на этом рисунке) в виде локальной или облачной архитектуры для автоматизации сборки, обучения и развертывания машинного обучения. модель.

Однако я думаю, что мы должны поддерживать согласованность и управляемость нашей инфраструктуры для жизненного цикла MLOps, чтобы эксплуатировать инфраструктуру надлежащим образом, особенно когда наша инфраструктура растет и расширяется. Это мотивация для принятия такого инструмента, как terraform, для автоматизации выделения ресурсов и управления жизненным циклом инфраструктуры с помощью кода. [3]

Terraform — это программный инструмент инфраструктура как код с открытым исходным кодом, созданный HashiCorp. Он позволяет пользователям определять и предоставлять инфраструктуру центра обработки данных с помощью языка конфигурации высокого уровня, известного как язык конфигурации Hashicorp (HCL).

Terraform — это мощный инструмент для предоставления инфраструктуры с кодом HCL (язык конфигурации Hashicorp), который соответствует JSON (нотация объектов JavaScript). Он имеет некоторые отличительные характеристики как инфраструктура как программный инструмент кода, как показано ниже.

  • Автоматизация предоставления инфраструктуры
  • Записать файл декларативной конфигурации
  • Последовательные и повторяемые рабочие процессы
  • Воспроизводимая и многократно используемая инфраструктура
  • Инфраструктура управления версиями с общим кодом

Terraform имеет большой охват со многими поставщиками, которые отвечают за понимание взаимодействия API и предоставление ресурсов более чем 200 облачных сервисов, IaaS, известных продуктов не только AWS/GCP/Azure/Openstack, но и технологий центров обработки данных. такие как Cisco и VMware, Nutanix показаны по этой ссылке. [4]



В первой части (часть 1) и предстоящей части (часть 2) моя цель состоит в том, чтобы автоматизировать две вышеупомянутые области жизненного цикла MLOps с помощью кодирования Terraform, чтобы исключить часть ручной работы человека, которая может привести к ошибкам в работе и большому количеству повторений творений. компонентов. Как только код будет написан, его можно будет повторно использовать для развертывания аналогичной инфраструктуры и сэкономить время, потому что мы можем просто оптимизировать параметры и переменные в файле terraform HCL для разных сред. В этой статье обсуждается, как инициализировать все необходимые компоненты AWS, такие как роль/политика IAM, корзины S3 и экземпляр SageMaker, для запуска задания обучения и развертывания службы вывода с помощью поставщика terraform AWS. В следующей части (часть 2) основное внимание будет уделено тому, как обеспечить некоторую степень автоматизации с помощью CloudWatch и Lambda для запуска воспроизводимости моделей, которые можно рассматривать как часть конвейеров MLOps с поставщиком terraform AWS. .

Обзор

На следующей диаграмме показана общая архитектура AWS с автоматизацией terraform. У нас есть некоторые компоненты AWS для инструмента, которые нужно создать и развернуть с соответствующими кодами. Это IAM (управление идентификацией и доступом), SageMaker Notebook и корзины S3 для хранения набора данных и построенной модели. Предположим, что специалисты по данным уже разработали Jupyter Notebook, который можно использовать в SageMaker, поэтому мы можем попросить их загрузить свой блокнот в соответствующий каталог для этой интеграции.

Как показано выше, для экземпляра ноутбука требуются некоторые вспомогательные ресурсы, в том числе:

  • Роль и политика IAM для экземпляра SageMaker Notebook

Блокнот должен иметь расширенный набор привилегий в политике для доступа к S3, SageMaker, CloudWatch, EC2 и т. д., если это необходимо.

  • Корзина S3 для хранения блокнота SageMaker и набора данных/построенной модели

Вот две отдельные корзины S3 для хранения записной книжки и набора данных/построенной модели, но это может быть одна корзина, если вы не возражаете.

  • Экземпляр SageMaker Notebook

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

Давайте возьмем элементарный набор данных и простую оценку scikit-learn для примера ноутбука. Целью этой архитектуры является прогнозирование цены на жилье с помощью построенной модели из набора данных о ценах на жилье в Бостоне. Я буду использовать алгоритм регрессора повышения градиента (предоставленный в ECR) для обучающих данных. Вот заранее подготовленный файл блокнота Jupyter в SageMaker. Он расположен в source/notebooks/sagemaker-terraform-boston.ipynb в репозитории и загружается в ресурсный блок aws_s3_bucket, чтобы правильно загрузить его в корзину S3.

Основная цель этой статьи не в том, чтобы написать блокнот Jupyter вне курса. Но позвольте мне вкратце рассказать, что мы собираемся делать (опять же я предположил, что специалисты по данным уже разработали для нас блокнот Jupyter). Набор данных о жилье в Бостоне — хорошо известный набор данных, состоящий из 506 строк и 14 столбцов. Последний столбец "medv" – это целевое значение, которое нам потребуется для прогнозирования его значения (медианная стоимость домов, занимаемых владельцами, в 1000 долл. США).

Мы конвертируем данные DataFrame в формат csv и загружаем файл csv в местоположение S3. Я указал местоположение корзины S3 bucket='sagemaker-bucket-sample-test' для теста в этом фрагменте. Обратите внимание, что этот сегмент должен соответствовать сегменту для хранения набора данных и модели с автоматизацией terraform. Мы настроим входные переменные в terraform.tfvars для main.tf, поэтому вам может потребоваться изменить параметры этого сегмента и префикса в блокноте Jupyter одновременно с определением переменной notebook_bucket_name в файле terraform.tfvars.

Теперь просто использовать estimator.SKLearn и вызывать scikit_learn_script.py в том же каталоге для создания модели. Этот скрипт также можно загрузить на S3 с помощью terraform. Он расположен по адресу source/scripts/scikit_learn_script.py в нашем репозитории.

Мы можем развернуть службу логического вывода с помощью sagemaker.predictor с определенными форматами ввода/вывода. Пожалуйста, будьте осторожны, чтобы не вызывать predictor.delete_endpoint() здесь, вам нужно будет вручную удалить конечную точку.

Полный код: https://github.com/yuyasugano/terraform-sagemaker-sample-1/blob/master/source/notebooks/Scikit-learn_Estimator_Example_With_Terraform.ipynb

Терраформируем

Пришло время терраформировать эти компоненты!! Чтобы сохранить ремонтопригодность и возможность повторного использования кода, вам может потребоваться следовать концепции модуля terraform. Модульность файлов tf теперь является общей для некоторого уровня изоляции, чтобы абстрагировать общие блоки конфигурации в повторно используемые и управляемые элементы инфраструктуры. [5]

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



Вот структура каталогов, которую я создал для строительных блоков Terraform. Основной main.tf вызывает все необходимые модули в каталогах modules iam, s3 и sagemaker соответственно. Исходные коды, такие как блокнот Jupyter и сценарий поезда, которые используются для контейнера SageMaker, были сохранены в каталоге source. Чтобы проверить структуру каталогов, запустите tree, как показано ниже.

$ tree --charset=o -I "*.template"

Я использовал terraform v0.12.6 и провайдеров следующим образом:

$ cd main
$ terraform version
Terraform v0.12.6
+ provider.aws v2.23.0
+ provider.template v2.1.2

Пожалуйста, подумайте об обновлении до основной версии 0.12.x, если вы еще не обновились. Вам также необходимо обновить файлы конфигурации terraform, следуя официальному руководству. [6]



Здесь приведены некоторые советы по использованию SageMaker в terraform. Ресурс aws_sagemaker_notebook_instance в terraform инициализирует только записную книжку, поэтому ему необходимо получить подготовленную записную книжку Jupyter из корзины S3 и запустить эту записную книжку для обучения набора данных и развертывания службы логических выводов с записной книжкой. Для выполнения этих задач можно использовать Конфигурацию жизненного цикла. Он предоставляет сценарии оболочки, которые запускаются только при инициализации и запуске экземпляра ноутбука. Обратите внимание, что сценарии оболочки не могут работать дольше 5 минут. Пока я подтверждал, что блокнот инициализации оставался в состоянии ожидания, когда выполнялся сценарий оболочки для обучения и развертывания конечной точки вывода. Если сценарий выполняется дольше 5 минут, происходит сбой, и экземпляр записной книжки не инициализируется или не запускается. Это рекомендации с официального сайта Amazon SageMaker, чтобы избежать подобных ситуаций. [7]

Я выбрал №3, чтобы ввести команду nohup для запуска подготовленного блокнота.

  1. Сократите количество необходимых шагов. Например, ограничить, в каких средах conda устанавливать большие пакеты.
  2. Запуск задач в параллельных процессах
  3. Используйте команду nohup в своем скрипте

В каталоге модулей terraform sagemaker я создал каталог шаблонов для размещения сценария оболочки (sagemaker_instance_init.sh) для конфигурации жизненного цикла. Terraform поддерживает ресурс под названием aws_sagemaker_notebook_instance_lifecycle, чтобы обеспечить конфигурацию жизненного цикла для ноутбуков SageMaker в автоматизации. Это образец main.tf, созданный для модуля SageMaker.

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

Развертывание

Основной код Terraform находится в каталоге main, и здесь мы можем выполнять команды terraform plan и terraform apply. Перед запуском terraform plan и terraform apply необходимо выполнить несколько настроек:

Заполните код: https://github.com/yuyasugano/terraform-sagemaker-sample-1

я. Скопируйте terraform_backend.tf.template в terraform_backend.tf и соответствующим образом измените значения. Вам необходимо вручную создать корзину S3 или использовать существующую для хранения файла состояния Terraform.

terraform {
  required_version = "0.12.6"
  backend "s3" {
    bucket = "<bucket-name>"
    key    = "sagemaker-sample/terraform.tfstate"
    region = "<region>"
  }
}

ii. Скопируйте terraform.tfvars.template в terraform.tfvars и соответствующим образом измените значения. Вам не нужно создавать какие-либо ведра, указанные здесь; они должны быть созданы terraform apply.

aws_region = "<aws_region>"
aws_profile = "<aws_profile>"
iam_name = "<iam_name>"
identifier = "sagemaker.amazonaws.com"
notebook_bucket_name = "<notebook_bucket_name>"
sagemaker_bucket_name = "<sagemaker_bucket_name>"
sagemaker_notebook_name = "<sagemaker_notebook_name>"

iii. После создания вышеуказанных файлов просто выполните следующие команды terraform. Не забудьте убедиться, что все команды возвращают значение «ОК», и просмотреть план терраформирования перед применением.

$ terraform init
$ terraform validate
Success! The configuration is valid.
$ terraform plan -var-file=terraform.tfvars
Plan: 9 to add, 0 to change, 0 to destroy.
$ terraform apply -var-file=terraform.tfvars # yes
Apply complete! Resources: 9 added, 0 changed, 0 destroyed.

Вы увидите все созданные ресурсы и наконец включенную конечную точку вывода. В этом эксперименте я настроил имя конечной точки sagemaker-terraform-test.

Очистка

Когда вы закончите эксперимент, просто выполните следующие действия, чтобы удалить все ресурсы. Еще раз напомним, что метод predictor.delete_endpoint() не вызывается в этой записной книжке, поэтому вам нужно будет вручную удалить конечную точку в консоли AWS или закомментировать метод predictor.delete_endpoint() в записной книжке внизу перед запуском команд terraform.

$ terraform plan -destroy -var-file=terraform.tfvars
$ terraform destroy -var-file=terraform.tfvars

Таким образом, в этой статье мы обсудили использование terraform для одной из вышеупомянутых областей MLOps и закодированные файлы tf для компонентов AWS, таких как IAM (управление идентификацией и доступом), SageMaker Notebook и корзины S3. В следующей статье я рассмотрю возможность добавления дополнительной части, посвященной построению воспроизводимости моделей с помощью лямбда-функции.

Ссылка