Implementación de pipelines de Amazon SageMaker usando AWS controllers para Kubernetes

Elena Digital López

Kubernetes es una plataforma de orquestación popular para la gestión de contenedores, ideal para manejar cargas de trabajo variables típicas de aplicaciones de machine learning (ML) gracias a sus capacidades de escalabilidad y balanceo de carga. Los ingenieros de DevOps suelen utilizar Kubernetes para gestionar y escalar aplicaciones de ML. Sin embargo, antes de que un modelo de ML esté disponible, debe ser entrenado y evaluado, y si se obtiene un modelo de calidad satisfactoria, se sube a un registro de modelos.

Amazon SageMaker facilita la eliminación del trabajo pesado de construir y desplegar modelos de ML. SageMaker simplifica la gestión de dependencias, imágenes de contenedores, escalado automático y monitoreo. Específicamente, para la etapa de construcción de modelos, Amazon SageMaker Pipelines automatiza el proceso al gestionar la infraestructura y los recursos necesarios para procesar datos, entrenar modelos y ejecutar pruebas de evaluación.

Un desafío para los ingenieros de DevOps es la complejidad adicional que surge al usar Kubernetes para gestionar la etapa de despliegue, mientras se recurren a otras herramientas (como el SDK de AWS o AWS CloudFormation) para gestionar la canalización de construcción de modelos. Una alternativa para simplificar este proceso es utilizar AWS Controllers for Kubernetes (ACK) para gestionar y desplegar una canalización de entrenamiento de SageMaker. ACK permite aprovechar las canalizaciones de construcción de modelos gestionadas sin necesidad de definir recursos fuera del clúster de Kubernetes.

En este artículo, introducimos un ejemplo para ayudar a los ingenieros de DevOps a gestionar todo el ciclo de vida de ML, incluyendo entrenamiento e inferencia, utilizando la misma herramienta.

Descripción de la Solución

Consideramos un caso en el que un ingeniero de ML configura una canalización de construcción de modelos en SageMaker utilizando un cuaderno de Jupyter. Esta configuración toma la forma de un Grafo Acíclico Dirigido (DAG) representado como una definición de canalización en JSON. El documento JSON puede ser almacenado y versionado en un bucket de Amazon Simple Storage Service (Amazon S3). Si se requiere cifrado, puede implementarse utilizando una clave gestionada por AWS Key Management Service (AWS KMS) para Amazon S3. Un ingeniero de DevOps con acceso para recuperar este archivo de definición de Amazon S3 puede cargar la definición de la canalización en un controlador de servicio ACK para SageMaker, que se ejecuta como parte de un clúster de Amazon Elastic Kubernetes Service (Amazon EKS). El ingeniero de DevOps puede entonces usar las APIs de Kubernetes proporcionadas por ACK para enviar la definición de la canalización e iniciar una o más ejecuciones de la canalización en SageMaker.

Para seguir este procedimiento, es necesario cumplir con algunos requisitos previos, como tener un clúster de EKS, un usuario con acceso a un rol de IAM adecuado, y herramientas de línea de comandos instaladas en la máquina local o entorno de desarrollo basado en la nube.

Instalación del controlador de servicio ACK de SageMaker

El controlador de servicio ACK de SageMaker facilita a los ingenieros de DevOps usar Kubernetes como su plano de control para crear y gestionar canalizaciones de ML. Para instalar el controlador en el clúster de EKS, se deben configurar los permisos de IAM, instalar el controlador usando un Helm Chart de SageMaker y seguir el tutorial proporcionado paso a paso.

Generación de una definición de canalización en JSON

Los ingenieros de ML suelen ser responsables de crear la canalización de ML en sus organizaciones, trabajando en conjunto con los ingenieros de DevOps para operar esas canalizaciones. En SageMaker, los ingenieros de ML pueden usar el SDK de Python de SageMaker para generar una definición de canalización en formato JSON, siguiendo un esquema predefinido, el cual se recupera para desplegar y mantener la infraestructura necesaria para la canalización.

Creación y envío de una especificación de canalización en YAML

En el mundo de Kubernetes, los objetos son entidades persistentes utilizadas para representar el estado del clúster. Al crear un objeto en Kubernetes, se debe proporcionar una especificación del objeto que describa su estado deseado en un archivo de manifiesto en formato YAML (o JSON) para comunicarse con la API de Kubernetes.

Para presentar una especificación de canalización en YAML y su ejecución, los ingenieros de DevOps deben modificar y preparar los archivos YAML adecuados y aplicarlos en el clúster de Kubernetes usando las herramientas de línea de comandos.

Revisión y solución de problemas de la ejecución de la canalización

Los ingenieros pueden listar todas las canalizaciones creadas y sus ejecuciones, así como revisar detalles sobre la canalización y solucionar problemas usando comandos específicos de kubectl.

Conclusión

Hemos presentado un ejemplo de cómo los ingenieros de ML familiarizados con los cuadernos de Jupyter y los entornos de SageMaker pueden trabajar eficientemente con los ingenieros de DevOps familiarizados con Kubernetes para diseñar y mantener una canalización de ML con la infraestructura adecuada para su organización. Esto permite a los ingenieros de DevOps gestionar todos los pasos del ciclo de vida de ML con el mismo conjunto de herramientas y entorno, lo que permite a las organizaciones innovar más rápido y de manera más eficiente.

Scroll al inicio