MLOps для пакетного вывода с мониторингом и повторным обучением модели с использованием Amazon SageMaker, HashiCorp Terraform и GitLab CI/CD

MLOps для батчевого вывода с мониторингом и повторным обучением модели с использованием Amazon SageMaker, HashiCorp Terraform и GitLab CI/CD

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

В этом сообщении мы описываем, как создать рабочий процесс MLOps для пакетного вывода, который автоматизирует планирование заданий, мониторинг моделей, повторное обучение и регистрацию, а также обработку ошибок и уведомления с помощью Amazon SageMaker, Amazon EventBridge, AWS Lambda, Amazon Simple Notification Service (Amazon SNS), HashiCorp Terraform и GitLab CI/CD. Представленный рабочий процесс MLOps предоставляет повторно используемый шаблон для управления жизненным циклом ML с помощью автоматизации, мониторинга, аудита и масштабируемости, что позволяет снизить сложности и затраты на поддержку рабочих нагрузок пакетного вывода в производстве.

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

На следующей схеме показана предлагаемая целевая архитектура MLOps для пакетного вывода предприятия для организаций, которые используют GitLab CI/CD и Terraform в качестве кода инфраструктуры (IaC) в сочетании с инструментами и сервисами AWS. GitLab CI/CD служит макро-оркестратором, оркестрируя конвейеры build и deploy моделей, которые включают в себя поиск, создание и предоставление конвейеров Amazon SageMaker и соответствующих ресурсов с использованием SageMaker Python SDK и Terraform. SageMaker Python SDK используется для создания или обновления конвейеров SageMaker для обучения, обучения с оптимизацией гиперпараметров (HPO) и пакетного вывода. Terraform используется для создания дополнительных ресурсов, таких как правила EventBridge, функции Lambda и темы SNS для мониторинга конвейеров SageMaker и отправки уведомлений (например, при сбое или успешном завершении шага конвейера). SageMaker Pipelines служит оркестратором для рабочих процессов обучения моделей и вывода.

Эта архитектура представляет собой стратегию многоконтной, где модели ML создаются, обучаются и регистрируются в центральном реестре моделей в рамках учетной записи разработки научных данных (которая имеет больше контроля, чем типичная учетная запись разработки приложений). Затем конвейеры вывода развертываются на стадии и в производственных учетных записях с использованием автоматизации средств DevOps, таких как GitLab CI/CD. Центральный реестр моделей также может быть помещен в учетную запись общих служб. См. Рабочую модель для bewt-практик в отношении стратегии многоконтового использования ML.

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

Инфраструктура в виде кода

IaC предлагает способ управления IT-инфраструктурой с помощью машинно-читаемых файлов, обеспечивая эффективное управление версиями. В этом сообщении и сопровождающем кодовом образце мы демонстрируем, как использовать HashiCorp Terraform с GitLab CI/CD для эффективного управления ресурсами AWS. Этот подход подчеркивает ключевое преимущество IaC, предлагая прозрачный и повторяемый процесс управления IT-инфраструктурой.

Обучение и повторное обучение модели

В этом проектировании конвейер обучения SageMaker запускается по расписанию (через EventBridge) или на основе события триггера Amazon Simple Storage Service (Amazon S3) (например, когда в Amazon S3 размещается файл триггера или новые данные для обучения в случае одного объекта данных для обучения), чтобы регулярно калибровать модель с новыми данными. Этот конвейер не вносит структурных или материальных изменений в модель, поскольку он использует фиксированные гиперпараметры, утвержденные в процессе обзора модели предприятия.

Конвейер обучения регистрирует новую обученную версию модели в реестре моделей Amazon SageMaker, если модель превышает предопределенный порог производительности модели (например, RMSE для регрессии и F1-оценка для классификации). Когда новая версия модели регистрируется в реестре моделей, генерируется уведомление ответственному научному сотруднику через Amazon SNS. Затем научный сотрудник должен просмотреть и вручную утвердить последнюю версию модели в пользовательском интерфейсе Amazon SageMaker Studio или с помощью вызова API с использованием интерфейса командной строки AWS (AWS CLI) или AWS SDK для Python (Boto3) перед тем, как новая версия модели может быть использована для вывода.

Конвейер обучения SageMaker и его поддерживающие ресурсы создаются конвейером build GitLab, либо при ручном запуске конвейера GitLab, либо автоматически при слиянии кода в основную ветвь репозитория Git model build.

Пакетный вывод

