Создайте конвейер MLOps end-to-end с использованием Amazon SageMaker Pipelines, GitHub и GitHub Actions.

Создание полноценного конвейера MLOps с применением Amazon SageMaker Pipelines, GitHub и GitHub Actions.

Модели машинного обучения (ML) не работают изолированно. Для достижения ценности они должны интегрироваться в существующие производственные системы и инфраструктуру, что требует учета всего жизненного цикла ML при проектировании и разработке. Операции ML, известные как MLOps, направлены на оптимизацию, автоматизацию и мониторинг моделей ML на протяжении всего их жизненного цикла. В построении надежного конвейера MLOps требуется межфункциональное сотрудничество. Ученые по данным, инженеры ML, IT-специалисты и команды DevOps должны работать вместе, чтобы операционализировать модели от исследования до развертывания и поддержки. С правильными процессами и инструментами MLOps позволяет организациям надежно и эффективно внедрять ML в своих командах.

Хотя требования непрерывной интеграции и непрерывной доставки (CI/CD) конвейеров могут быть уникальными и отражать потребности каждой организации, масштабирование практик MLOps в командах может быть упрощено с помощью управляемых оркестровок и инструментов, которые могут ускорить процесс разработки и устранить ненужные сложности.

Amazon SageMaker MLOps – набор функций, включающий Amazon SageMaker Projects (CI/CD), Amazon SageMaker Pipelines и Amazon SageMaker Model Registry.

SageMaker Pipelines позволяет легко создавать и управлять ML рабочими процессами, а также предлагает возможности хранения и повторного использования шагов рабочего процесса. SageMaker Model Registry централизует отслеживание моделей, упрощая развертывание модели. SageMaker Projects вводит практики CI/CD в ML, включая согласованность среды, контроль версий, тестирование и автоматизацию. Это позволяет быстро установить CI/CD в вашей среде ML, обеспечивая эффективное масштабирование по всему предприятию.

Модели “из коробки” предоставляемые Amazon SageMaker включают интеграцию с некоторыми инструментами сторонних разработчиков, такими как Jenkins для оркестровки и GitHub для контроля версий, и несколько используют средства собственного CI/CD AWS, такие как AWS CodeCommit, AWS CodePipeline и AWS CodeBuild. Однако во многих случаях клиенты хотят интегрировать SageMaker Pipelines с другими существующими инструментами CI/CD и, таким образом, создавать свои собственные проектные шаблоны.

В этой статье мы покажем вам пошаговую реализацию следующего:

  • Создание пользовательского проектного шаблона SageMaker MLOps, который интегрируется с GitHub и GitHub Actions
  • Делаете свои пользовательские проектные шаблоны доступными в Amazon SageMaker Studio для вашей команды по науке о данных с помощью мгновенного предоставления

Обзор решения

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

Обзор решения

Давайте погрузимся в элементы этой архитектуры, чтобы понять полную конфигурацию.

GitHub и GitHub Actions

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

