Logotipo de Zephyrnet

Lleve el código de aprendizaje automático heredado a Amazon SageMaker mediante AWS Step Functions

Fecha:

Decenas de miles de clientes de AWS utilizan los servicios de aprendizaje automático (ML) de AWS para acelerar su desarrollo de ML con infraestructura y herramientas completamente administradas. Los clientes que han estado desarrollando modelos de ML en las instalaciones, como su escritorio local, desean migrar sus modelos de ML heredados a la nube de AWS para aprovechar al máximo el conjunto más completo de servicios, infraestructura y recursos de implementación de ML disponibles en AWS. .

El término código heredado hace referencia al código que se desarrolló para ejecutarse manualmente en un escritorio local y no está creado con SDK listos para la nube, como el AWS SDK para Python (Boto3) or SDK de Amazon SageMaker Python. En otras palabras, estos códigos heredados no están optimizados para la implementación en la nube. La mejor práctica para la migración es refactorizar estos códigos heredados usando el API de Amazon SageMaker o el SDK de Python de SageMaker. Sin embargo, en algunos casos, las organizaciones con una gran cantidad de modelos heredados pueden no tener el tiempo o los recursos para reescribir todos esos modelos.

En esta publicación, compartimos un enfoque escalable y fácil de implementar para migrar el código ML heredado a la nube de AWS para la inferencia mediante Amazon SageMaker y Funciones de paso de AWS, con una cantidad mínima de refactorización de código requerida. Puede ampliar fácilmente esta solución para agregar más funciones. Demostramos cómo dos personas diferentes, un científico de datos y un ingeniero de MLOps, pueden colaborar para levantar y cambiar cientos de modelos heredados.

Resumen de la solución

En este marco, ejecutamos el código heredado en un contenedor como un Procesamiento SageMaker trabajo. SageMaker ejecuta el script heredado dentro de un contenedor de procesamiento. La imagen del contenedor de procesamiento puede ser una imagen integrada de SageMaker o una imagen personalizada. SageMaker administra completamente la infraestructura subyacente para un trabajo de procesamiento. No se requiere ningún cambio en el código heredado. Todo lo que se requiere es estar familiarizado con la creación de trabajos de procesamiento de SageMaker.

Asumimos la participación de dos personas: un científico de datos y un ingeniero de MLOps. El científico de datos es responsable de mover el código a SageMaker, ya sea manualmente o clonándolo desde un repositorio de código como Compromiso de código de AWS. Estudio Amazon SageMaker proporciona un entorno de desarrollo integrado (IDE) para implementar varios pasos en el ciclo de vida de ML, y el científico de datos lo usa para crear manualmente un contenedor personalizado que contiene los artefactos de código necesarios para la implementación. El contenedor se inscribirá en un registro de contenedores como Registro de contenedores elásticos de Amazon (Amazon ECR) con fines de implementación.

El ingeniero de MLOps se encarga de crear un flujo de trabajo de Step Functions que podemos reutilizar para implementar el contenedor personalizado desarrollado por el científico de datos con los parámetros apropiados. El flujo de trabajo de Step Functions puede ser tan modular como sea necesario para adaptarse al caso de uso, o puede consistir en un solo paso para iniciar un solo proceso. Para minimizar el esfuerzo requerido para migrar el código, hemos identificado tres componentes modulares para crear un proceso de implementación completamente funcional:

  • preprocesamiento
  • Inferencia
  • Postprocesamiento

El siguiente diagrama ilustra la arquitectura y el flujo de trabajo de nuestra solución.

Los siguientes pasos están involucrados en esta solución:

  1. El personaje científico de datos usa Studio para importar código heredado a través de la clonación de un repositorio de código y luego modular el código en componentes separados que siguen los pasos del ciclo de vida de ML (preprocesamiento, inferencia y posprocesamiento).
  2. El científico de datos usa Studio, y específicamente el CLI de compilación de imágenes de Studio herramienta proporcionada por SageMaker, para construir una imagen de Docker. Esta herramienta CLI permite que el científico de datos cree la imagen directamente en Studio y registra automáticamente la imagen en Amazon ECR.
  3. El ingeniero de MLOps usa la imagen del contenedor registrado y crea una implementación para un caso de uso específico usando Step Functions. Step Functions es un servicio de flujo de trabajo sin servidor que puede controlar las API de SageMaker directamente mediante el uso del lenguaje de estados de Amazon.

Trabajo de procesamiento de SageMaker

Entendamos cómo un Trabajo de procesamiento de SageMaker carreras. El siguiente diagrama muestra cómo SageMaker activa un trabajo de procesamiento.

