Как построить собственный портал с встроенным Amazon SageMaker AI MLflow Apps — ИИ для бизнеса

Как построить собственный портал с встроенным Amazon SageMaker AI MLflow Apps

Прослушать статью

По мере роста команд машинного обучения встраивание Amazon SageMaker AI MLflow Apps в собственный портал требует масштабируемого подхода к управлению доступом. Рассылка presigned URL плохо работает для команд из десятков дата-сайентистов, а выдача отдельного доступа к AWS Management Console создает дополнительную операционную нагрузку для администраторов, которые управляют правами. Командам, использующим внутренние порталы с SSO, нужно, чтобы отслеживание экспериментов MLflow было доступно рядом с другими внутренними приложениями по одной закладке. Собственный портал сокращает время онбординга новых сотрудников, упрощает управление доступом и дает дата-сайентистам единый, предсказуемый интерфейс во всех внутренних инструментах.

С этим решением команды ML получают постоянный, сохраняемый в закладках URL для полного веб-интерфейса MLflow без presigned URL и без доступа к AWS Management Console. Вы можете встроить интерфейс отслеживания экспериментов MLflow прямо во внутренний портал с SSO или в собственную панель управления, чтобы пользователи проходили аутентификацию один раз и работали с experiment tracking рядом с другими внутренними инструментами. Ваши конвейеры непрерывной интеграции и непрерывной доставки (CI/CD) и автоматизационные скрипты могут программно взаимодействовать с REST API MLflow через тот же proxy endpoint, а аутентификация SigV4 будет выполняться скрыто на backend.

В этом материале вы узнаете, как собрать собственный портал со встроенным интерфейсом SageMaker AI MLflow Apps. Вы пройдете архитектурный шаблон с React frontend и Flask reverse proxy, который обрабатывает аутентификацию AWS Signature Version 4 (SigV4), развернете весь стек через AWS Cloud Development Kit (AWS CDK), проверите развертывание и рассмотрите вопросы безопасности и очистки ресурсов.

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

Вы развертываете собственное React-веб-приложение, в которое встроен интерфейс SageMaker AI MLflow Apps через iframe, а в качестве backend используется Flask reverse proxy, работающий на Amazon Elastic Compute Cloud (Amazon EC2). Архитектура состоит из четырех компонентов, которые вместе дают вашей команде аутентифицированный доступ к MLflow.

Application Load Balancer

Application Load Balancer (ALB) служит единой точкой входа для пользователей. Он завершает HTTPS, направляя трафик к нужным backend-целям, и интегрируется с существующей DNS- и сертификатной инфраструктурой вашей организации. Он предоставляет стабильный публичный URL для портала, который может интегрироваться с существующей SSO-инфраструктурой. ALB распределяет трафик как для React dashboard, так и для запросов к MLflow API, а также поддерживает собственные доменные имена и SSL termination.

Примечание: В этой реализации ALB использует HTTP. Для production-среды следует добавить HTTPS с SSL/TLS-сертификатом через AWS Certificate Manager (ACM).

React frontend portal

React frontend дает вашей команде фирменную точку входа в опыт работы с MLflow. Он предоставляет собственный портал, который встраивает интерфейс отслеживания MLflow в iframe и служит точкой интеграции для фирменного оформления и дополнительных инструментов. Статические файлы он отдает через Flask proxy из пути /app.

Flask reverse proxy service

Flask reverse proxy находится между frontend и backend MLflow, аутентифицируя запросы так, чтобы пользователям не приходилось напрямую управлять AWS credentials. Python-приложение на Flask выполняет следующие задачи:

  • Перехватывает входящие запросы, включая пути интерфейса и вызовы REST API.
  • Подписывает каждый запрос с помощью AWS SigV4, используя временные учетные данные, полученные через принятие на себя выделенной роли AWS Identity and Access Management (IAM).
  • Пересылает подписанные запросы к endpoint Amazon SageMaker AI MLflow Apps.
  • Переписывает абсолютные URL MLflow в HTML-ответах в относительные пути и удаляет заголовки X-Frame-Options, чтобы интерфейс корректно отображался внутри iframe.

Amazon SageMaker AI MLflow apps

Amazon SageMaker AI полностью управляет MLflow apps, поэтому вам не нужно поднимать или патчить серверы. Amazon SageMaker AI MLflow Apps предоставляет отслеживание экспериментов с runs, metrics, parameters и artifacts, а также model registry для версионирования моделей и управления их жизненным циклом. Это полностью управляемый backend без собственной инфраструктуры для обслуживания.