Пакетная конвейерная инференция SageMaker выполняется по расписанию (через EventBridge) или на основе события триггера S3. Пакетная конвейерная инференция автоматически извлекает последнюю утвержденную версию модели из реестра моделей и использует ее для вывода. Пакетная конвейерная инференция включает шаги проверки качества данных по отношению к базовому значению, созданному конвейером обучения, а также качества модели (производительности модели), если имеются истинные метки.

Если пакетная конвейерная инференция обнаруживает проблемы с качеством данных, она уведомляет ответственного ученого-исследователя данных через Amazon SNS. Если она обнаруживает проблемы с качеством модели (например, RMSE превышает предварительно заданный порог), шаг конвейера для проверки качества модели завершается неудачей, что в свою очередь вызывает событие EventBridge для запуска конвейера обучения с HPO.

Пакетная конвейерная инференция SageMaker и ее вспомогательные ресурсы создаются конвейером GitLab model deploy, либо вручную, запуская конвейер GitLab, либо автоматически, когда код сливается в ветвь main репозитория Git model deploy.

Настройка и перенастройка модели

Конвейер обучения SageMaker с HPO запускается, когда шаг проверки качества модели пакетной конвейерной инференции завершается неудачей. Проверка качества модели выполняется путем сравнения прогнозов модели с фактическими истинными метками. Если метрика качества модели (например, RMSE для регрессии и F1-оценка для классификации) не соответствует предварительно заданному критерию, шаг проверки качества модели помечается как неудачный. Конвейер обучения SageMaker с HPO также может быть запущен вручную (в пользовательском интерфейсе SageMaker Studio или с помощью вызова API с использованием AWS CLI или SageMaker Python SDK) ответственным ученым-исследователем данных при необходимости. Поскольку гиперпараметры модели меняются, ответственный ученый-исследователь данных должен получить одобрение от комиссии по обзору моделей предприятия, прежде чем новая версия модели будет утверждена в реестре моделей.

Конвейер обучения SageMaker с HPO и его вспомогательные ресурсы создаются конвейером GitLab model build, либо вручную, запуская конвейер GitLab, либо автоматически, когда код сливается в ветвь main репозитория Git model build.

Мониторинг модели

Статистика данных и базовые значения ограничений создаются в рамках конвейера обучения и конвейера обучения с HPO. Они сохраняются в Amazon S3 и также регистрируются с обученной моделью в реестре моделей, если модель успешно прошла оценку. Предлагаемая архитектура для пакетной конвейерной инференции использует Amazon SageMaker Model Monitor для проверки качества данных и пользовательские шаги обработки Amazon SageMaker для проверки качества модели. Эта конструкция разделяет проверку качества данных и модели, что в свою очередь позволяет отправлять только предупреждающее уведомление при обнаружении дрейфа данных и запускать конвейер обучения с HPO при обнаружении нарушения качества модели.

Утверждение модели

После того, как новая обученная модель зарегистрирована в реестре моделей, ответственный ученый-исследователь данных получает уведомление. Если модель была обучена конвейером обучения (рекалибровка с использованием новых данных обучения при фиксированных гиперпараметрах), нет необходимости в одобрении со стороны комиссии по обзору моделей предприятия. Ученый-исследователь данных может просмотреть и утвердить новую версию модели независимо. С другой стороны, если модель была обучена конвейером обучения с HPO (перенастройка путем изменения гиперпараметров), новая версия модели должна пройти процесс обзора предприятия, прежде чем она может быть использована для вывода в производственных условиях. По завершении процесса обзора ученый-исследователь данных может продолжить и утвердить новую версию модели в реестре моделей. Изменение статуса пакета модели на Approved вызовет функцию Lambda через EventBridge, которая в свою очередь запустит конвейер GitLab model deploy через вызов API. Это автоматически обновит пакетную конвейерную инференцию SageMaker для использования последней утвержденной версии модели для вывода.

Существует два основных способа одобрения или отклонения новой версии модели в реестре моделей: с использованием AWS SDK для Python (Boto3) или из пользовательского интерфейса SageMaker Studio. По умолчанию конвейер обучения и конвейер обучения с HPO устанавливают ModelApprovalStatus в PendingManualApproval. Ответственный ученый-исследователь данных может обновить статус утверждения модели, вызвав API update_model_package из Boto3. Дополнительные сведения об обновлении статуса утверждения модели см. в разделе Обновление статуса утверждения модели через пользовательский интерфейс SageMaker Studio.

Проектирование ввода-вывода данных

