Логотип Зефирнет

Продвигайте конвейеры в мультисредовой среде с помощью Amazon SageMaker Model Registry, HashiCorp Terraform, GitHub и Jenkins CI/CD | Веб-сервисы Amazon

Дата:

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

Для выполнения нормативных и нормативных требований ключевыми требованиями при разработке такой платформы являются:

  • Дрейф адресных данных
  • Мониторинг производительности модели
  • Упрощение автоматического переобучения модели
  • Предоставить процесс утверждения модели
  • Храните модели в безопасной среде

В этом посте мы покажем, как создать платформу MLOps для удовлетворения этих потребностей, используя комбинацию сервисов AWS и сторонних наборов инструментов. Решение предполагает настройку нескольких сред с автоматическим переобучением модели, пакетным выводом и мониторингом с помощью Монитор моделей Amazon SageMaker, версия модели с Реестр моделей SageMakerи конвейер CI/CD для облегчения продвижения кода и конвейеров машинного обучения в разных средах с помощью Создатель мудреца Амазонки, Amazon EventBridge, Amazon Простая служба уведомлений (Амазон С3), ХашиКорп Терраформ, GitHubи Дженкинс CI/CD. Мы создаем модель для прогнозирования тяжести (доброкачественная или злокачественная) маммографического образования, обученную с помощью Алгоритм XGBoost используя общедоступные UCI Маммография Масса набор данных и разверните его с помощью платформы MLOps. Полная инструкция с кодом доступна в Репозиторий GitHub.

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

На следующей диаграмме архитектуры показан обзор инфраструктуры MLOps со следующими ключевыми компонентами:

  • Стратегия с несколькими аккаунтами – Две разные среды (dev и prod) настраиваются в двух разных учетных записях AWS в соответствии с рекомендациями AWS Well-Architected, а третья учетная запись настраивается в центральном реестре моделей:
    • Среда разработки – Где Домен Amazon SageMaker Studio настроен для разработки моделей, обучения моделей и тестирования конвейеров машинного обучения (обучение и вывод) до того, как модель будет готова к использованию в более высоких средах.
    • Рабочая среда – Где конвейеры машинного обучения от разработки продвигаются в качестве первого шага, а также планируются и контролируются с течением времени.
    • Центральный реестр моделей Реестр моделей Amazon SageMaker настраивается в отдельной учетной записи AWS для отслеживания версий модели, созданных в средах разработки и рабочей среды.
  • CI/CD и контроль версий – Развертывание конвейеров машинного обучения в средах осуществляется посредством CI/CD, настроенного с помощью Jenkins, а контроль версий осуществляется через GitHub. Изменения кода, объединенные с соответствующей веткой git среды, запускают рабочий процесс CI/CD для внесения соответствующих изменений в данную целевую среду.
  • Пакетные прогнозы с мониторингом модели – Конвейер вывода, построенный с Конвейеры Amazon SageMaker запускается по расписанию для создания прогнозов вместе с мониторингом модели с помощью SageMaker Model Monitor для обнаружения отклонения данных.
  • Автоматизированный механизм переобучения – Конвейер обучения, построенный с помощью SageMaker Pipelines, запускается всякий раз, когда в конвейере вывода обнаруживается отклонение данных. После обучения модель регистрируется в центральном реестре моделей для утверждения утверждающим лицом. После утверждения обновленная версия модели используется для создания прогнозов через конвейер вывода.
  • Инфраструктура как код – Инфраструктура как код (IaC), созданная с использованием ХашиКорп Терраформ, поддерживает планирование конвейера вывода с помощью EventBridge, запуск конвейера поездов на основе Правило EventBridge и отправка уведомлений с помощью Amazon Простая служба уведомлений (Амазон соцсети) Темы.

Млопская архитектура

Рабочий процесс MLOps включает в себя следующие шаги:

  1. Получите доступ к домену SageMaker Studio в учетной записи разработчика, клонируйте репозиторий GitHub, пройдите процесс разработки модели, используя предоставленный образец модели, и сгенерируйте конвейеры обучения и вывода.
  2. Запустите конвейер обучения в учетной записи разработчика, который генерирует артефакты модели для версии обученной модели и регистрирует модель в реестре моделей SageMaker в центральной учетной записи реестра моделей.
  3. Утвердите модель в реестре моделей SageMaker в учетной записи центрального реестра моделей.
  4. Отправьте код (конвейеры обучения и вывода, а также код Terraform IaC для создания расписания EventBridge, правила EventBridge и темы SNS) в ветку функций репозитория GitHub. Создайте запрос на включение, чтобы объединить код с основной веткой репозитория GitHub.
  5. Запустите конвейер Jenkins CI/CD, который настроен с помощью репозитория GitHub. Конвейер CI/CD развертывает код в учетной записи prod для создания конвейеров обучения и вывода вместе с кодом Terraform для подготовки расписания EventBridge, правила EventBridge и темы SNS.
  6. Конвейер вывода планируется запускать ежедневно, тогда как конвейер поездов настроен на запуск всякий раз, когда обнаруживается отклонение данных из конвейера вывода.
  7. Уведомления отправляются через тему SNS при возникновении сбоя в поезде или конвейере вывода.