Такая архитектура обеспечивает безопасный обмен данными и при этом остается совместимой с существующими корпоративными порталами. Proxy service выступает связующим звеном, преобразуя стандартные HTTPS-запросы в аутентифицированные AWS API-вызовы.

Архитектура и рабочий процесс запросов

На следующей схеме показано, как разные компоненты работают вместе, обеспечивая вашей команде безопасный браузерный доступ к Amazon SageMaker AI MLflow Apps.

Схема архитектуры, показывающая React dashboard, Flask reverse proxy на Amazon EC2 и интеграцию SageMaker AI MLflow Apps через Application Load Balancer

Вот что происходит, когда пользователь переходит в портал:

  1. Пользователь открывает URL ALB в браузере, напрямую или по ссылке из внутреннего портала вашей организации. ALB направляет запрос на экземпляр Amazon EC2, на котором работает Flask proxy.
  2. Flask proxy отдает React dashboard (из пути /app). React-приложение отображает страницу и загружает интерфейс MLflow внутри iframe, который указывает на /mlflow-ui/.
  3. После этого каждый запрос, который делает iframe, проходит через Flask proxy, будь то загрузка страниц интерфейса MLflow или вызовы API-эндпоинтов вроде /api/2.0/mlflow/experiments/search. Proxy подписывает каждый запрос с помощью AWS SigV4, используя временные учетные данные (полученные через принятие на себя выделенной IAM-роли), и пересылает его на serverless endpoint MLflow App.
  4. Когда MLflow App отвечает, proxy передает ответ в браузер только после двух действий. Он переписывает абсолютные URL MLflow в относительные пути, чтобы навигация корректно работала через proxy. Он также удаляет заголовки X-Frame-Options, чтобы браузер разрешил рендеринг содержимого внутри iframe.

Пользователи видят полный интерфейс MLflow tracking, включая experiments, runs, metrics и model registry, прямо в браузере, а аутентификация AWS выполняется на backend.

Пошаговое руководство

Следующий раздел показывает, как развернуть решение. ### Предварительные требования

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

  • Учетная запись AWS account.
  • AWS Command Line Interface (AWS CLI) v2.34.5 или новее (нужно для команд create-mlflow-app, list-mlflow-apps и describe-mlflow-app).
  • Python 3.13 или новее, установленный локально (используется скриптом развертывания для разбора JSON-вывода).
  • AWS CDK v2 (aws-cdk-lib 2.243.0 или новее), установленный и bootstrapped в целевой учетной записи и Region. Инструкции см. в Getting started with the AWS CDK.
  • Node.js 18.x или новее, установленный локально для deployment через CDK.
  • Python 3.13, установленный на экземпляре Amazon EC2 (автоматизируется setup script).
  • Достаточные IAM permissions для создания VPC, экземпляров Amazon EC2, ALB, Amazon SageMaker AI domains, MLflow Apps и IAM roles.
  • Образ Ubuntu 24.04 LTS AMI, доступный в целевом AWS Region (автоматически определяется через SSM Parameter Store).
  • Необходимые знания:
    • Базовое понимание сервисов AWS и IAM permissions.
    • Знакомство с Python и Flask-приложениями.
    • Понимание концепций и операций MLflow.
  • Стоимость:
    • Это решение создает ресурсы AWS, которые могут привести к расходам.
    • К основным ресурсам, влияющим на стоимость, относятся:
      • Экземпляры Amazon EC2.
      • Application Load Balancer.
      • Ресурсы Amazon SageMaker AI.
      • Хранилище Amazon Simple Storage Service (Amazon S3).

Информацию о ценах на сервисы AWS см. в AWS Pricing Calculator.

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

В этом разделе показано, как развернуть решение в вашей учетной записи AWS и проверить его работу. Развертывание использует один скрипт deploy.sh, который оркестрирует разворачивание CDK-стека и создание serverless MLflow App.