SageMaker взаимодействует напрямую с Amazon S3 для чтения входных данных и сохранения выходных данных отдельных шагов в конвейерах обучения и вывода. Ниже приведена схема, иллюстрирующая, как различные скрипты на языке Python, необработанные и обработанные данные обучения, необработанные и обработанные данные вывода, результаты вывода и истинные метки (если они доступны для контроля качества модели), артефакты модели, оценочные метрики обучения и вывода (мониторинг качества модели), а также базовые значения качества данных и отчеты о нарушениях (для мониторинга качества данных) могут быть организованы в рамках сегмента S3. Направление стрелок на диаграмме указывает, какие файлы являются входами или выходами соответствующих шагов в конвейерах SageMaker. Стрелки цвета кодируются в зависимости от типа шага конвейера, чтобы их было легче читать. Конвейер автоматически загружает скрипты на языке Python из репозитория GitLab и сохраняет выходные файлы или артефакты модели из каждого шага в соответствующем пути S3.

Инженер по обработке данных отвечает за следующее:

  • Загрузка помеченных обучающих данных в соответствующий путь в Amazon S3. Это включает регулярное добавление новых обучающих данных, чтобы обеспечить доступ к последним обучающим данным для повторного обучения и перенастройки модели через конвейер обучения и конвейер обучения с использованием HPO.
  • Загрузка входных данных для вывода в соответствующий путь в корзине S3 перед запланированным запуском конвейера вывода.
  • Загрузка меток истинности в соответствующий путь S3 для контроля качества модели.

Ученый по данным отвечает за следующее:

  • Подготовка меток истинности и предоставление их команде инженеров по обработке данных для загрузки в Amazon S3.
  • Прохождение модельных версий, обученных конвейером обучения с использованием HPO, через процесс проверки предприятия и получение необходимых одобрений.
  • Ручное одобрение или отклонение новых обученных версий модели в реестре моделей.
  • Одобрение производственных ворот для конвейера вывода и ресурсов, которые должны быть переведены в производство.

Пример кода

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

  • Он использует одну учетную запись AWS для создания и развертывания модели машинного обучения и необходимых ресурсов. См. руководство по организации среды AWS с использованием нескольких учетных записей для получения рекомендаций по настройке многоканального режима на AWS.
  • Он использует одну конвейерную линию GitLab CI/CD для создания и развертывания модели машинного обучения и необходимых ресурсов.
  • При обучении новой версии модели конвейерной линией GitLab CI/CD запуск не происходит автоматически и должен быть запущен вручную ответственным ученым по данным для обновления конвейерной линии пакетного вывода SageMaker с последней одобренной версией модели.
  • Он поддерживает только событийные триггеры, основанные на S3, для запуска конвейеров обучения и вывода SageMaker.

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

Перед развертыванием данного решения у вас должны быть следующие предварительные требования:

  • Учетная запись AWS
  • SageMaker Studio
  • Роль выполнения SageMaker с разрешениями на чтение/запись Amazon S3 и шифрование/дешифрование AWS Key Management Service (AWS KMS)
  • Корзина S3 для хранения данных, скриптов и артефактов моделей
  • Terraform версии 0.13.5 или выше
  • GitLab с работающим Docker runner для запуска конвейеров
  • AWS CLI
  • jq
  • unzip
  • Python3 (Python 3.7 или выше) и следующие пакеты Python:
    • boto3
    • sagemaker
    • pandas
    • pyyaml

Структура репозитория

Репозиторий GitHub содержит следующие каталоги и файлы:

  • /code/lambda_function/ – В этом каталоге содержится файл Python для функции Lambda, которая подготавливает и отправляет уведомления (через Amazon SNS) о изменениях состояния шагов конвейеров SageMaker
  • /data/ – В этом каталоге находятся файлы сырых данных (обучение, вывод и данные меток истинности)
  • /env_files/ – В этом каталоге содержится файл входных переменных Terraform
  • /pipeline_scripts/ – В этом каталоге содержатся три скрипта на языке Python для создания и обновления конвейеров обучения, вывода и обучения с использованием HPO SageMaker, а также файлы конфигурации для указания параметров каждого конвейера
  • /scripts/ – В этом каталоге содержатся дополнительные скрипты на языке Python (например, предварительная обработка и оценка), на которые ссылается конвейеры обучения, вывода и обучения с использованием HPO
  • .gitlab-ci.yml – Этот файл определяет конфигурацию конвейера GitLab CI/CD
  • /events.tf – В этом файле определяются ресурсы EventBridge
  • /lambda.tf – В этом файле определяются функция уведомления Lambda и связанные ресурсы AWS Identity and Access Management (IAM)
  • /main.tf – В этом файле определяются источники данных и локальные переменные Terraform
  • /sns.tf – В этом файле определяются ресурсы Amazon SNS
  • /tags.json – Этот файл JSON позволяет объявлять пользовательские пары ключ-значение для тегов и добавлять их к ресурсам Terraform с помощью локальной переменной
  • /variables.tf – В этом файле объявляются все переменные Terraform