SageMaker toma su secuencia de comandos, copia sus datos de Servicio de almacenamiento simple de Amazon (Amazon S3), y luego extrae un contenedor de procesamiento. La imagen del contenedor de procesamiento puede ser una imagen integrada de SageMaker o una imagen personalizada que proporcione. SageMaker administra completamente la infraestructura subyacente para un trabajo de procesamiento. Los recursos del clúster se aprovisionan durante la duración de su trabajo y se limpian cuando se completa un trabajo. El resultado del trabajo de procesamiento se almacena en el depósito de S3 que especificó. Para obtener más información sobre cómo construir su propio contenedor, consulte Cree su propio contenedor de procesamiento (escenario avanzado).

El trabajo de procesamiento de SageMaker configura su imagen de procesamiento mediante un script de punto de entrada del contenedor de Docker. También puede proporcionar su propio punto de entrada personalizado utilizando los parámetros ContainerEntrypoint y ContainerArguments del Especificación de la aplicación API. Si usa su propio punto de entrada personalizado, tiene la flexibilidad adicional de ejecutarlo como un script independiente sin reconstruir sus imágenes.

Para este ejemplo, construimos un contenedor personalizado y usamos un trabajo de procesamiento de SageMaker para la inferencia. Los trabajos de preprocesamiento y posprocesamiento utilizan el modo script con un contenedor scikit-learn prediseñado.

Requisitos previos

Para seguir esta publicación, complete los siguientes pasos previos:

  1. Cree un dominio de estudio. Para obtener instrucciones, consulte Incorporación al dominio de Amazon SageMaker mediante la configuración rápida.
  2. Cree un depósito de S3.
  3. Clonar lo provisto Repositorio GitHub en Estudio.

El repositorio de GitHub está organizado en diferentes carpetas que corresponden a varias etapas del ciclo de vida de ML, lo que facilita la navegación y la administración:

Migrar el código heredado

En este paso, actuamos como el científico de datos responsable de migrar el código heredado.

Empezamos abriendo el build_and_push.ipynb cuaderno.

La celda inicial en el cuaderno lo guía en la instalación del CLI de compilación de imágenes de Studio. Esta CLI simplifica el proceso de configuración al crear automáticamente un entorno de compilación reutilizable con el que puede interactuar a través de comandos de alto nivel. Con la CLI, crear una imagen es tan fácil como decirle que la cree, y el resultado será un enlace a la ubicación de su imagen en Amazon ECR. Este enfoque elimina la necesidad de administrar el complejo flujo de trabajo subyacente orquestado por la CLI, lo que agiliza el proceso de creación de imágenes.

Antes de ejecutar el comando de compilación, es importante asegurarse de que el rol que ejecuta el comando tenga los permisos necesarios, como se especifica en la CLI. GitHub Léame o Publicación relacionada. Si no se otorgan los permisos necesarios, se pueden producir errores durante el proceso de compilación.

Ver el siguiente código:

#Install sagemaker_studio_image_build utility
import sys
!{sys.executable} -m pip install sagemaker_studio_image_build

Para optimizar su código heredado, divídalo en tres secuencias de comandos de Python distintas denominadas preprocessing.py, predict.py y postprocessing.py. Adhiérase a las mejores prácticas de programación al convertir el código en funciones que se llaman desde una función principal. Asegúrese de importar todas las bibliotecas necesarias y de actualizar el archivo requirements.txt para incluir las bibliotecas personalizadas.

Después de organizar el código, empaquetarlo junto con el archivo de requisitos en un contenedor de Docker. Puede crear fácilmente el contenedor desde Studio con el siguiente comando:

sm-docker build .

De forma predeterminada, la imagen se enviará a un repositorio de ECR llamado sagemakerstudio con la etiqueta más reciente. Además, se utilizará la función de ejecución de la aplicación Studio, junto con el depósito SageMaker Python SDK S3 predeterminado. Sin embargo, esta configuración se puede modificar fácilmente mediante las opciones de CLI adecuadas. Ver el siguiente código:

sm-docker build . --repository mynewrepo:1.0 --role SampleDockerBuildRole --bucket sagemaker-us-east-1-0123456789999 --vpc-id vpc-0c70e76ef1c603b94 --subnet-ids subnet-0d984f080338960bb,subnet-0ac3e96808c8092f2 --security-group-ids sg-0d31b4042f2902cd0

