Optimice el acceso externo a Amazon SageMaker MLflow mediante un proxy API REST

Los equipos de aprendizaje automático (ML) utilizan MLflow para gestionar su ciclo de vida de ML de forma eficaz. Amazon SageMaker MLflow proporciona capacidades integrales de gestión de modelos y seguimiento de experimentos de aprendizaje automático. Sin embargo, muchas empresas tienen requisitos de infraestructura existentes que necesitan integraciones basadas en HTTPS en lugar del uso directo de SDK.

Muchas organizaciones necesitan integrar Amazon SageMaker MLflow con sus sistemas establecidos y al mismo tiempo mantener sus patrones de seguridad e infraestructura. Este desafío de integración afecta a los equipos que no pueden usar el SDK directamente debido a políticas de seguridad corporativas, restricciones de red o limitaciones del sistema heredado.

En esta publicación, demostramos cómo crear un servicio de proxy MLflow seguro basado en Flask que proporcione acceso HTTPS a Amazon SageMaker MLflow sin necesidad del SDK de MLflow. Esta solución es para organizaciones que están experimentando una transformación en la nube y desean preservar sus flujos de trabajo de aprendizaje automático existentes mientras adoptan servicios nativos de la nube.

Esta publicación cubre los siguientes temas:

Implementación del servicio de proxy de MLflow para solicitudes HTTPS de MLflow. Configuración de la autenticación de AWS Identity and Access Management (IAM) para un acceso seguro. Gestión de la prefirma de URL y transformación de solicitudes.

Después de implementar esta solución, podrá:

Acceda a SageMaker MLflow de forma segura a través de puntos finales HTTPS estándar. Mantenga el cumplimiento de los requisitos de seguridad de su organización. Integre MLflow con los sistemas empresariales existentes. Reduzca la complejidad de la implementación y los gastos generales de mantenimiento.

Descripción general de la solución

Una arquitectura de proxy MLflow ligera basada en Flask proporciona una integración segura entre los sistemas empresariales y Amazon SageMaker MLflow a través de tres componentes clave.

Componente 1: Balanceador de carga de aplicaciones (ALB)

Un AWS Application Load Balancer actúa como enrutador ascendente y proporciona lo siguiente:

Distribución de tráfico para solicitudes de API REST y UI de MLflow. Manejo y enrutamiento de solicitudes iniciales. Soporte para nombres de dominio personalizados y terminación SSL.

Nota: Esta implementación utiliza ALB, pero, alternativamente, puede utilizar otras soluciones de enrutamiento, como Nginx, según sus requisitos.

Componente 2: Servicio de proxy Flask MLflow

En el corazón de la arquitectura, una aplicación Flask basada en Python maneja lo siguiente:

Interceptar y procesar solicitudes HTTPS entrantes. Administrar la autenticación de AWS y la firma de solicitudes. Transformación de URL para un acceso seguro a los puntos finales de MLflow. Manejo del enrutamiento de respuestas a los clientes.

Componente 3: Amazon SageMaker MLflow

El servicio SageMaker MLflow administrado por AWS proporciona lo siguiente:

Compatibilidad con dos modos de implementación de MLflow: MLflow Tracking Server: servidor de seguimiento de MLflow administrado. MLflowApp: aplicación MLflow sin servidor. Almacén de metadatos backend para información de seguimiento. Almacenamiento de archivos y datos de modelos.

Esta arquitectura proporciona una comunicación segura al tiempo que mantiene la compatibilidad con los sistemas empresariales existentes. El servicio de proxy actúa como un puente, transformando las solicitudes HTTPS estándar en llamadas API de AWS autenticadas que pueden interactuar con SageMaker MLflow.

Arquitectura y flujo de trabajo de solicitudes

El siguiente diagrama muestra cómo el servicio de proxy Flask proporciona una comunicación segura entre clientes externos y Amazon SageMaker MLflow.

Figura 1: Diagrama de arquitectura que muestra la integración del servicio proxy Flask con Amazon SageMaker MLflow

El diagrama de arquitectura muestra tres componentes principales:

Un ALB que maneja el tráfico entrante. Un servicio de proxy Flask que gestiona la autenticación y la transformación de solicitudes. Amazon SageMaker MLflow que procesa operaciones de ML.

