Optimice el aprovisionamiento de entornos personalizados para Amazon SageMaker Studio: un enfoque automatizado de canalización de CI/CD

Adjuntar una imagen de Docker personalizada a un Amazon SageMaker Estudio El dominio implica varios pasos. Primero, necesitas construir y enviar la imagen a Registro de contenedores elásticos de Amazon (Amazon ECR). También es necesario asegurarse de que el Amazon SageMaker El rol de ejecución del dominio tiene los permisos necesarios para extraer la imagen de Amazon ECR. Después de enviar la imagen a Amazon ECR, crea una imagen personalizada de SageMaker en el Consola de administración de AWS. Por último, actualice la configuración del dominio de SageMaker para especificar el nombre de recurso de Amazon (ARN) de la imagen personalizada. Este proceso de varios pasos debe seguirse manualmente cada vez que los usuarios finales crean nuevas imágenes de Docker personalizadas para que estén disponibles en SageMaker Studio.

En este post te explicamos cómo automatizar este proceso. Este enfoque le permite actualizar la configuración de SageMaker sin escribir código de infraestructura adicional, aprovisionar imágenes personalizadas y adjuntarlas a dominios de SageMaker. Al adoptar esta automatización, puede implementar entornos de análisis consistentes y estandarizados en toda su organización, lo que aumenta la productividad del equipo y mitiga los riesgos de seguridad asociados con el uso de imágenes únicas.

La solución descrita en esta publicación está dirigida a ingenieros de aprendizaje automático (ML) y equipos de plataformas que a menudo son responsables de administrar y estandarizar entornos personalizados a escala en toda una organización. Para los científicos de datos individuales que buscan una experiencia de autoservicio, recomendamos que utilicen el soporte nativo de Docker en SageMaker Studio, como se describe en Acelere los flujos de trabajo de aprendizaje automático con el modo local de Amazon SageMaker Studio y la compatibilidad con Docker. Esta característica permite a los científicos de datos crear, probar e implementar contenedores Docker personalizados directamente dentro del entorno de desarrollo integrado (IDE) de SageMaker Studio, lo que le permite experimentar de forma iterativa con sus entornos de análisis sin problemas dentro de la interfaz familiar de SageMaker Studio.

Descripción general de la solución

El siguiente diagrama ilustra la arquitectura de la solución.

Implementamos una tubería usando AWS CodePipelineque automatiza la creación de una imagen Docker personalizada y el adjunto de la imagen a un dominio de SageMaker. La canalización primero verifica la base del código del repositorio de GitHub y crea imágenes de Docker personalizadas según la configuración declarada en los archivos de configuración. Después de crear y enviar con éxito imágenes de Docker a Amazon ECR, la canalización valida la imagen mediante exploración y comprobar si hay vulnerabilidades de seguridad en la imagen. Si no se encuentran vulnerabilidades críticas o de alta seguridad, el proceso continúa hasta la etapa de aprobación manual antes de la implementación. Una vez completada la aprobación manual, la canalización implementa el dominio de SageMaker y adjunta imágenes personalizadas al dominio automáticamente.

Requisitos previos

Los requisitos previos para implementar la solución descrita en esta publicación incluyen:

Implementar la solución

Complete los siguientes pasos para implementar la solución:

  1. Inicie sesión en su cuenta de AWS utilizando la CLI de AWS en un terminal shell (para obtener más detalles, consulte Autenticación con credenciales a corto plazo para la CLI de AWS).
  2. Ejecute el siguiente comando para asegurarse de haber iniciado sesión correctamente en su cuenta de AWS:
aws sts get-caller-identity

  1. bifurca el repositorio de GitHub a tu cuenta de GitHub.
  2. Clona el repositorio bifurcado en tu estación de trabajo local usando el siguiente comando:
git clone <clone_url_of_forked_repo>

  1. Inicie sesión en la consola y cree una Código de AWS conexión al repositorio de GitHub en el paso anterior. Para obtener instrucciones, consulte Crear una conexión a GitHub (consola).
  2. Copie el ARN de la conexión que creó.
  3. Vaya a la terminal y ejecute el siguiente comando para cd en el directorio del repositorio:
cd streamline-sagemaker-custom-images-cicd

  1. Ejecute el siguiente comando para instalar todas las bibliotecas desde npm:
  1. Ejecute los siguientes comandos para ejecutar un script de shell en la terminal. Este script tomará su número de cuenta de AWS y la región de AWS como parámetros de entrada e implementará una pila de AWS CDK, que implementa componentes como CodePipeline, Construcción de código AWSel repositorio ECR, etc. Utilice una VPC existente para configurar la variable de exportación VPC_ID a continuación. Si no tiene una VPC, cree una con al menos dos subredes y úsela.
export AWS_ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
export AWS_REGION=<YOUR_AWS_REGION>
export VPC_ID=<VPC_ID_TO_DEPLOY>
export CODESTAR_CONNECTION_ARN=<CODE_STAR_CONNECTION_ARN_CREATED_IN_ABOVE_STEP>
export REPOSITORY_OWNER=<YOUR_GITHUB_LOGIN_ID>

  1. Ejecute el siguiente comando para implementar la infraestructura de AWS utilizando AWS CDK V2 y asegúrese de esperar a que la plantilla se ejecute correctamente:
cdk deploy PipelineStack --require-approval never

  1. En la consola CodePipeline, elija Tuberías en el panel de navegación.
  2. Elija el enlace para la canalización denominada sagemaker-custom-image-pipeline.

Canalización de imágenes personalizadas de Sagemaker

  1. Puede seguir el progreso de la canalización en la consola y proporcionar aprobación en la etapa de aprobación manual para implementar la infraestructura de SageMaker. La canalización tarda aproximadamente entre 5 y 8 minutos en crear una imagen y pasar a la etapa de aprobación manual.
  2. Espere a que la canalización complete la etapa de implementación.

La canalización crea recursos de infraestructura en su cuenta de AWS con un dominio de SageMaker y una imagen personalizada de SageMaker. También adjunta la imagen personalizada al dominio de SageMaker.

  1. En la consola de SageMaker, elija Dominios bajo Configuraciones de administrador en el panel de navegación.

  1. Abra el dominio llamado team-ds y navegue hasta el Ambiente

Debería poder ver una imagen personalizada adjunta.

Cómo se implementan y adjuntan las imágenes personalizadas

CodePipeline tiene una etapa llamada BuildCustomImages que contiene los pasos automatizados para crear una imagen personalizada de SageMaker utilizando la CLI de imagen personalizada de SageMaker y enviarla al repositorio de ECR creado en la cuenta de AWS. La pila de AWS CDK en la etapa de implementación tiene los pasos necesarios para crear un dominio de SageMaker y adjuntar una imagen personalizada al dominio. Los parámetros para crear el dominio de SageMaker, la imagen personalizada, etc., se configuran en formato JSON y se utilizan en la pila de SageMaker en el directorio lib. Consulte el sagemakerConfig sección en environments/config.json para parámetros declarativos.

Añade más imágenes personalizadas

Ahora puede agregar su propia imagen de Docker personalizada para adjuntarla al dominio de SageMaker creado por la canalización. Para las imágenes personalizadas que se están creando, consulte Especificaciones del archivo Docker para las especificaciones de imagen de Docker.

  1. cd en el directorio de imágenes en el repositorio de la terminal:
  1. Cree un nuevo directorio (por ejemplo, personalizado) en el directorio de imágenes:
  1. Agregue su propio Dockerfile a este directorio. Para realizar pruebas, puede utilizar la siguiente configuración de Dockerfile:
FROM public.ecr.aws/amazonlinux/amazonlinux:2
ARG NB_USER="sagemaker-user"
ARG NB_UID="1000"
ARG NB_GID="100"
RUN yum update -y && \
    yum install python3 python3-pip shadow-utils -y && \
    yum clean all
RUN yum install --assumeyes python3 shadow-utils && \
    useradd --create-home --shell /bin/bash --gid "${NB_GID}" --uid ${NB_UID} ${NB_USER} && \
    yum clean all && \
    python3 -m pip install jupyterlab
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install --upgrade urllib3==1.26.6
USER ${NB_UID}
CMD jupyter lab --ip 0.0.0.0 --port 8888 \
--ServerApp.base_url="/jupyterlab/default" \
--ServerApp.token='' \
--ServerApp.allow_origin='*'

  1. Actualice la sección de imágenes en el archivo json en el directorio de entornos para agregar el nuevo nombre del directorio de imágenes que ha creado:
"images": [
      "repositoryName": "research-platform-ecr",
       "tags":[
         "jlab",
         "custom" << Add here
       ]
      }
    ]

  1. Actualizar el mismo nombre de imagen en customImages bajo la configuración del dominio SageMaker creado:
"customImages":[
          "jlab",
          "custom" << Add here
 ],

  1. Confirme y envíe cambios al repositorio de GitHub.
  2. Debería ver que CodePipeline se activa al presionar. Siga el progreso del proceso y proporcione aprobación manual para la implementación.

Una vez que la implementación se complete exitosamente, debería poder ver que la imagen personalizada que agregó está adjunta a la configuración del dominio (como se muestra en la siguiente captura de pantalla).

Imagen personalizada 2

Limpiar

Para limpiar sus recursos, abra la consola de AWS CloudFormation y elimine las pilas SagemakerImageStack y PipelineStack en ese orden. Si encuentra errores como “El depósito S3 no está vacío” o “El repositorio ECR tiene imágenes”, puede eliminar manualmente el depósito S3 y el repositorio ECR que se creó. Luego puede volver a intentar eliminar las pilas de CloudFormation.

Conclusión

En esta publicación, mostramos cómo crear una solución automatizada de canalización de integración y entrega continua (CI/CD) para crear, escanear e implementar imágenes Docker personalizadas en dominios de SageMaker Studio. Puede utilizar esta solución para promover la coherencia de los entornos analíticos para los equipos de ciencia de datos en toda su empresa. Este enfoque le ayuda a lograr la gobernanza, la escalabilidad y la estandarización del aprendizaje automático (ML).


Acerca de los autores

Muni Annachiconsultor senior de DevOps en AWS, cuenta con más de una década de experiencia en arquitectura e implementación de sistemas de software y plataformas en la nube. Se especializa en guiar a organizaciones sin fines de lucro para que adopten arquitecturas DevOps CI/CD, adhiriéndose a las mejores prácticas de AWS y al marco de buena arquitectura de AWS. Más allá de su actividad profesional, Muni es un apasionado del deporte y prueba suerte en la cocina.

Ajay Raghunathan es ingeniero de aprendizaje automático en AWS. Su trabajo actual se centra en diseñar e implementar soluciones de aprendizaje automático a escala. Es un entusiasta de la tecnología y un constructor con un área principal de interés en AI/ML, análisis de datos, serverless y DevOps. Fuera del trabajo, le gusta pasar tiempo con la familia, viajar y jugar al fútbol.

Arun Dyasani es arquitecto senior de aplicaciones en la nube en AWS. Su trabajo actual se centra en el diseño e implementación de soluciones de software innovadoras. Su función se centra en la creación de arquitecturas robustas para aplicaciones complejas, aprovechando su profundo conocimiento y experiencia en el desarrollo de sistemas a gran escala.

Shweta Singh es gerente senior de productos en el equipo de la plataforma de aprendizaje automático Amazon SageMaker en AWS y lidera el SDK de Python de SageMaker. Ha trabajado en varios puestos de productos en Amazon durante más de 5 años. Tiene una licenciatura en Ingeniería Informática y una Maestría en Ciencias en Ingeniería Financiera, ambas de la Universidad de Nueva York.

Jenna Eun es gerente principal de práctica del equipo de salud y computación avanzada de AWS Professional Services. Su equipo se centra en diseñar y ofrecer datos, aprendizaje automático y soluciones informáticas avanzadas para el sector público, incluidos los gobiernos federal, estatal y local, centros médicos académicos, organizaciones sanitarias sin fines de lucro e instituciones de investigación.

Meenakshi Ponn Shankaran es arquitecto de dominio principal en AWS en la organización de servicios profesionales de datos y aprendizaje automático. Tiene una amplia experiencia en el diseño y construcción de lagos de datos a gran escala, manejando petabytes de datos. Actualmente, se concentra en brindar liderazgo técnico a los clientes del sector público de EE. UU. de AWS, guiándolos en el uso de servicios innovadores de AWS para cumplir sus objetivos estratégicos y desbloquear todo el potencial de sus datos.