GitHub Actions – мощный инструмент автоматизации в экосистеме GitHub. Он позволяет создавать пользовательские рабочие процессы, автоматизирующие процессы жизненного цикла разработки программного обеспечения, такие как сборка, тестирование и развертывание кода. Вы можете создавать рабочие процессы, запускаемые событиями, например, при отправке кода в репозиторий или создании запроса на извлечение. При реализации концепции MLOps вы можете использовать GitHub Actions для автоматизации различных этапов конвейера машинного обучения, таких как:

  • Проверка данных и предобработка
  • Обучение и оценка модели
  • Развертывание и мониторинг модели
  • CI/CD для моделей машинного обучения

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

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

  • AWS CloudFormationAWS CloudFormation инициирует развертывание модели и устанавливает конечные точки SageMaker после активации конвейера развертывания модели путем одобрения обученной модели.
  • Соединение AWS CodeStar – Мы используем AWS CodeStar для установления связи с репозиторием GitHub и использования его в качестве интеграции репозитория кода с ресурсами AWS, такими как SageMaker Studio.
  • Amazon EventBridgeAmazon EventBridge отслеживает все изменения в реестре моделей. Он также поддерживает правило, которое запускает функцию Lambda для развертывания конвейера модели, когда статус версии пакета модели изменяется с PendingManualApproval на Approved в реестре моделей.
  • AWS Lambda – Мы используем функцию AWS Lambda, чтобы инициировать рабочий процесс развертывания модели в GitHub Actions после регистрации новой модели в реестре моделей.
  • Amazon SageMaker – Мы настраиваем следующие компоненты SageMaker:
    • Конвейер – Этот компонент представляет собой направленный ациклический граф (DAG), который помогает нам построить автоматизированный рабочий процесс машинного обучения для стадий подготовки данных, обучения модели и оценки модели. Реестр моделей содержит записи о версиях моделей, связанных артефактах, линейном происхождении и метаданных. Создается группа пакетов моделей, в которой хранятся все связанные версии моделей. К реестру моделей также относится управление статусом одобрения версии модели для последующего развертывания.
    • Конечная точка – Этот компонент настраивает две конечные точки реального времени HTTPS для вывода вывода. Конфигурацию хостинга можно настроить, например, для пакетного преобразования или асинхронного вывода. Cтадия подготовки активирует конечную точку, когда модель развертывается путем одобрения обученной модели из реестра моделей SageMaker. Данная конечная точка используется для проверки развернутой модели, убедившись, что она предоставляет прогнозы, удовлетворяющие нашим требованиям к точности. Когда модель готова к развертыванию в производственную среду, в рабочем процессе GitHub Actions активируется стадия ручного утверждения, которая разворачивает производственную конечную точку.
    • Репозиторий кода – Создается Git-репозиторий в ресурсах вашей учетной записи SageMaker. Используя существующие данные из репозитория кода GitHub, которые вы вводите при создании проекта SageMaker, устанавливается связь с тем же репозиторием в SageMaker при запуске проекта. Это обеспечивает связь с репозиторием GitHub в SageMaker и позволяет взаимодействовать (извлекать/отправлять) с вашим репозиторием.
    • Реестр моделей – Этот компонент отслеживает различные версии модели и соответствующие артефакты, включая линейность и метаданные. Создается сборник, известный как группа пакетов моделей, в котором содержатся связанные версии моделей. Более того, реестр моделей контролирует статус утверждения версии модели, обеспечивая ее готовность к последующему развертыванию.
  • AWS Secrets Manager – Чтобы надежно сохранить свой личный токен доступа к GitHub, необходимо создать секрет в AWS Secrets Manager и разместить свой токен доступа внутри него.
  • AWS Service Catalog – Мы используем AWS Service Catalog для реализации проектов SageMaker, которые включают компоненты, такие как репозиторий кода SageMaker, функция Lambda, правило EventBridge, корзина артефактов S3 и т. д., все реализованные с помощью CloudFormation. Это позволяет вашей организации повторно использовать шаблоны проектов, назначать проекты каждому пользователю и оптимизировать операции.
  • Amazon S3 – Мы используем Amazon Simple Storage Service (Amazon S3) для хранения артефактов моделей, созданных конвейером.

Предварительные требования

У вас должны быть следующие предварительные требования:

Вы также должны выполнить дополнительные настройки перед реализацией решения.

Настройка соединения AWS CodeStar

Если у вас еще нет соединения AWS CodeStar с учетной записью GitHub, обратитесь к инструкции Создание соединения с GitHub для создания соединения. ARN соединения AWS CodeStar будет выглядеть следующим образом:

arn:aws:codestar-connections:us-west-2:account_id:connection/aEXAMPLE-8aad-4d5d-8878-dfcab0bc441f

В этом примере aEXAMPLE-8aad-4d5d-8878-dfcab0bc441f является уникальным идентификатором этого соединения. Мы будем использовать этот идентификатор при создании нашего проекта SageMaker позже в этом примере.

Настройка секретных ключей доступа для вашего токена GitHub