Solicitar flujo de trabajo

Exploremos cómo fluyen las solicitudes a través de esta arquitectura para proporcionar un acceso seguro a MLflow.

Cuando un cliente inicia una solicitud HTTPS, primero llega al ALB, que actúa como punto de entrada para todo el tráfico entrante. Luego, el ALB enruta estas solicitudes al servicio de proxy de MLflow.

Cuando recibe la solicitud, el servicio de proxy de MLflow realiza varias funciones críticas:

Maneja la autenticación a través de la integración de AWS IAM. Transforma las URL y las firma previamente para un acceso seguro. Procesa los puntos finales de la API REST de MLflow según sea necesario.

El servicio de proxy de MLflow transforma la solicitud entrante en una solicitud de AWS autenticada antes de realizar la llamada API a los puntos finales REST de SageMaker MLflow. Después de que SageMaker MLflow procesa la solicitud, devuelve una respuesta que el servicio proxy de MLflow procesa y enruta de regreso al cliente original.

Este flujo de trabajo mantiene la seguridad al tiempo que proporciona integración entre los sistemas empresariales y SageMaker MLflow.

Requisitos previos

Para seguir este tutorial, asegúrese de tener lo siguiente:

Una cuenta de AWS. Una estación de trabajo con las siguientes herramientas instaladas: AWS Command Line Interface (AWS CLI) configurada con permisos para crear: Amazon Virtual Private Cloud (Amazon VPC) y componentes de red asociados. Instancias de Amazon Elastic Compute Cloud (Amazon EC2). Recursos de IA de Amazon SageMaker. Depósitos de Amazon Simple Storage Service (Amazon S3). Roles y políticas de AWS Identity and Access Management (IAM). Pilas de AWS CloudFormation. Balanceadores de carga de aplicaciones de AWS. Node.js versión 18.0.0 o posterior. MNP. CLI del kit de desarrollo en la nube de AWS (AWS CDK), versión 2.100.0 o posterior. Python 3.x con pip o pip3. Conocimientos requeridos: comprensión básica de los servicios de AWS y los permisos de IAM. Familiaridad con las aplicaciones Python y Flask. Comprensión de los conceptos y operaciones de MLflow. Consideraciones de costos: esta solución crea recursos de AWS que podrían generar costos. Los recursos clave que generan costos incluyen: Instancias Amazon EC2. Balanceador de carga de aplicaciones. Recursos de IA de Amazon SageMaker. Almacenamiento de Amazon S3.

Para obtener información sobre los precios de los servicios de AWS, consulte Calculadora de precios de AWS.

Implementar la solución

Esta sección lo guiará a través de la implementación de la solución en su cuenta de AWS y su validación. El proceso de implementación dura aproximadamente 40 minutos.

Paso 1: implementar la infraestructura mediante AWS CDK

Descargue el código de la solución e instale las dependencias:

# Clonar el repositorio git clone https://github.com/aws-samples/sample-sagemaker-mlflow-rest-apis.git # Navegar al directorio del proyecto e instalar las dependencias cd sample-sagemaker-mlflow-rest-apis npm ci

Arranque su entorno para AWS CDK. Omita este paso si su cuenta y región de AWS ya están iniciadas para AWS CDK. Arranque la cuenta y región de AWS para CDK:

npx cdk arranque aws:///

Implemente los recursos necesarios en su cuenta de AWS. La solución consta de cuatro pilas de CDK: Pila de red: crea la VPC y los componentes de red. Pila de dominios de SageMaker AI: configura el dominio de SageMaker. Pila de SageMaker MLflow: implementa el servidor de seguimiento de MLflow o la aplicación sin servidor de MLflow. Pila de aplicaciones Flask: implementa el servicio de proxy MLflow.

Implemente todas las pilas con uno de los siguientes comandos.

Para realizar un seguimiento de la implementación basada en servidor:

Implementación de npx cdk –all –require-approval=never -c mlflowType=seguimiento

Para implementación basada en aplicaciones sin servidor:

Implementación de npx cdk –all –require-approval=never -c mlflowType=sin servidor

Paso 2: instalar y configurar el servicio proxy Flask MLflow

