Wed. Sep 28th, 2022

Infraestructura como código con SageMaker

Imagen de Unsplash de Abraham Barrera En el pasado, trabajé con SageMaker Deployment a través de Jupyter Notebooks y scripts de Python. Esto está completamente bien, pero muchas veces en el ámbito de aplicaciones más grandes, debe poder definir sus recursos de SageMaker con el resto de su infraestructura en una plantilla central. Esto trae la idea de Infraestructura como código, que luego trae AWS CloudFormation. Cuando se trata de producir aplicaciones, es esencial poder capturar sus recursos en una especie de plantilla central, se vuelve realmente difícil mantener o administrar procesos aislados para cuadernos o scripts individuales. En este artículo, veremos cómo puede usar CloudFormation para definir sus recursos de SageMaker y crear un punto final en tiempo real. Al utilizar esta plantilla, debería poder extrapolar y crear plantillas de CloudFormation para otras opciones de inferencia de SageMaker, como terminales de varios modelos, inferencia sin servidor e inferencia asíncrona.NOTA: Para aquellos de ustedes que son nuevos en AWS, asegúrese de crear una cuenta en el siguiente enlace si desea seguir. Asegúrese también de tener instalada la CLI de AWS para trabajar con el ejemplo. Este artículo también asumirá un conocimiento básico de CloudFormation, eche un vistazo a este artículo aquí si necesita una guía de inicio. El artículo también asume una comprensión intermedia de la implementación de SageMaker. Sugeriría seguir este artículo para comprender la implementación/inferencia más a fondo. Usaremos el mismo modelo en este artículo y lo asignaremos a CloudFormation.

Configuración

Antes de que podamos construir nuestra plantilla de CloudFormation, debemos comprender lo que necesitamos para nuestro punto final de SageMaker. Para este caso de uso, implementaremos un modelo de Sklearn entrenado previamente en un punto final en tiempo real de SageMaker. Utilizando la siguiente secuencia de comandos, podemos ejecutar rápidamente un modelo de regresión lineal y producir un artefacto de datos del modelo. Por lo general, con SageMaker Inference también necesita una secuencia de comandos de inferencia que controle su procesamiento previo y posterior con código personalizado. Script de inferencia SageMaker Inference espera que estos datos del modelo y la secuencia de comandos de inferencia se empaqueten en un tarball, por lo que ejecutamos la siguiente secuencia de comandos para convertir estos recursos en el formato esperado y cárguelo en un S3 Bucket. Crear y cargar model.tar.gz Ahora que tenemos nuestro artefacto modelo, podemos proceder a trabajar con CloudFormation.

Definición de parámetros de CloudFormation

Una plantilla de CloudFormation es un archivo yaml o json en el que define toda su infraestructura. Los parámetros de CloudFormation le permiten inyectar valores personalizados en sus plantillas. A continuación, puede hacer referencia a estos parámetros a medida que define sus recursos. Para este caso, proporcionamos valores predeterminados, pero puede anularlos a través de la CLI si lo desea. Para SageMaker Endpoints, los siguientes parámetros son los que tenemos que definir (tenga en cuenta que puede nombrarlos como desee, solo asegúrese de hacer referencia a ellos cuando los nombre):RolARN: la función de ejecución de SageMaker a la que otorga permisos. Reemplace el valor del rol predeterminado con su rol de IAM que ha definido para el recurso de SageMaker.ImagenURI: este es el URI de imagen que puede recuperar de los contenedores de aprendizaje profundo existentes que proporciona AWS o su propio URI de imagen personalizado de ECR si realizó una implementación BYOC. Para este ejemplo, tenemos un modelo de Sklearn, por lo que hemos obtenido la versión adecuada para ese contenedor administrado. Imagen de SklearnModelData: Este es el script de inferencia y el artefacto del modelo que empaquetamos juntos y cargamos en un S3 Bucket.InstanceType & InstanceCount: El hardware que está definiendo para su terminal, cámbielo de forma adecuada para Inferencia sin servidor (tamaño de memoria y simultaneidad). Configuración de la instancia Ahora tenemos los parámetros necesarios para implementar un terminal en tiempo real de SageMaker, centrémonos en definir nuestros recursos a continuación.

Recursos e implementación de CloudFormation

Para implementar un SageMaker Endpoint, hay tres entidades principales que van de la mano: SageMaker Model, SageMaker Endpoint Configuration y SageMaker Endpoint. La entidad de modelo de SageMaker define la imagen y los datos del modelo que usamos para la implementación y es nuestro primer recurso que creamos. A continuación, hacemos casi lo mismo con la Configuración de punto final, donde definimos la configuración de la instancia detrás de nuestro punto final. Configuración de punto final de SageMaker Ahora apuntamos a este recurso mientras definimos el último paso en nuestro punto final de SageMaker. Creación de punto final de SageMaker Con la CLI de AWS, podemos implementar esta pila de CloudFormation apuntando hacia nuestro archivo yaml. Implementar CloudFormation Stack Podemos verificar esto en la Consola y después de unos minutos debería ver los tres recursos creados.Pila de CloudFormation completa (captura de pantalla del autor)SageMaker Endpoint creado (captura de pantalla del autor)

Recursos adicionales y conclusión

Puede encontrar el código completo para el ejemplo en el enlace de arriba. AWS CloudFormation es una herramienta extremadamente poderosa que facilita la captura de sus recursos de AWS en una plantilla central. Sin Infraestructura como código, se vuelve realmente difícil iterar en el ciclo de vida del software y eso también se aplica a los servicios de ML como SageMaker. Espero que este artículo haya sido útil para aquellos interesados ​​en SageMaker, CloudFormation y AWS en general.