Для безопасного хранения вашего личного токена доступа GitHub необходимо создать секрет в Secrets Manager. Если у вас нет личного токена доступа к GitHub, обратитесь к инструкции Управление личными токенами доступа для создания такового.

Вы можете создать классический или токен с особыми правами доступа. Однако убедитесь, что токен имеет доступ к содержимому и действиям репозитория (рабочим процессам, запускам и артефактам).

Выполните следующие шаги для сохранения токена в Secrets Manager:

  1. На консоли Secrets Manager выберите Сохранить новый секрет.
  2. Выберите Другой тип секрета для Выберите тип секрета.
  3. Введите имя для вашего секрета в поле Ключ и добавьте ваш личный токен доступа в соответствующее поле Значение.
  4. Выберите Далее, введите имя для вашего секрета и снова выберите Далее.
  5. Выберите Сохранить, чтобы сохранить ваш секрет.

Сохраняя ваш личный токен доступа GitHub в Secrets Manager, вы можете безопасно получить к нему доступ в вашей MLOps-процедуре, обеспечивая его конфиденциальность.

Создание IAM-пользователя для действий GitHub

Чтобы позволить действиям GitHub развертывать конечные точки SageMaker в вашей среде AWS, вам необходимо создать пользователя сервиса IAM (AWS Identity and Access Management) и предоставить ему необходимые разрешения. Для получения инструкций обратитесь к разделу Создание пользователя IAM в вашей учетной записи AWS. Воспользуйтесь файлом iam/GithubActionsMLOpsExecutionPolicy.json (предоставлен в образце кода) для предоставления достаточных разрешений этому пользователю для развертывания ваших конечных точек.

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

Настройте вашу учетную запись GitHub

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

Клонируйте репозиторий GitHub

Вы можете использовать существующий репозиторий GitHub для этого примера. Однако гораздо удобнее создать новый репозиторий. В этом репозитории будет содержаться весь исходный код для сборок и развертывания SageMaker pipeline.

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

Создайте секрет GitHub, содержащий ключ доступа пользователя IAM

На этом шаге мы сохраняем ключевые данные вновь созданного пользователя в нашем секрете GitHub.

  1. На веб-сайте GitHub перейдите в ваш репозиторий и выберите Настройки.
  2. В разделе безопасности выберите Секреты и переменные и выберите Действия.
  3. Выберите Создать новый секрет репозитория.
  4. В поле Название введите AWS_ACCESS_KEY_ID
  5. В поле Секрет введите идентификатор ключа доступа, связанный с IAM пользователем, созданным вами ранее.
  6. Выберите Добавить секрет.
  7. Повторите те же шаги для AWS_SECRET_ACCESS_KEY

Настройте вашу среду выполнения GitHub

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

  1. Перейдите в меню Настройки, Среды выполнения вашего GitHub репозитория и создайте новую среду с названием “production”.
  2. Для Правил защиты среды выполнения выберите Требуемые рецензенты.
  3. Добавьте имена желаемых пользователей GitHub в качестве рецензентов. Для этого примера вы можете выбрать свое имя пользователя.

Обратите внимание, что функция среды выполнения не доступна в некоторых типах планов GitHub. Дополнительную информацию можно найти в разделе Использование сред выполнения для развертывания.

Разверните функцию Lambda

В следующих шагах мы сжимаем файл lambda_function.py в файл .zip, который затем загружается в бакет S3.

Соответствующий образец кода для этого можно найти в следующем репозитории GitHub. В частности, файл lambda_function.py находится в каталоге lambda_functions/lambda_github_workflow_trigger.

Рекомендуется создать форк образца кода и клонировать его. Это позволит вам свободно изменять код и экспериментировать с различными аспектами примера.

  1. После получения копии кода перейдите в соответствующий каталог и используйте команду zip для сжатия файла lambda_function.py. Пользователи Windows и MacOS могут использовать свою собственную систему управления файлами, например, Проводник файлов или Finder, для создания .zip файла.
cd lambda_functions/lambda_github_workflow_triggerzip lambda-github-workflow-trigger.zip lambda_function.py
  1. Загрузите файл lambda-github-workflow-trigger.zip в бакет S3.