Conéctese a la instancia EC2: anote el ID de la instancia Amazon EC2 de la salida del CDK o de la sección de salida de la pila sagemaker-infra-flaskapp-{mlflowType} AWS CloudFormation. Utilice el Administrador de sesiones de AWS Systems Manager para conectarse. Siga la guía de conexión del Administrador de sesiones. Instale Python 3.13 y sus dependencias. Instale los paquetes de Python:

# Cambiar al usuario root sudo su – cd /root # Instalar Python y sus dependencias chmod +x install_python13.sh ./install_python13.sh

Nota: Este script está diseñado para sistemas basados ​​en Ubuntu. Para otras distribuciones de Linux, instale Python 3.12+, PIP3 y Virtualenv utilizando el administrador de paquetes de su sistema.

Instale e inicie el servicio de proxy MLflow:

chmod +x setup_mlflow_proxy_app.sh ./setup_mlflow_proxy_app.sh

Verifique el estado del servicio de proxy Flask MLflow:

estado systemctl mlflowproxy

Nota: Si el servicio no se está ejecutando, verifique los registros con el siguiente comando:

diarioctl -u mlflowproxy

Paso 3: Validar el acceso a la API REST de MLflow

Esta sección demuestra cómo interactuar con las API REST de MLflow a través de ALB.

Nota: Estos ejemplos utilizan el protocolo HTTP (no seguro). Para entornos de producción, recomendamos HTTPS. Usamos curl para realizar las solicitudes de API en esta publicación, pero puedes usar cualquier herramienta que prefieras. Los comandos curl proporcionados funcionan de manera idéntica tanto para el modo de servidor de seguimiento como para el modo sin servidor; el servicio proxy maneja las diferencias de forma transparente.

Obtenga su nombre DNS de ALB ejecutando el siguiente comando en su estación de trabajo:

aws cloudformation describe-stacks –stack-name sagemaker-infra-flaskapp-{mlflowType} –query 'Stacks[0].Outputs[?OutputKey==`ALBUrl`].OutputValue' –texto de salida

Pruebe los puntos finales de la API de MLflow ejecutando los siguientes comandos en su estación de trabajo. Reemplace , , y con los valores apropiados. Crea un experimento:

curl -X POST http:///ajax-api/2.0/mlflow/experiments/create -H "Tipo de contenido: aplicación/json" -d '{"nombre": "mlflow-experiment"}'

Experimentos de búsqueda:

curl -X POST http:///ajax-api/2.0/mlflow/experiments/search -H "Tipo de contenido: aplicación/json" -d '{"max_results": 5}'

Consigue un experimento:

curl -X OBTENER 'http:///ajax-api/2.0/mlflow/experiments/get?experiment_id=0'

Cree una ejecución dentro de un experimento:

curl -X POST http:///ajax-api/2.0/mlflow/runs/create -H "Tipo de contenido: aplicación/json" -d '{"experiment_id": , "run_name": ""}'

Listar artefactos de una ejecución:

curl -X OBTENER "http:///ajax-api/2.0/mlflow/artifacts/list?run_id="

Establecer una etiqueta en una carrera:

curl -X POST "http:///ajax-api/2.0/mlflow/runs/set-tag" -H "Tipo de contenido: aplicación/json" -d '{"run_id": "", "key": "model_type","value": "api-test"}'

Eliminar una ejecución:

curl -X POST http:///ajax-api/2.0/mlflow/runs/delete -H "Tipo de contenido: aplicación/json" -d '{"run_id": ""}'

Nota: También puede abrir la interfaz de usuario de MLflow y ver los cambios que realiza utilizando los comandos curl anteriores. Para obtener instrucciones sobre cómo iniciar la interfaz de usuario de MLflow, consulte Iniciar la interfaz de usuario de MLflow mediante una URL prefirmada.

Limpieza

Para evitar cargos continuos y eliminar los recursos creados por esta solución, siga estos pasos de limpieza:

Elimine los recursos administrados por CDK. Navegue hasta el directorio raíz del repositorio clonado en su estación de trabajo y ejecute lo siguiente. Para realizar un seguimiento de la implementación basada en servidor:

npx cdk destruir –all -c mlflowType=seguimiento

Para implementación basada en aplicaciones sin servidor:

npx cdk destruir –all -c mlflowType=sin servidor

Nota: Las pilas de red y de dominio de SageMaker se comparten en ambos modos de implementación. AWS CDK solo los elimina cuando se elimina el último par de pilas de aplicaciones de MLflow o Flask.

Limpieza manual de recursos. Es posible que algunos recursos requieran eliminación manual debido a políticas de retención o dependencias: Buckets de Amazon S3: navegue hasta la consola de Amazon S3. Identifique los depósitos creados por esta solución. Vacíe cada depósito y elimínelo. Grupos de registros de Amazon CloudWatch: en la consola de CloudWatch, busque los grupos de registros asociados con esta solución. Elimine estos grupos de registros.

Consideraciones de seguridad

Cuando implemente esta solución en un entorno de producción, considere las siguientes medidas de seguridad:

Configure la supervisión de Amazon CloudWatch para que el servicio de proxy basado en Flask realice un seguimiento del estado de las aplicaciones, detecte anomalías y configure alertas para actividades sospechosas. Implemente una limitación de velocidad para el servicio de proxy basado en Flask para proteger contra posibles ataques de denegación de servicio (DoS) y controlar la cantidad de solicitudes de clientes individuales. Puede utilizar AWS WAF (firewall de aplicaciones web) con ALB para implementar reglas basadas en tarifas. Implemente un ALB interno (sin conexión a Internet) para restringir el acceso del proxy a su red privada. Esta configuración garantiza que solo el tráfico procedente de su VPC o de las redes conectadas pueda llegar al servicio. Conéctese a través del emparejamiento de VPC o AWS Transit Gateway. Habilite la terminación HTTPS en el nivel ALB para una comunicación segura entre los clientes y su aplicación. Puede utilizar AWS Certificate Manager (ACM) para aprovisionar y administrar certificados SSL/TLS para su aplicación. Para obtener instrucciones sobre cómo configurar escuchas HTTPS, consulte la documentación de escuchas HTTPS de Application Load Balancer.

Estas medidas de seguridad ayudan a proteger la aplicación Flask contra vulnerabilidades web comunes y proporcionan una comunicación segura entre componentes.

Conclusión

En esta publicación, mostramos cómo crear un servicio de proxy seguro basado en Flask que proporcione acceso HTTPS a Amazon SageMaker MLflow. Esta solución ayuda a las organizaciones a unir su infraestructura existente con capacidades de MLflow administradas por AWS mientras mantiene los requisitos de seguridad empresarial.

Beneficios de la solución:

Integración con controles de seguridad empresariales existentes. Cambios mínimos en los flujos de trabajo de ML existentes. Complejidad de implementación reducida. Integración de API REST. Compatibilidad con servicios de proxy empresarial.

Próximos pasos

Para obtener más información sobre Amazon SageMaker MLflow y temas relacionados, puede:

Pruebe esta solución en su propio entorno y cuéntenos su experiencia en los comentarios.

Sobre los autores

Manish Garg

Manish Garg

Manish es consultor de entrega de AWS Professional Services y se especializa en migrar y modernizar cargas de trabajo de clientes en la nube de AWS. Posee un profundo entusiasmo por la tecnología, junto con un gran interés en el ámbito de las prácticas de DevOps.

Ram Yennapusa

Ram Yennapusa

Ram es consultor senior de entrega en Amazon Web Services (AWS). Trabaja con clientes empresariales para diseñar e implementar soluciones basadas en la nube a escala, con especial atención en DevOps y MLOps. Ram tiene más de 15 años de experiencia en desarrollo de software y arquitectura de nube, ayudando a las organizaciones a recorrer su viaje de transformación de la nube. Ayuda a los clientes a crear soluciones eficientes, seguras y escalables en AWS.

Ashish Bhatt

Ashish Bhatt

Ashish es consultor senior de entrega de AWS Professional Services y se especializa en diseñar y crear soluciones para cargas de trabajo de clientes en la nube de AWS. Aporta una profunda experiencia en DevOps, MLOps e ingeniería de plataformas, centrándose en la creación de plataformas de infraestructura escalables y capacitando a los equipos de desarrollo a través de soluciones modernas de ingeniería de plataformas.