Предпосылки

Для этого решения у вас должны быть следующие предпосылки:

  • Три учетные записи AWS (учетные записи разработчиков, продуктов и центрального реестра моделей)
  • Домен SageMaker Studio, настроенный в каждой из трех учетных записей AWS (см. На борту Amazon SageMaker Studio или посмотрите видео Быстрое подключение к Amazon SageMaker Studio инструкции по настройке)
  • Jenkins (мы используем Jenkins 2.401.1) с правами администратора, установленный на AWS.
  • Terraform версии 1.5.5 или более поздней версии, установленной на сервере Jenkins.

Для этого поста мы работаем в us-east-1 Регион для развертывания решения.

Предоставление ключей KMS в учетных записях разработчиков и продуктов.

Наш первый шаг — создать Служба управления ключами AWS (AWS KMS) в учетных записях разработчиков и продуктов.

Создайте ключ KMS в учетной записи разработчика и предоставьте доступ к учетной записи prod.

Выполните следующие шаги, чтобы создать ключ KMS в учетной записи разработчика:

  • В консоли AWS KMS выберите Ключи, управляемые клиентом в навигационной панели.
  • Выберите Создать ключ.
  • Что касается Тип ключа, наведите на симметричный.
  • Что касается Использование ключа, наведите на Зашифровать и расшифровать.
  • Выберите Следующая.
    настроить ключ кмс
  • Введите номер рабочей учетной записи, чтобы предоставить рабочей учетной записи доступ к ключу KMS, предоставленному в учетной записи разработчика. Это обязательный шаг, поскольку при первом обучении модели в учетной записи разработчика артефакты модели шифруются с помощью ключа KMS перед записью в корзину S3 в учетной записи центрального реестра модели. Рабочей учетной записи необходим доступ к ключу KMS для расшифровки артефактов модели и запуска конвейера вывода.
  • Выберите Следующая и завершите создание ключа.
    завершить создание ключа

После предоставления ключа он должен появиться на консоли AWS KMS.

ключ kms на консоли

Создайте ключ KMS в учетной записи prod.

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

Настройте корзину S3 артефактов модели в учетной записи центрального реестра моделей.

Создайте корзину S3 по вашему выбору с помощью строки sagemaker в соглашении об именах как часть имени корзины в учетной записи центрального реестра модели и обновите политику корзины в корзине S3, чтобы предоставить разрешения как учетным записям разработчиков, так и учетным записям prod на чтение и запись артефактов модели в корзину S3.

Следующий код представляет собой политику корзины, которая будет обновлена ​​в корзине S3:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<dev-account-id>:root" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" }, { "Sid": "AddPerm1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<dev-account-id>:root" }, "Action": "s3:ListBucket", "Resource": [ "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>", "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" ] }, { "Sid": "AddPerm2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<prod-account-id>:root" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" }, { "Sid": "AddPerm3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<prod-account-id>:root" }, "Action": "s3:ListBucket", "Resource": [ "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>", "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" ] } ]
}

Настройте роли IAM в своих учетных записях AWS

Следующим шагом является настройка Управление идентификацией и доступом AWS (IAM) роли в ваших учетных записях AWS с разрешениями для AWS Lambda, SageMaker и Дженкинс.

Роль выполнения лямбда