Ahora que el contenedor se ha creado y registrado en un repositorio de ECR, es hora de profundizar en cómo podemos usarlo para ejecutar predict.py. También le mostramos el proceso de usar un preconstruido scikit-aprender contenedor para ejecutar preprocessing.py y postprocessing.py.

Producción del contenedor

En este paso, actuamos como el ingeniero de MLOps que produce el contenedor creado en el paso anterior.

Usamos Step Functions para orquestar el flujo de trabajo. Step Functions permite una flexibilidad excepcional en la integración de una amplia gama de servicios en el flujo de trabajo, acomodando cualquier dependencia existente que pueda existir en el sistema heredado. Este enfoque garantiza que todos los componentes necesarios se integren a la perfección y se ejecuten en la secuencia deseada, lo que da como resultado una solución de flujo de trabajo eficiente y eficaz.

Step Functions puede controlar ciertos servicios de AWS directamente desde el lenguaje de estados de Amazon. Para obtener más información sobre cómo trabajar con Step Functions y su integración con SageMaker, consulte Administre SageMaker con funciones de pasos. Con la capacidad de integración de Step Functions con SageMaker, ejecutamos los scripts de preprocesamiento y posprocesamiento mediante un trabajo de procesamiento de SageMaker en modo script y ejecutamos la inferencia como un trabajo de procesamiento de SageMaker mediante un contenedor personalizado. Lo hacemos usando AWS SDK para Python (Boto3) Creartrabajo de procesamiento Llamadas a API.

preprocesamiento

SageMaker ofrece varias opciones para ejecutar código personalizado. Si solo tiene una secuencia de comandos sin dependencias personalizadas, puede ejecutar la secuencia de comandos como Traiga su propia secuencia de comandos (BYOS). Para hacer esto, simplemente pase su secuencia de comandos al contenedor del marco de trabajo scikit-learn preconstruido y ejecute un trabajo de procesamiento de SageMaker en modo secuencia de comandos usando los parámetros ContainerArguments y ContainerEntrypoint en el Especificación de la aplicación API. Este es un método directo y conveniente para ejecutar scripts simples.

Consulte la configuración de estado del "Modo de secuencia de comandos de preprocesamiento" en el ejemplo de flujo de trabajo de Step Functions para comprender cómo configurar la llamada a la API CreateProcessingJob para ejecutar un script personalizado.

Inferencia

Puede ejecutar un contenedor personalizado usando el Construya su propio contenedor de procesamiento acercarse. El trabajo de procesamiento de SageMaker funciona con el /opt/ml ruta local, y puede especificar sus ProcessingInputs y su ruta local en la configuración. A continuación, el trabajo de procesamiento copia los artefactos en el contenedor local e inicia el trabajo. Una vez que se completa el trabajo, copia los artefactos especificados en la ruta local de ProcessingOutputs a su ubicación externa especificada.

Consulte la configuración de estado del "Contenedor personalizado de inferencia" en el ejemplo de flujo de trabajo de Step Functions para comprender cómo configurar la llamada a la API CreateProcessingJob para ejecutar un contenedor personalizado.

Postprocesamiento

Puede ejecutar un script de posprocesamiento como un script de preprocesamiento mediante el paso CreateProcessingJob de Step Functions. Ejecutar un script de posprocesamiento le permite realizar tareas de procesamiento personalizadas una vez que se completa el trabajo de inferencia.

Crear el flujo de trabajo de Step Functions

Para la creación rápida de prototipos, utilizamos las funciones de paso Idioma de los estados amazónicos. Puede editar la definición de Step Functions directamente usando el lenguaje de estados. Referirse a ejemplo de flujo de trabajo de Step Functions.

Puede crear una nueva máquina de estado de Step Functions en la consola de Step Functions seleccionando Escriba su flujo de trabajo en código.

Step Functions puede ver los recursos que usa y crear un rol. Sin embargo, es posible que vea el siguiente mensaje:

“Step Functions no puede generar una política de IAM si el RoleArn para SageMaker es de una ruta. Codifique el SageMaker RoleArn en la definición de su máquina de estado o elija un rol existente con los permisos adecuados para que Step Functions llame a SageMaker”.

Para abordar esto, debe crear un Gestión de identidades y accesos de AWS (IAM) rol para Step Functions. Para obtener instrucciones, consulte Creación de un rol de IAM para su máquina de estado. A continuación, adjunte la siguiente política de IAM para proporcionar los permisos necesarios para ejecutar el flujo de trabajo:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:createProcessingJob", "sagemaker:ListTags", "sagemaker:AddTags" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } } ]
}

La siguiente figura ilustra el flujo de datos e imágenes de contenedor en cada paso del flujo de trabajo de Step Functions.