Переменные и конфигурация

В следующей таблице показаны переменные, которые используются для параметризации данного решения. Дополнительные сведения смотрите в файле ./env_files/dev_env.tfvars.

****Название**** ****Описание****
bucket_name S3-корзина, используемая для хранения данных, скриптов и артефактов моделей
bucket_prefix S3-префикс для проекта машинного обучения
bucket_train_prefix S3-префикс для обучающих данных
bucket_inf_prefix S3-префикс для данных вывода
notification_function_name Имя функции Lambda, которая подготавливает и отправляет уведомления о изменениях состояния шагов в пайплайнах SageMaker
custom_notification_config Конфигурация для настройки уведомления для конкретных шагов пайплайна SageMaker при обнаружении определенного состояния выполнения пайплайна
email_recipient Список адресов электронной почты для получения уведомлений о состоянии шагов пайплайна SageMaker
pipeline_inf Имя пайплайна вывода в SageMaker
pipeline_train Имя пайплайна обучения в SageMaker
pipeline_trainwhpo Имя пайплайна обучения с HPO в SageMaker
recreate_pipelines Если установлено значение true, то три существующих пайплайна SageMaker (обучение, вывод, обучение с HPO) будут удалены, а новые будут созданы при запуске GitLab CI/CD
model_package_group_name Имя группы пакетов моделей
accuracy_mse_threshold Максимальное значение MSE перед требованием обновления модели
role_arn ARN роли IAM для выполнения пайплайна SageMaker
kms_key ARN ключа KMS для шифрования Amazon S3 и SageMaker
subnet_id Идентификатор подсети для конфигурации сети SageMaker
sg_id Идентификатор группы безопасности для конфигурации сети SageMaker
upload_training_data Если установлено значение true, то обучающие данные будут загружены в Amazon S3, и эта операция загрузки запустит выполнение пайплайна обучения
upload_inference_data Если установлено значение true, то данные вывода будут загружены в Amazon S3, и эта операция загрузки запустит выполнение пайплайна вывода
user_id Идентификатор сотрудника SageMaker, который добавляется в качестве тега к ресурсам SageMaker

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

Выполните следующие шаги для развертывания решения в своей учетной записи AWS:

  1. Клонируйте репозиторий GitHub в ваш рабочий каталог.
  2. Ознакомьтесь с конфигурацией конвейера GitLab CI/CD и измените ее, чтобы она соответствовала вашей среде. Конфигурация указана в файле ./gitlab-ci.yml.
  3. Обратитесь к файлу README, чтобы обновить общие переменные решения в файле ./env_files/dev_env.tfvars. Этот файл содержит переменные как для скриптов Python, так и для автоматизации Terraform.
    1. Проверьте дополнительные параметры SageMaker Pipelines, которые определены в YAML-файлах в папке ./batch_scoring_pipeline/pipeline_scripts/. Проверьте и обновите параметры при необходимости.
  4. Ознакомьтесь со скриптами создания конвейера SageMaker в папке ./pipeline_scripts/, а также со скриптами, на которые они ссылаются, в папке ./scripts/. Примеры скриптов, предоставленные в репозитории GitHub, основаны на наборе данных “Abalone”. Если вы собираетесь использовать другой набор данных, убедитесь, что вы обновили скрипты, чтобы они соответствовали вашей конкретной проблеме.
  5. Поместите ваши файлы данных в папку ./data/, используя следующую соглашение об именовании. Если вы используете набор данных “Abalone” вместе с предоставленными примерами скриптов, убедитесь, что файлы данных не содержат заголовков, тренировочные данные включают как независимые, так и целевые переменные с сохранением исходного порядка столбцов, данные для вывода содержат только независимые переменные, а файл истинности содержит только целевую переменную.
    1. training-data.csv
    2. inference-data.csv
    3. ground-truth.csv
  6. Зафиксируйте и отправьте код в репозиторий, чтобы запустить конвейер GitLab CI/CD (первый запуск). Обратите внимание, что первый запуск конвейера завершится с ошибкой на этапе pipeline, поскольку еще не существует утвержденной версии модели для использования скриптом конвейера вывода. Проанализируйте журнал шагов и убедитесь, что новый конвейер SageMaker с именем TrainingPipeline был успешно создан.

    1. Откройте пользовательский интерфейс SageMaker Studio, затем ознакомьтесь и запустите конвейер обучения.
    2. После успешного запуска конвейера обучения утвердите версию зарегистрированной модели в реестре моделей, затем повторно запустите весь конвейер GitLab CI/CD.
  1. Ознакомьтесь с выводом плана Terraform на этапе build. Утвердите ручной этап apply в конвейере GitLab CI/CD, чтобы возобновить выполнение конвейера и авторизовать Terraform на создание ресурсов мониторинга и уведомлений в вашей учетной записи AWS.
  2. Наконец, ознакомьтесь со статусом выполнения конвейеров SageMaker и их выводом в пользовательском интерфейсе SageMaker Studio и проверьте свою электронную почту на наличие уведомлений, как показано на следующем скриншоте. Стандартное сообщение представлено в формате JSON.