Шаг 1: Клонируйте репозиторий и разверните инфраструктуру

  1. Скачайте код решения и установите зависимости:

    # Clone the repository
    git clone https://github.com/aws-samples/sample-sagemaker-mlflow-embedded-ui.git
    
    # Navigate to project directory and install dependencies
    cd sample-sagemaker-mlflow-embedded-ui
    npm install
    
  2. Задайте идентификатор своей учетной записи AWS и Region как переменные окружения:
    Формулы и расчет
    export CDK_DEFAULT_ACCOUNT=<your-account-id>
    export CDK_DEFAULT_REGION=<your-region>
    export AWS_DEFAULT_REGION=<your-region>
    export AWS_REGION=<your-region>
    

    Примечание: Если вы ранее разворачивали решение в другом Region, удалите кэшированный файл контекста.

    rm -f cdk.context.json
    
  3. Bootstrap your environment for AWS CDK (пропустите этот шаг, если ваша учетная запись AWS и Region уже подготовлены для AWS CDK). Bootstrap учетную запись AWS и Region для CDK:

    cdk bootstrap aws://<ACCOUNT_ID>/<REGION>
    
  4. Разверните необходимые ресурсы в своей учетной записи AWS. Запустите скрипт развертывания для создания стеков:

    bash deploy.sh
    

    Запишите DNS-имя ALB и идентификатор экземпляра Amazon EC2 из вывода развертывания. Они понадобятся на следующих шагах.

Шаг 2: Настройте Flask proxy service на Amazon EC2

  1. Войдите на экземпляр Amazon EC2, используя идентификатор экземпляра из шага 1. Используйте AWS Systems Manager Session Manager для доступа к экземпляру. Подробные инструкции см. в Session Manager connection guide.
  2. Установите Python 3.13 и зависимости. Установите пакеты Python:

    # Switch to root user
    sudo su -
    cd /root
    
    # Install Python and dependencies
    chmod +x install_python13.sh
    ./install_python13.sh
    

    Примечание: Этот скрипт работает в системах на базе Ubuntu. Для других Linux-дистрибутивов проверьте, что установлены Python 3.12+, PIP3 и Virtualenv через пакетный менеджер вашей системы.

  3. Установите и запустите MLflow proxy service:

    chmod +x setup_mlflow_proxy_app.sh
    ./setup_mlflow_proxy_app.sh
    
  4. Проверьте статус службы Flask MLflow proxy:

    systemctl status mlflowproxy
    

    Если служба не запущена, проверьте логи следующей командой.

    journalctl -u mlflowproxy
    

Шаг 3: Проверьте развертывание

В этом разделе показано, как взаимодействовать с REST API MLflow через ALB. В примерах используется протокол HTTP (без шифрования), а для production-среды рекомендуется HTTPS. В примерах ниже для запросов используется инструмент curl, но можно использовать и Postman или аналогичный инструмент.

  1. Откройте URL ALB, который вы записали на шаге 1, в браузере. Его также можно получить из вывода стека AWS CloudFormation:
    Формулы и расчет
    aws cloudformation describe-stacks --stack-name sagemaker-infra-flaskapp --query 'Stacks[0].Outputs[?OutputKey==`ALBUrl`].OutputValue' --output text
    
  2. Откройте URL ALB в браузере по адресу http://<ALB-URL>/. Вас автоматически перенаправит на /app, где React dashboard отображает интерфейс MLflow, встроенный в iframe, как показано на следующем рисунке.
    React dashboard на URL ALB с интерфейсом SageMaker AI MLflow Apps experiment tracking, встроенным в iframe
  3. Проверьте health endpoint:

    curl http://<ALB-URL>/health
    

    В ответ должно вернуться {"status": "healthy"}.

  4. Проверьте отслеживание экспериментов MLflow через REST API.
    1. Создайте experiment. Используйте REST API MLflow через ALB, чтобы создать новый experiment. Запишите experiment ID из ответа.

      curl -X POST http://<ALB-URL>/api/2.0/mlflow/experiments/create -H "Content-Type: application/json" -d '{"name": "my-first-experiment"}'
      
    2. Создайте и зафиксируйте run. Создайте run в рамках experiment и зафиксируйте metrics и parameters.

      curl -X POST http://<ALB-URL>/api/2.0/mlflow/runs/create -H "Content-Type: application/json" -d '{"experiment_id": "<ID>", "run_name": "training-run-1"}'
      
      curl -X POST http://<ALB-URL>/api/2.0/mlflow/runs/log-parameter -H "Content-Type: application/json" -d '{"run_id": "<RUN_ID>", "key": "learning_rate", "value": "0.01"}'
      
      curl -X POST http://<ALB-URL>/api/2.0/mlflow/runs/log-metric -H "Content-Type: application/json" -d '{"run_id": "<RUN_ID>", "key": "accuracy", "value": 0.95, "timestamp": 1700000000000, "step": 1}'
      
    3. Проверьте run в React dashboard. Обновите React dashboard в браузере по адресу http://<ALB-URL>/app. Теперь MLflow UI показывает experiment, runs, metrics и parameters, созданные на предыдущих шагах, как показано на следующем рисунке.
      Интерфейс MLflow в React dashboard, показывающий новый experiment, run, сохраненные parameters и metrics, созданные через REST API

