Введение
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()
здесь, вам нужно будет вручную удалить конечную точку.
Терраформируем
Пришло время терраформировать эти компоненты!! Чтобы сохранить ремонтопригодность и возможность повторного использования кода, вам может потребоваться следовать концепции модуля 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
для запуска подготовленного блокнота.
- Сократите количество необходимых шагов. Например, ограничить, в каких средах conda устанавливать большие пакеты.
- Запуск задач в параллельных процессах
- Используйте команду
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. В следующей статье я рассмотрю возможность добавления дополнительной части, посвященной построению воспроизводимости моделей с помощью лямбда-функции.
Ссылка
- [1] Википедия — МЛОпс
- [2] Машинное обучение с помощью Amazon SageMaker
- [3] Википедия — Terraform (Программное обеспечение)
- [4] Терраформ — Провайдеры
- [5] HashiCorp Terraform: модули как строительные блоки инфраструктуры
- [6] Обновление до Terraform v0.12
- [7] Настройка экземпляра ноутбука — SageMaker
- [8] yuyasugano/terraform-sagemaker-sample-1