Этот бакет будет позже доступен Service Catalog. Вы можете выбрать любой доступный вам бакет, при условии, что Service Catalog сможет получить данные из него в последующих шагах.

Начиная с этого шага, требуется установить и настроить AWS CLI v2. Альтернативой может быть использование AWS CloudShell, который поставляется с предустановленными необходимыми инструментами и не требует дополнительных настроек.

  1. Чтобы загрузить файл в хранилище S3, используйте следующую команду:
aws s3 cp lambda-github-workflow-trigger.zip s3://your-bucket/

Теперь мы создаем слой Lambda для зависимостей, связанных с только что загруженной lambda_function.

  1. Настройте виртуальное окружение Python и установите зависимости:
mkdir lambda_layercd lambda_layerpython3 -m venv .envsource .env/bin/activatepip install pygithubdeactivate
  1. Сгенерируйте .zip файл с помощью следующих команд:
mv .env/lib/python3.9/site-packages/ pythonzip -r layer.zip python
  1. Опубликуйте слой в AWS:
aws lambda publish-layer-version --layer-name python39-github-arm64 \   --description "Python3.9 pygithub" \   --license-info "MIT" \   --zip-file fileb://layer.zip \   --compatible-runtimes python3.9 \   --compatible-architectures "arm64"

После публикации этого слоя все ваши функции Lambda могут ссылаться на него, чтобы удовлетворить свои зависимости. Для более подробного понимания слоев Lambda см. Работа с слоями Lambda.

Создание пользовательского шаблона проекта в SageMaker

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

Как уже обсуждалось ранее, когда предоставленные шаблоны SageMaker не соответствуют вашим потребностям (например, вы хотите иметь более сложную оркестрацию в CodePipeline с несколькими стадиями, настраиваемыми шагами утверждения или интегрировать с инструментом сторонней стороны, таким как GitHub и GitHub actions, продемонстрированными в этой статье), вы можете создать свои собственные шаблоны. Мы рекомендуем начать с предоставленных шаблонов SageMaker, чтобы понять, как организовать свой код и ресурсы и развиваться на их основе. Более подробную информацию см. Создание пользовательских шаблонов проектов.

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

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

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

После включения администрирования доступа к шаблонам SageMaker выполните следующие шаги:

  1. В консоли услуги каталога, в разделе Администрирование в левой панели навигации выберите Портфели.
  2. Выберите Создать новый портфель.
  3. Дайте портфелю имя «SageMaker Шаблоны организации».
  4. Скачайте файл template.yml на свой компьютер.

Этот шаблон CloudFormation предоставляет все ресурсы CI/CD, которые нам нужны, как конфигурацию и инфраструктуру в виде кода. Вы можете более подробно изучить шаблон, чтобы увидеть, какие ресурсы развертываются в его рамках. Этот шаблон был настроен для интеграции с GitHub и GitHub Actions.

  1. В файле template.yml измените значение S3Bucket на ваше ведро, в котором вы загрузили файл .zip Lambda:
GitHubWorkflowTriggerLambda:  ...  Code:    S3Bucket: <your-bucket>    S3Key: lambda-github-workflow-trigger.zip  ...
  1. Выберите новый портфель.
  2. Выберите Загрузить новый продукт.
  3. Для Название продукта введите название вашего шаблона. Мы используем имя build-deploy-github.
  4. Для Описание введите описание.
  5. Для Владелец введите свое имя.
  6. В разделе Сведения о версии для Метода выберите Использовать файл шаблона.
  7. Выберите Загрузить шаблон.
  8. Загрузите скачанный вами шаблон.
  9. Для Заголовка версии выберите 1.0.
  10. Выберите Обзор.
  11. Пересмотрите настройки и выберите Создать продукт.
  12. Выберите Обновить, чтобы перечислить новый продукт.
  13. Выберите только что созданный продукт.
  14. На вкладке Теги добавьте к продукту следующий тег:
    • Ключ =sagemaker:studio-visibility
    • Значениеtrue

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