Конвейеры SageMaker

В этом разделе мы описываем три конвейера SageMaker в рамках рабочего процесса MLOps.

Конвейер обучения

Конвейер обучения состоит из следующих шагов:

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

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

Пакетный конвейер вывода

Пакетный конвейер вывода состоит из следующих шагов:

  • Создание модели на основе последней одобренной версии модели в реестре моделей
  • Шаг предварительной обработки, включающий преобразование и кодирование признаков
  • Шаг пакетного вывода
  • Шаг предварительной обработки проверки качества данных, который создает новый файл CSV, содержащий как входные данные, так и предсказания модели, которые будут использоваться для проверки качества данных
  • Шаг проверки качества данных, который проверяет входные данные по базовым статистическим данным и ограничениям, связанным с зарегистрированной моделью
  • Шаг условия для проверки наличия данных истинности. Если данные истинности доступны, будет выполнен шаг проверки качества модели
  • Шаг вычисления качества модели, который вычисляет производительность модели на основе истинных меток

Оба параметра skip_check_data_quality и register_new_baseline_data_quality установлены в False в конвейере вывода. Эти параметры указывают конвейеру выполнять проверку качества данных с использованием базовых статистических данных или ограничений, связанных с зарегистрированной моделью (supplied_baseline_statistics_data_quality и supplied_baseline_constraints_data_quality) и пропускать создание или регистрацию новых базовых статистических данных и ограничений во время вывода. На следующей фигуре изображен запуск пакетного конвейера вывода, в котором шаг проверки качества данных не удался из-за плохой производительности модели на данных вывода. В этом конкретном случае будет автоматически запущено обучение с использованием конвейера HPO для настройки модели.

Обучение с использованием конвейера HPO

Конвейер обучения с использованием конвейера HPO состоит из следующих шагов:

  • Шаг предварительной обработки (преобразование и кодирование признаков)
  • Шаг проверки качества данных для создания базовых статистических данных и ограничений с использованием тренировочных данных
  • Шаг настройки гиперпараметров
  • Шаг оценки обучения
  • Шаг условия для проверки, удовлетворяет ли обученная модель предварительно заданному порогу точности
  • Шаг регистрации модели, если лучшая обученная модель удовлетворяет требуемому порогу точности

Оба параметра skip_check_data_quality и register_new_baseline_data_quality установлены в True в конвейере обучения с использованием конвейера HPO. На следующей фигуре изображен успешный запуск конвейера обучения с использованием конвейера HPO.

Очистка

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

  1. Используйте этап destroy в конвейере GitLab CI/CD для удаления всех ресурсов, созданных с помощью Terraform.
  2. Используйте AWS CLI для перечисления и удаления оставшихся конвейеров, созданных с помощью скриптов Python.
  3. При необходимости удалите другие ресурсы AWS, такие как бакет S3 или роль IAM, созданные вне конвейера CI/CD.

Заключение

В этой статье мы продемонстрировали, как предприятия могут создавать рабочие процессы MLOps для своих задач пакетного вывода, используя Amazon SageMaker, Amazon EventBridge, AWS Lambda, Amazon SNS, HashiCorp Terraform и GitLab CI/CD. Представленный рабочий процесс автоматизирует мониторинг данных и моделей, переобучение моделей, а также запуск пакетных задач, версионирование кода и предоставление инфраструктуры. Это может привести к значительному снижению сложностей и затрат на поддержку пакетных задач вывода в производственной среде. Для получения дополнительной информации о деталях реализации ознакомьтесь с репозиторием GitHub.