Создавать Роли выполнения Lambda в учетных записях dev и prod, которые будут использоваться функцией Lambda, запускаемой как часть Шаг SageMaker Pipelines Lambda. Этот шаг будет выполняться из конвейера вывода для получения последней утвержденной модели, с использованием которой генерируются выводы. Создайте роли IAM в учетных записях разработчиков и продуктов, используя соглашение об именах. arn:aws:iam::<account-id>:role/lambda-sagemaker-role и прикрепите следующие политики IAM:

  • Политика 1 – Создайте встроенную политику с именем cross-account-model-registry-access, который предоставляет доступ к пакету модели, настроенному в реестре модели в центральной учетной записи:
    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sagemaker:ListModelPackages", "Resource": "arn:aws:sagemaker:us-east-1:<central-model-registry-account-id>:model-package/mammo-severity-model-package/*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "sagemaker:DescribeModelPackageGroup", "Resource": "arn:aws:sagemaker:us-east-1:<central-model-registry-account-id>:model-package-group/mammo-severity-model-package" } ]
    }

  • Политика 2 - Прикреплять AmazonSageMakerFullAccess, который является Политика, управляемая AWS который предоставляет полный доступ к SageMaker. Он также обеспечивает выборочный доступ к сопутствующим услугам, таким как Автоматическое масштабирование приложений AWS, Амазон S3, Реестр Amazon Elastic Container (Amazon ECR) и Журналы Amazon CloudWatch.
  • Политика 3 - Прикреплять AWSLambda_FullAccess, которая представляет собой политику, управляемую AWS, которая предоставляет полный доступ к Lambda, функциям консоли Lambda и другим связанным сервисам AWS.
  • Политика 4 – Используйте следующую политику доверия IAM для роли IAM:
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "sagemaker.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ]
    } 

Исполнительная роль SageMaker

Домены SageMaker Studio, настроенные в учетных записях dev и prod, должны иметь связанную с ними роль исполнения, которую можно найти на странице настройки домена на странице сведений о домене, как показано на следующем снимке экрана. Эта роль используется для запуска заданий обучения, обработки и т. д. в домене SageMaker Studio.

Домен студии sagemaker

Добавьте следующие политики к роли выполнения SageMaker в обеих учетных записях:

  • Политика 1 – Создайте встроенную политику с именем cross-account-model-artifacts-s3-bucket-access, который предоставляет доступ к корзине S3 в учетной записи центрального реестра модели, в которой хранятся артефакты модели:
    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>", "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" ] } ]
    }
    

  • Политика 2 – Создайте встроенную политику с именем cross-account-model-registry-access, который предоставляет доступ к пакету модели в реестре моделей в учетной записи центрального реестра моделей:
    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sagemaker:CreateModelPackageGroup", "Resource": "arn:aws:sagemaker:us-east-1:<central-model-registry-account-id>:model-package-group/mammo-severity-model-package" } ]
    }
    

  • Политика 3 – Создайте встроенную политику с именем kms-key-access-policy, который предоставляет доступ к ключу KMS, созданному на предыдущем шаге. Укажите идентификатор учетной записи, в которой создается политика, и идентификатор ключа KMS, созданный в этой учетной записи.
    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUseOfKeyInThisAccount", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-1:<account-id>:key/<kms-key-id>" } ]
    }
    

  • Политика 4 - Прикреплять AmazonSageMakerFullAccess, который является Политика, управляемая AWS который предоставляет полный доступ к SageMaker и выборочный доступ к соответствующим службам.
  • Политика 5 - Прикреплять AWSLambda_FullAccess, которая представляет собой политику, управляемую AWS, которая предоставляет полный доступ к Lambda, функциям консоли Lambda и другим связанным сервисам AWS.
  • Политика 6 - Прикреплять CloudWatchEventsFullAccess, которая представляет собой политику, управляемую AWS, которая предоставляет полный доступ к CloudWatch Events.
  • Политика 7 – Добавьте следующую политику доверия IAM для роли IAM выполнения SageMaker:
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com", "sagemaker.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ]
    }
    

  • Политика 8 (относится к роли выполнения SageMaker в учетной записи prod) – Создайте встроенную политику с именем cross-account-kms-key-access-policy, который предоставляет доступ к ключу KMS, созданному в учетной записи разработчика. Это необходимо, чтобы конвейер вывода мог считывать артефакты модели, хранящиеся в учетной записи центрального реестра модели, где артефакты модели шифруются с помощью ключа KMS из учетной записи разработчика, когда первая версия модели создается из учетной записи разработчика.
    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUseOfKeyInDevAccount", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-1:<dev-account-id>:key/<dev-kms-key-id>" } ]
    }
    

Роль Дженкинса для нескольких аккаунтов

Настройте роль IAM под названием cross-account-jenkins-role в рабочей учетной записи, которую Дженкинс возьмет на себя для развертывания конвейеров машинного обучения и соответствующей инфраструктуры в рабочей учетной записи.

Добавьте в роль следующие управляемые политики IAM:

  • CloudWatchFullAccess
  • AmazonS3FullAccess
  • AmazonSNSFullAccess
  • AmazonSageMakerFullAccess
  • AmazonEventBridgeFullAccess
  • AWSLambda_FullAccess

Обновите доверительные отношения для роли, чтобы предоставить разрешения учетной записи AWS, на которой размещен сервер Jenkins:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com", "AWS": "arn:aws:iam::<jenkins-account-id>:root" }, "Action": "sts:AssumeRole", "Condition": {} } ]
}

Обновление разрешений для роли IAM, связанной с сервером Jenkins.

Предполагая, что Jenkins настроен на AWS, обновите роль IAM, связанную с Jenkins, добавив следующие политики, которые предоставят Jenkins доступ для развертывания ресурсов в учетной записи prod:

  • Политика 1 – Создайте следующую встроенную политику с именем assume-production-role-policy:
    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<prod-account-id>:role/cross-account-jenkins-role" } ]
    }
    

  • Политика 2 – Прикрепите CloudWatchFullAccess управляемая политика IAM.

Настройте группу пакетов модели в учетной записи центрального реестра моделей.

В домене SageMaker Studio в учетной записи центрального реестра модели создайте группу пакетов модели с именем mammo-severity-model-package используя следующий фрагмент кода (который можно запустить с помощью блокнота Jupyter):

import boto3 model_package_group_name = "mammo-severity-model-package"
sm_client = boto3.Session().client("sagemaker") create_model_package_group_response = sm_client.create_model_package_group( ModelPackageGroupName=model_package_group_name, ModelPackageGroupDescription="Cross account model package group for mammo severity model", ) print('ModelPackageGroup Arn : {}'.format(create_model_package_group_response['ModelPackageGroupArn']))

Настройте доступ к пакету модели для ролей IAM в учетных записях dev и prod.

Предоставьте доступ к ролям выполнения SageMaker, созданным в учетных записях dev и prod, чтобы вы могли регистрировать версии модели в пакете модели. mammo-severity-model-package в центральном реестре моделей из обеих учетных записей. Из домена SageMaker Studio в учетной записи центрального реестра модели запустите следующий код в блокноте Jupyter:

import json import boto3 model_package_group_name = "mammo-severity-model-package"
# Convert the policy from JSON dict to string
model_package_group_policy = dict(
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPermModelPackageGroupCrossAccount", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::<dev-account-id>:root", "arn:aws:iam::<prod-account-id>:root"] }, "Action": [ "sagemaker:DescribeModelPackageGroup" ], "Resource": "arn:aws:sagemaker:us-east-1:<central-model-registry-account>:model-package-group/mammo-severity-model-package" }, { "Sid": "AddPermModelPackageVersionCrossAccount", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::<dev-account-id>:root", "arn:aws:iam::<prod-account-id>:root"] }, "Action": [ "sagemaker:DescribeModelPackage", "sagemaker:ListModelPackages", "sagemaker:UpdateModelPackage", "sagemaker:CreateModelPackage", "sagemaker:CreateModel" ], "Resource": "arn:aws:sagemaker:us-east-1:<central-model-registry-account>:model-package/mammo-severity-model-package/*" } ]
})
model_package_group_policy = json.dumps(model_package_group_policy)
# Add Policy to the model package group
sm_client = boto3.Session().client("sagemaker")
response = sm_client.put_model_package_group_policy( ModelPackageGroupName = model_package_group_name, ResourcePolicy = model_package_group_policy)

Настройка Дженкинса

В этом разделе мы настраиваем Jenkins для создания конвейеров ML и соответствующей инфраструктуры Terraform в учетной записи prod через конвейер Jenkins CI/CD.

  • В консоли CloudWatch создайте группу журналов с именем jenkins-log внутри учетной записи prod, в которую Jenkins будет отправлять журналы из конвейера CI/CD. Группа журналов должна быть создана в том же регионе, где настроен сервер Jenkins.
  • Установите следующие плагины на вашем сервере Jenkins:
    1. Работа DSL
    2. идти
    3. Трубопровод
    4. Конвейер: шаги AWS
    5. Этапы трубопроводов
  • Настройте учетные данные AWS в Jenkins, используя роль IAM для нескольких учетных записей (cross-account-jenkins-role), предоставленный в учетной записи prod.
  • Что касается Конфигурация системы, выберите AWS.
  • Укажите учетные данные и группу журналов CloudWatch, которую вы создали ранее.
  • Настройте учетные данные GitHub в Jenkins.
  • Создайте новый проект в Jenkins.
  • Введите название проекта и выберите Трубопровод.
  • На Общие вкладка, выберите Проект GitHub и войдите в развилку Репозиторий GitHub URL.
  • Выберите Этот проект параметризован.
  • На Добавить параметр Меню, выберите Строковый параметр.
  • Что касается Имя, войти prodAccount.
  • Что касается Значение по умолчанию, введите идентификатор рабочей учетной записи.
  • Под Расширенные параметры проекта, Для Определение, наведите на Скрипт пайплайна от SCM.
  • Что касается SCM, выберите идти.
  • Что касается URL-адрес репозитория, войдите в раздвоение Репозиторий GitHub URL.
  • Что касается Полномочия, введите учетные данные GitHub, сохраненные в Jenkins.
  • Enter main в Филиалы для строительства раздел, на основании которого будет запускаться конвейер CI/CD.
  • Что касается Путь сценария, войти Jenkinsfile.
  • Выберите Сохранить.

Конвейер Jenkins должен быть создан и виден на вашей информационной панели.

Предоставление сегментов S3, сбор и подготовка данных

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

  • Создайте корзину S3 по вашему выбору с помощью строки sagemaker в соглашении об именах как часть имени сегмента в учетных записях разработчиков и продуктов для хранения наборов данных и артефактов модели.
  • Настройте корзину S3 для поддержания состояния Terraform в учетной записи продукта.
  • Загрузите и сохраните общедоступный UCI Маммография Масса набор данных в корзину S3, созданную ранее в учетной записи разработчика.
  • Форкнуть и клонировать Репозиторий GitHub в домене SageMaker Studio в учетной записи разработчика. Репо имеет следующую структуру папок:
    • /environments — скрипт конфигурации для среды prod.
    • /mlops-инфра – Код для развертывания сервисов AWS с использованием кода Terraform.
    • /трубопроводы – Код для компонентов пайплайна SageMaker
    • Дженкинсфайл – Скрипт для развертывания через конвейер Jenkins CI/CD.
    • setup.py – Необходимо установить необходимые модули Python и создать команду run-pipeline.
    • маммография-тяжесть-modeling.ipynb – Позволяет создавать и запускать рабочий процесс ML
  • Создайте папку data в папке клонированного репозитория GitHub и сохраните копию общедоступной папки. UCI Маммография Масса набор данных.
  • Следуйте блокноту Jupyter mammography-severity-modeling.ipynb.
  • Запустите следующий код в блокноте, чтобы предварительно обработать набор данных и загрузить его в корзину S3 в учетной записи разработчика:
    import boto3
    import sagemaker
    import numpy as np
    import pandas as pd
    from sklearn.compose import ColumnTransformer
    from sklearn.impute import SimpleImputer
    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler, OneHotEncoder #Replace the values based on the resoures created
    default_bucket = "<s3-bucket-in-dev-account>"
    model_artifacts_bucket = "<s3-bucket-in-central-model-registry-account>"
    region = "us-east-1"
    model_name = "mammography-severity-model"
    role = sagemaker.get_execution_role()
    lambda_role = "arn:aws:iam::<dev-account-id>:role/lambda-sagemaker-role"
    kms_key = "arn:aws:kms:us-east-1:<dev-account-id>:key/<kms-key-id-in-dev-account>"
    model_package_group_name="arn:aws:sagemaker:us-east-1:<central-model-registry-account-id>:model-package-group/mammo-severity-model-package" feature_columns_names = [ 'BIRADS', 'Age', 'Shape', 'Margin', 'Density',
    ]
    feature_columns_dtype = { 'BIRADS': np.float64, 'Age': np.float64, 'Shape': np.float64, 'Margin': np.float64, 'Density': np.float64,
    } # read raw dataset
    mammographic_data = pd.read_csv("data/mammographic_masses.data",header=None) # split data into batch and raw datasets
    batch_df =mammographic_data.sample(frac=0.05,random_state=200)
    raw_df =mammographic_data.drop(batch_df.index) # Split the raw datasets to two parts, one of which will be used to train
    #the model initially and then other dataset will be leveraged when #retraining the model
    train_dataset_part2 =raw_df.sample(frac=0.1,random_state=200)
    train_dataset_part1 =raw_df.drop(train_dataset_part2.index) # save the train datasets train_dataset_part1.to_csv("data/mammo-train-dataset-part1.csv",index=False)
    train_dataset_part2.to_csv("data/mammo-train-dataset-part2.csv",index=False) # remove label column from the batch dataset which will be used to generate inferences
    batch_df.drop(5,axis=1,inplace=True) # create a copy of the batch dataset batch_modified_df = batch_df def preprocess_batch_data(feature_columns_names,feature_columns_dtype,batch_df): batch_df.replace("?", "NaN", inplace = True) batch_df.columns = feature_columns_names batch_df = batch_df.astype(feature_columns_dtype) numeric_transformer = Pipeline( steps=[("imputer", SimpleImputer(strategy="median"))] ) numeric_features = list(feature_columns_names) preprocess = ColumnTransformer( transformers=[ ("num", numeric_transformer, numeric_features) ] ) batch_df = preprocess.fit_transform(batch_df) return batch_df # save the batch dataset file
    batch_df = preprocess_batch_data(feature_columns_names,feature_columns_dtype,batch_df)
    pd.DataFrame(batch_df).to_csv("data/mammo-batch-dataset.csv", header=False, index=False) # modify batch dataset to introduce missing values
    batch_modified_df.replace("?", "NaN", inplace = True)
    batch_modified_df.columns = feature_columns_names
    batch_modified_df = batch_modified_df.astype(feature_columns_dtype) # save the batch dataset with outliers file
    batch_modified_df.to_csv("data/mammo-batch-dataset-outliers.csv",index=False)
    

Код сгенерирует следующие наборы данных:

    • данные/mammo-train-dataset-part1.csv – Будет использоваться для обучения первой версии модели.
    • данные/mammo-train-dataset-part2.csv  – Будет использоваться для обучения второй версии модели вместе с набором данных mammo-train-dataset-part1.csv.
    • данные/mammo-batch-dataset.csv – Будет использоваться для формирования выводов.
    • данные/mammo-batch-dataset-outliers.csv – В набор данных будут внесены выбросы, чтобы вывести из строя конвейер вывода. Это позволит нам протестировать шаблон, чтобы запустить автоматическое переобучение модели.
  • Загрузите набор данных mammo-train-dataset-part1.csv под приставкой mammography-severity-model/train-datasetи загрузите наборы данных mammo-batch-dataset.csv и mammo-batch-dataset-outliers.csv к префиксу mammography-severity-model/batch-dataset корзины S3, созданной в учетной записи разработчика:
    import boto3
    s3_client = boto3.resource('s3')
    s3_client.Bucket(default_bucket).upload_file("data/mammo-train-dataset-part1.csv","mammography-severity-model/data/train-dataset/mammo-train-dataset-part1.csv")
    s3_client.Bucket(default_bucket).upload_file("data/mammo-batch-dataset.csv","mammography-severity-model/data/batch-dataset/mammo-batch-dataset.csv")
    s3_client.Bucket(default_bucket).upload_file("data/mammo-batch-dataset-outliers.csv","mammography-severity-model/data/batch-dataset/mammo-batch-dataset-outliers.csv") 

  • Загрузите наборы данных mammo-train-dataset-part1.csv и mammo-train-dataset-part2.csv под приставкой mammography-severity-model/train-dataset в корзину S3, созданную в учетной записи prod, через консоль Amazon S3.
  • Загрузите наборы данных mammo-batch-dataset.csv и mammo-batch-dataset-outliers.csv к префиксу mammography-severity-model/batch-dataset корзины S3 в учетной записи prod.

Запустить железнодорожный конвейер

Под <project-name>/pipelines/train, вы можете увидеть следующие скрипты Python:

  • скрипты/raw_preprocess.py – Интегрируется с SageMaker Processing для разработки функций.
  • скрипты/evaluate_model.py – В данном случае позволяет рассчитывать метрики модели. auc_score
  • train_pipeline.py – Содержит код для конвейера обучения модели.

Выполните следующие шаги:

  • Загрузите сценарии в Amazon S3:
    import boto3
    s3_client = boto3.resource('s3')
    s3_client.Bucket(default_bucket).upload_file("pipelines/train/scripts/raw_preprocess.py","mammography-severity-model/scripts/raw_preprocess.py")
    s3_client.Bucket(default_bucket).upload_file("pipelines/train/scripts/evaluate_model.py","mammography-severity-model/scripts/evaluate_model.py")

  • Получите экземпляр конвейера поезда:
    from pipelines.train.train_pipeline import get_pipeline train_pipeline = get_pipeline( region=region, role=role, default_bucket=default_bucket, model_artifacts_bucket=model_artifacts_bucket, model_name = model_name, kms_key = kms_key, model_package_group_name= model_package_group_name, pipeline_name="mammo-severity-train-pipeline", base_job_prefix="mammo-severity", ) train_pipeline.definition()
    

  • Отправьте конвейер поезда и запустите его:
    train_pipeline.upsert(role_arn=role)
    train_execution = train_pipeline.start()
    

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

Утвердите модель в центральном реестре моделей.

Войдите в учетную запись центрального реестра моделей и получите доступ к реестру моделей SageMaker в домене SageMaker Studio. Измените статус версии модели на «Утверждено».

После утверждения статус должен быть изменен в версии модели.

Запустите конвейер вывода (необязательно)

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

Под <project-name>/pipelines/inference, вы можете увидеть следующие скрипты Python:

  • скрипты/lambda_helper.py – Извлекает последнюю утвержденную версию модели из учетной записи центрального реестра моделей с помощью шага SageMaker Pipelines Lambda.
  • inference_pipeline.py – Содержит код для конвейера вывода модели.

Выполните следующие шаги:

  • Загрузите скрипт в корзину S3:
    import boto3
    s3_client = boto3.resource('s3')
    s3_client.Bucket(default_bucket).upload_file("pipelines/inference/scripts/lambda_helper.py","mammography-severity-model/scripts/lambda_helper.py")
    

  • Получите экземпляр конвейера вывода, используя обычный пакетный набор данных:
    from pipelines.inference.inference_pipeline import get_pipeline inference_pipeline = get_pipeline( region=region, role=role, lambda_role = lambda_role, default_bucket=default_bucket, kms_key=kms_key, model_name = model_name, model_package_group_name= model_package_group_name, pipeline_name="mammo-severity-inference-pipeline", batch_dataset_filename = "mammo-batch-dataset" )
    

  • Отправьте конвейер вывода и запустите его:
    inference_pipeline.upsert(role_arn=role)
    inference_execution = inference_pipeline.start()
    

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

Запустите конвейер Jenkins

Ассоциация environment/ Папка в репозитории GitHub содержит сценарий конфигурации для учетной записи prod. Выполните следующие шаги, чтобы запустить конвейер Jenkins:

  • Обновите скрипт конфигурации prod.tfvars.json на основе ресурсов, созданных на предыдущих шагах:
    { "env_group": "prod", "aws_region": "us-east-1", "event_bus_name": "default", "pipelines_alert_topic_name": "mammography-model-notification", "email":"admin@org.com", "lambda_role":"arn:aws:iam::<prod-account-id>:role/lambda-sagemaker-role", "default_bucket":"<s3-bucket-in-prod-account>", "model_artifacts_bucket": "<s3-bucket-in-central-model-registry-account>", "kms_key": "arn:aws:kms:us-east-1:<prod-account-id>:key/<kms-key-id-in-prod-account>", "model_name": "mammography-severity-model", "model_package_group_name":"arn:aws:sagemaker:us-east-1:<central-model-registry-account-id>:model-package-group/mammo-severity-model-package", "train_pipeline_name":"mammo-severity-train-pipeline", "inference_pipeline_name":"mammo-severity-inference-pipeline", "batch_dataset_filename":"mammo-batch-dataset", "terraform_state_bucket":"<s3-bucket-terraform-state-in-prod-account>", "train_pipeline": { "name": "mammo-severity-train-pipeline", "arn": "arn:aws:sagemaker:us-east-1:<prod-account-id>:pipeline/mammo-severity-train-pipeline", "role_arn": "arn:aws:iam::<prod-account-id>:role/service-role/<sagemaker-execution-role-in-prod-account>" }, "inference_pipeline": { "name": "mammo-severity-inference-pipeline", "arn": "arn:aws:sagemaker:us-east-1:<prod-account-id>:pipeline/mammo-severity-inference-pipeline", "cron_schedule": "cron(0 23 * * ? *)", "role_arn": "arn:aws:iam::<prod-account-id>:role/service-role/<sagemaker-execution-role-in-prod-account>" } }
    

  • После обновления поместите код в разветвленный репозиторий GitHub и объедините его с основной веткой.
  • Перейдите в пользовательский интерфейс Jenkins, выберите Сборка с параметрамии запустите конвейер CI/CD, созданный на предыдущих шагах.

Когда сборка будет завершена и успешна, вы сможете войти в учетную запись prod и просмотреть конвейеры обучения и вывода в домене SageMaker Studio.

Кроме того, вы увидите три правила EventBridge на консоли EventBridge в учетной записи prod:

  • Запланируйте конвейер вывода
  • Отправить уведомление о сбое в трубопроводе поезда
  • Если конвейер вывода не может запустить конвейер поезда, отправьте уведомление.

Наконец, вы увидите тему уведомлений SNS на консоли Amazon SNS, которая отправляет уведомления по электронной почте. Вы получите электронное письмо с просьбой подтвердить принятие этих уведомлений по электронной почте.

Протестируйте конвейер вывода, используя пакетный набор данных без выбросов.

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

Запустите конвейер через консоль SageMaker Pipelines в домене SageMaker Studio учетной записи prod, где transform_input будет URI S3 набора данных без выбросов (s3://<s3-bucket-in-prod-account>/mammography-severity-model/data/mammo-batch-dataset.csv).

Конвейер вывода завершается успешно и записывает прогнозы обратно в корзину S3.

Протестируйте конвейер вывода, используя пакетный набор данных с выбросами.

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

Запустите конвейер через консоль SageMaker Pipelines в домене SageMaker Studio учетной записи prod, где transform_input будет URI S3 набора данных с выбросами (s3://<s3-bucket-in-prod-account>/mammography-severity-model/data/mammo-batch-dataset-outliers.csv).

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

Через несколько секунд вы должны увидеть новый запуск конвейера поездов на консоли SageMaker Pipelines, который собирает два разных набора данных поездов (mammo-train-dataset-part1.csv и mammo-train-dataset-part2.csv) загружен в корзину S3 для повторного обучения модели.

Вы также увидите уведомление, отправленное на адрес электронной почты, подписанный на тему SNS.

Чтобы использовать обновленную версию модели, войдите в учетную запись центрального реестра модели и подтвердите версию модели, которая будет выбрана во время следующего запуска конвейера вывода, запускаемого с помощью запланированного правила EventBridge.

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

Убирать

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

  • Удалите домен SageMaker Studio из всех учетных записей AWS.
  • Удалите все ресурсы, созданные вне SageMaker, включая сегменты S3, роли IAM, правила EventBridge и тему SNS, настроенную через Terraform в учетной записи prod.
  • Удалите конвейеры SageMaker, созданные между учетными записями, с помощью команды Интерфейс командной строки AWS (Интерфейс командной строки AWS).

Заключение

Организациям часто необходимо использовать общекорпоративные наборы инструментов, чтобы обеспечить совместную работу между различными функциональными областями и командами. Такое сотрудничество гарантирует, что ваша платформа MLOps сможет адаптироваться к меняющимся потребностям бизнеса, и ускоряет внедрение машинного обучения в командах. В этом посте объясняется, как создать платформу MLOps в конфигурации с несколькими средами, чтобы обеспечить автоматическое переобучение модели, пакетный вывод и мониторинг с помощью Amazon SageMaker Model Monitor, управление версиями модели с помощью SageMaker Model Registry, а также продвижение кода и конвейеров машинного обучения в разных средах с помощью Конвейер CI/CD. Мы продемонстрировали это решение, используя комбинацию сервисов AWS и сторонних наборов инструментов. Инструкции по реализации этого решения см. Репозиторий GitHub. Вы также можете расширить это решение, добавив свои собственные источники данных и платформы моделирования.


Об авторах

Гаятри Ганакота — старший инженер по машинному обучению в AWS Professional Services. Она увлечена разработкой, развертыванием и объяснением решений AI/ML в различных областях. До этой должности она руководила несколькими инициативами в качестве специалиста по данным и инженера по машинному обучению в ведущих мировых компаниях в сфере финансов и розничной торговли. Она имеет степень магистра компьютерных наук, специализирующуюся на науке о данных, полученную в Колорадском университете в Боулдере.

Сунита Коппар — старший архитектор озера данных в AWS Professional Services. Она с энтузиазмом занимается решением проблем клиентов, обрабатывая большие данные и предоставляя долгосрочные масштабируемые решения. До этой должности она разрабатывала продукты в сфере Интернета, телекоммуникаций и автомобилестроения, а также была клиентом AWS. Она имеет степень магистра в области науки о данных Калифорнийского университета в Риверсайде.

Сасвата Дэш — консультант DevOps в AWS Professional Services. Она работала с клиентами в сфере здравоохранения и биологических наук, авиации и производства. Она увлечена всем, что связано с автоматизацией, и имеет обширный опыт проектирования и создания корпоративных клиентских решений в AWS. Вне работы она занимается фотографией и ловлей восходов солнца.

Spot_img

Последняя разведка

Spot_img