Service Catalog Portfolio
  1. На вкладке Ограничения выберите Создать ограничение.
  2. Для Продукта выберите build-deploy-github (продукт, который вы только что создали).
  3. Для типа Ограничения выберите Запуск.
  4. В разделе Ограничение запуска для поля Метод выберите Выбрать IAM-роль.
  5. Выберите AmazonSageMakerServiceCatalogProductsLaunchRole.
  6. Выберите Создать.
  7. На вкладке Группы, роли и пользователи выберите Добавить группы, роли, пользователей.
  8. На вкладке Роли выберите роль, которую вы использовали при настройке вашей области SageMaker Studio. Здесь можно найти роль области SageMaker.
Service Catalog Launch Constraint
  1. Выберите Добавить доступ.

Развернуть проект из SageMaker Studio

В предыдущих разделах вы подготовили среду для пользовательского проекта MLOps. Теперь создадим проект с использованием этого шаблона:

  1. На консоли SageMaker перейдите к области, в которой вы хотите создать этот проект.
  2. В меню Запуск выберите Studio.

Вы будете перенаправлены в среду SageMaker Studio.

  1. В SageMaker Studio в панели навигации в разделе Развертывания выберите Проекты.
  2. Выберите Создать проект.
  3. Вверху списка шаблонов выберите Шаблоны организации.

Если вы успешно выполнили все предыдущие шаги, вы должны увидеть новый пользовательский проектный шаблон с именем Build-Deploy-GitHub.

  1. Выберите этот шаблон и выберите Выбрать шаблон проекта.
  2. Добавьте необязательное описание.
  3. Для поля Имя владельца GitHub-репозитория введите владельца вашего репозитория на GitHub. Например, если ваш репозиторий находится по адресу https://github.com/pooyavahidi/my-repo, владельцем будет pooyavahidi.
  4. Для поля Имя репозитория GitHub введите имя репозитория, в который вы скопировали исходный код. Это будет просто имя репозитория. Например, в https://github.com/pooyavahidi/my-repo репозиторий – это my-repo.
  5. Для поля Уникальный идентификатор соединения CodeStar введите уникальный идентификатор соединения AWS CodeStar, которое вы создали.
  6. Для поля Имя секрета в менеджере секретов Secrets Manager, в котором хранится токен GitHub введите имя секрета в менеджере секретов, где вы создали и храните токен GitHub.
  7. Для поля Файл рабочего процесса GitHub для развертывания введите имя файла рабочего процесса GitHub (по адресу .github/workflows/deploy.yml), в котором содержатся инструкции для развертывания. Для этого примера вы можете оставить значение по умолчанию, которым является deploy.yml.
  8. Выберите Создать проект.
SageMaker Studio Project
  1. После создания проекта убедитесь, что вы обновили переменные окружения AWS_REGION и SAGEMAKER_PROJECT_NAME в файлах вашего рабочего процесса GitHub соответственно. Файлы рабочего процесса находятся в вашем репозитории GitHub (скопированы из исходного кода), внутри каталога .github/workflows. Убедитесь, что вы обновили оба файла build.yml и deploy.yml.
...env:  AWS_REGION: <регион>     SAGEMAKER_PROJECT_NAME: <имя вашего проекта>...

Теперь ваше окружение готово к работе! Вы можете запускать конвейеры напрямую, вносить изменения и пушить эти изменения в ваш репозиторий GitHub, чтобы запустить автоматизированный процесс сборки и развертывания и посмотреть, как все шаги сборки и развертывания автоматизированы.

Очистка

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

  • Удалите стеки CloudFormation, используемые для проекта SageMaker и точек входа SageMaker.
  • Удалите домен SageMaker.
  • Удалите ресурсы Service Catalog.
  • Удалите связь AWS CodeStar с репозиторием GitHub.
  • Удалите IAM-пользователя, созданного для действий GitHub.
  • Удалите секрет в Secrets Manager, который сохраняет данные доступа GitHub.

Резюме

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