Очистка ресурсов

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

  1. Запустите скрипт очистки из корня проекта.

    bash cleanup.sh
    

    Этот скрипт удаляет развернутые ресурсы в порядке обратной зависимости. Сначала он уничтожает стек Flask app, затем удаляет serverless MLflow App через AWS CLI и ждет завершения удаления. После этого он удаляет ресурсы MLflow, домен Amazon SageMaker и сетевые стеки. Сетевой стек включает custom resource на базе AWS Lambda. Перед удалением VPC он автоматически очищает созданные Amazon SageMaker AI файловые системы Amazon Elastic File System (Amazon EFS), осиротевшие сетевые интерфейсы и security groups.

  2. Ручная очистка ресурсов. Корзина Amazon S3 с артефактами MLflow имеет политику удаления RETAIN и должна быть удалена вручную, если больше не нужна. Подробные инструкции см. в Deleting a general purpose bucket в Amazon S3 User Guide.

Детали стеков CDK

Решение разворачивает четыре CDK-стека, каждый из которых отвечает за отдельный уровень архитектуры.

Networking stack

Этот стек создает VPC и связанные сетевые компоненты, включая public и private subnet, route tables и security groups. Он предоставляет сетевой фундамент, от которого зависят все остальные стеки.

SageMaker AI domain stack

Этот стек настраивает Amazon SageMaker AI domain, который служит организационным контейнером для ресурсов SageMaker. Домен предоставляет контекст идентификации и доступа, необходимый для MLflow App.

SageMaker MLflow stack

Этот стек разворачивает serverless MLflow App внутри домена SageMaker AI, где хранятся эксперименты, runs, metrics и данные model registry.

Flask application stack

Этот стек разворачивает сервис Flask reverse proxy на экземпляре Amazon EC2 за ALB. Он обрабатывает аутентификацию SigV4 и обслуживает React frontend portal.

Следующие шаги

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

  • Добавьте в портал аутентификацию SSO. Интегрируйте identity provider, например Amazon Cognito или Okta, с ALB, чтобы аутентифицировать пользователей до того, как они попадут к proxy. Инструкции см. в Authenticate users using an Application Load Balancer.
  • Защитите proxy с помощью AWS PrivateLink. Если вашей команде нужна приватная связность без выхода в публичный интернет, см. AWS PrivateLink support for Amazon SageMaker with MLflow.
  • Подробнее изучите процесс подписи AWS Signature Version 4 signing process.

При внедрении этого решения в production-среде рассмотрите дополнительные меры безопасности:

  • Настройте мониторинг Amazon CloudWatch для Flask-based proxy service, чтобы отслеживать состояние приложения, обнаруживать аномалии и настраивать оповещения о подозрительной активности. Подробнее см. Monitor your instances using CloudWatch и Create a CloudWatch alarm based on anomaly detection.
  • Реализуйте rate limiting для Flask-based proxy service, чтобы защититься от потенциальных атак denial-of-service (DoS) и ограничить число запросов от отдельных клиентов. Для этого можно использовать AWS WAF вместе с Application Load Balancer для правил на основе частоты запросов.
  • Включите HTTPS termination на уровне Application Load Balancer, чтобы обеспечить безопасную связь между клиентами и приложением. Для выдачи и управления SSL/TLS-сертификатами можно использовать ACM. Инструкции по настройке HTTPS listeners см. в Application Load Balancer HTTPS listeners documentation.

Заключение

В этом материале вы узнали, как построить панель на основе React со встроенным интерфейсом Amazon SageMaker AI MLflow Apps через iframe, поддерживаемую Flask reverse proxy, который обрабатывает аутентификацию SigV4. Это решение помогает командам ML-инфраструктуры обеспечить постоянный, сохраняемый в закладках доступ к полному опыту отслеживания экспериментов MLflow через собственный портал, интегрированный с существующей организационной инфраструктурой.

С таким подходом ваша команда получает постоянный URL для отслеживания экспериментов MLflow без presigned URL, а также прямую интеграцию с внутренними порталами, защищенными SSO. Пользователи получают полный интерфейс MLflow, включая сравнение runs, визуализацию metrics и model registry, а администраторы снижают операционные издержки за счет отказа от per-user console access. Весь solution разворачивается как infrastructure as code с автоматизированным provision и cleanup. Чтобы начать, клонируйте sample repository и разверните стек в своей учетной записи AWS.


Материал — перевод статьи с английского.

Оригинал: Build a custom portal with embedded Amazon SageMaker AI MLflow Apps