La siguiente es una lista de los parámetros mínimos requeridos para inicializar en Step Functions; también puede referirse a la parámetros de entrada de muestra JSON:

  • entrada_uri – El URI de S3 para los archivos de entrada
  • salida_uri – El URI de S3 para los archivos de salida
  • código_uri – El URI de S3 para archivos de secuencias de comandos
  • uri_imagen_personalizada – El URI del contenedor para el contenedor personalizado que ha creado
  • scikit_image_uri – El URI del contenedor para el marco scikit-learn preconstruido
  • papel – El rol de ejecución para ejecutar el trabajo.
  • tipo_instancia – El tipo de instancia que necesita usar para ejecutar el contenedor
  • volumen_tamaño – El tamaño del volumen de almacenamiento que necesita para el contenedor
  • tiempo_ejecución máximo – El tiempo de ejecución máximo para el contenedor, con un valor predeterminado de 1 hora

Ejecute el flujo de trabajo

Hemos desglosado el código heredado en partes manejables: preprocesamiento, inferencia y posprocesamiento. Para respaldar nuestras necesidades de inferencia, construimos un contenedor personalizado equipado con las dependencias de biblioteca necesarias. Nuestro plan es utilizar Step Functions, aprovechando su capacidad para llamar a la API de SageMaker. Hemos mostrado dos métodos para ejecutar código personalizado con la API de SageMaker: un trabajo de procesamiento de SageMaker que utiliza una imagen preconstruida y toma un script personalizado en tiempo de ejecución, y un trabajo de procesamiento de SageMaker que usa un contenedor personalizado, que se empaqueta con la información necesaria. artefactos para ejecutar una inferencia personalizada.

La siguiente figura muestra la ejecución del flujo de trabajo de Step Functions.

Resumen

En esta publicación, discutimos el proceso de migrar el código ML Python heredado de los entornos de desarrollo locales y la implementación de un procedimiento MLOps estandarizado. Con este enfoque, puede transferir sin esfuerzo cientos de modelos e incorporar las prácticas de implementación empresarial deseadas. Presentamos dos métodos diferentes para ejecutar código personalizado en SageMaker, y puede seleccionar el que mejor se adapte a sus necesidades.

Si necesita una solución altamente personalizable, se recomienda utilizar el enfoque de contenedor personalizado. Es posible que le resulte más adecuado utilizar imágenes prediseñadas para ejecutar su secuencia de comandos personalizada si tiene secuencias de comandos básicas y no necesita crear su contenedor personalizado, como se describe en el paso de preprocesamiento mencionado anteriormente. Además, si es necesario, puede aplicar esta solución para incluir en contenedores los pasos de evaluación y capacitación del modelo heredado, tal como se incluye el paso de inferencia en esta publicación.


Acerca de los autores

Bhavana Chirumamilla es un arquitecto residente sénior en AWS con una gran pasión por las operaciones de datos y aprendizaje automático. Ella aporta una gran experiencia y entusiasmo para ayudar a las empresas a crear datos efectivos y estrategias de ML. En su tiempo libre, a Bhavana le gusta pasar tiempo con su familia y participar en diversas actividades, como viajar, hacer caminatas, hacer jardinería y mirar documentales.

Shyam Namavaram es arquitecto sénior de soluciones especializadas en inteligencia artificial (IA) y aprendizaje automático (ML) en Amazon Web Services (AWS). Trabaja apasionadamente con los clientes para acelerar su adopción de IA y ML al brindar orientación técnica y ayudarlos a innovar y crear soluciones de nube seguras en AWS. Se especializa en AI y ML, contenedores y tecnologías de análisis. Fuera del trabajo, le encanta hacer deporte y experimentar la naturaleza con el trekking.

qingweili es un especialista en aprendizaje automático en Amazon Web Services. Recibió su doctorado en Investigación de Operaciones después de que rompió la cuenta de subvenciones de investigación de su asesor y no pudo entregar el Premio Nobel que prometió. Actualmente, ayuda a los clientes de la industria de seguros y servicios financieros a crear soluciones de aprendizaje automático en AWS. En su tiempo libre le gusta leer y enseñar.

Srinivasa Shaik es arquitecto de soluciones en AWS con sede en Boston. Ayuda a los clientes empresariales a acelerar su viaje a la nube. Le apasionan los contenedores y las tecnologías de aprendizaje automático. En su tiempo libre, disfruta pasar tiempo con su familia, cocinar y viajar.

punto_img

Información más reciente

punto_img