Kubernetes es una plataforma de orquestación de contenedores ampliamente utilizada en el manejo de cargas de trabajo variables, comunes en aplicaciones de machine learning (ML), gracias a sus capacidades de escalabilidad y balanceo de carga. Los ingenieros de DevOps recurren a Kubernetes para gestionar y escalar aplicaciones de ML. Sin embargo, antes de que un modelo de ML esté disponible, es necesario entrenarlo y evaluarlo. Si el modelo cumple con los criterios de calidad, se registra en un modelo predefinido.
Amazon SageMaker simplifica la construcción y el despliegue de modelos de ML, eliminando gran parte del trabajo pesado. SageMaker facilita la gestión de dependencias, imágenes de contenedores, escalado automático y monitoreo. En particular, Amazon SageMaker Pipelines automatiza la etapa de construcción de modelos, encargándose de la infraestructura y los recursos necesarios para procesar datos, entrenar modelos y ejecutar pruebas de evaluación.
Uno de los desafíos que enfrentan los ingenieros de DevOps es la complejidad adicional que implica usar Kubernetes para gestionar la etapa de despliegue, mientras se utilizan otras herramientas, como el SDK de AWS o AWS CloudFormation, para manejar 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 gestionar las canalizaciones de construcción de modelos sin necesidad de definir recursos fuera del clúster de Kubernetes.
A continuación, se presenta un ejemplo que ayuda a los ingenieros de DevOps a manejar todo el ciclo de vida de ML, incluyendo entrenamiento e inferencia, utilizando una única herramienta.
### Descripción de la Solución
Consideremos el caso donde un ingeniero de ML configura una canalización de construcción de modelos en SageMaker utilizando un cuaderno de Jupyter. Esta configuración adopta la forma de un Grafo Acíclico Dirigido (DAG) representado como una definición de canalización en JSON. El documento JSON puede almacenarse y versionarse en un bucket de Amazon Simple Storage Service (Amazon S3). Si es necesario, se puede implementar cifrado utilizando una clave gestionada por AWS Key Management Service (AWS KMS) para Amazon S3. Un ingeniero de DevOps puede recuperar este archivo de definición desde Amazon S3 y cargarlo 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 utilizar 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.
### 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 mediante un Helm Chart de SageMaker y seguir un tutorial 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 operarlas. 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. Este documento se utiliza 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 contexto de Kubernetes, los objetos son entidades persistentes utilizadas para representar el estado del clúster. Al crear un objeto en Kubernetes, es necesario proporcionar una especificación 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 utilizando 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 empleando comandos específicos de kubectl.
### Conclusión
Hemos presentado un ejemplo de cómo los ingenieros de ML pueden colaborar eficientemente con los ingenieros de DevOps para diseñar y mantener una canalización de ML utilizando Kubernetes y SageMaker. 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 resulta en una mayor innovación y eficiencia organizacional.