Prefacio
Uno de los desafíos regulares que enfrento al diseñar soluciones de nivel empresarial para las compañías de nuestros clientes es la falta de referencia en línea en ejemplos de casos reales de uso arquitectónico.
Encontrará montones de tutoriales sobre cómo comenzar con tecnologías individuales. Y estos son excelentes cuando su enfoque se limita a ese marco o servicio en particular.
Pero para evaluar el amplio espectro de todo lo que está disponible y para predeterminar las implicaciones de agrupar un montón de estos, debe cazar a alguien que haya estado antes en el camino o aventurarse en una experimentación independiente.
Es por eso que decidí comenzar una serie sobre cómo compartir algunas de mis ideas recogidas al diseñar y desarrollar soluciones técnicas para varias compañías de Fortune 200 y nuevas empresas emergentes. Y, con suerte, el caso de uso de hoy lo ayudará a planificar la arquitectura AWS para sus soluciones de aprendizaje automático.
The Undertaking
Recientemente, estuve involucrado en el desarrollo de una solución de aprendizaje automático para uno de los mayores fabricantes de acero de América del Norte. La compañía quería aprovechar el poder de ML para obtener información sobre la segmentación de clientes, la predicción de pedidos y las recomendaciones de volumen de productos.
Este artículo gira en torno a por qué y cómo aprovechamos los servicios de AWS para implementar nuestros entregables para que el equipo de ventas pueda actuar de acuerdo con los conocimientos sin pasar por obstáculos técnicos complicados, y para cualquier futuro científico de datos o ingenieros que deseen mejorarlo dentro de la empresa para comenzar sin problemas.
El Hipo
Un factor importante que tuvimos que explicar desde el primer día fue la solución desarrollada finalmente se entregaría a un equipo de personas sin conocimientos de informática. Sí, lo leiste bien.
El más cercano a un científico de datos en el otro extremo era alguien de TI que había programado antes, pero nada de eso para poder depurar los cuadernos de aprendizaje de máquina en toda regla. Y desde el principio fueron transparentes al respecto, lo que nos ayudó a planificar el futuro.
Por lo tanto, la automatización fue una de las claves de nuestro diseño: poder ofrecer no solo una solución empaquetada, sino también un canal automatizado que podría cuidarse solo entre sí. no programadores sin necesidad de intervención manual todas las semanas.
Piezas
No repasaré los detalles de la implementación (para evitar que aparezca una etiqueta de “lectura de 40 minutos”) , pero le daré un desglose de las distintas partes móviles involucradas.
- Fuentes de datos
- Computadoras portátiles de aprendizaje de datos e ingeniería
- Aplicación web creada con Python Flask
- Una tubería automatizada
Los servicios
A continuación, se detallan los servicios de AWS que utilizamos, categorizados según el área en la que sirven, con una breve descripción general de su uso. A continuación, hay diagramas que explican la arquitectura visualmente, pero recomiendo leer esta sección, especialmente si no está al tanto de lo que hacen estos servicios.
Origen y destino de los datos
- S3: Datos masivos Almacenamiento creado para almacenar y recuperar cualquier cantidad de datos desde cualquier lugar. Aquí es donde reside el lago de datos con el que estaríamos entrenando nuestros modelos. Un depósito de S3 adicional fue suficiente para que almacenáramos nuestras salidas temporales y finales después de ejecutar nuestros modelos.
- Athena: Le permite consultar los archivos de datos en el sistema de objetos de S3 usando las consultas SQL normales. Esto es útil para echar un vistazo rápido a los datos y analizar las filas sin tener que encender sus cuadernos Jupyter cada vez. También utilizamos las API de Athena para extraer los datos posteriormente en nuestros cuadernos.
Control de versión de código
- CódigoCommit: Edición de Amazon de git para control de versiones y colaboración. Utilizamos dos repositorios separados: uno para los portátiles de ingeniería de datos y ML y el otro para la aplicación web.
Ingeniería de datos y aprendizaje automático
- Amazon SageMaker: Plataforma que permite a los desarrolladores y científicos de datos construir y entrenar e implementar modelos de aprendizaje automático a cualquier escala. Aquí es donde se ejecutan los cuadernos que realizan la ingeniería de datos y el aprendizaje automático. Está totalmente bien si ha estado desarrollando en su instancia local de Anaconda, puede ejecutar esos cuadernos dentro de SageMaker sin problemas. Utilizamos una instancia de m5.4xlarge (16 vCPU, 64 GB RAM) para nuestros propósitos de capacitación, que cuesta aproximadamente un dólar por hora. Cada ciclo de ingeniería de datos se contrae a través de aproximadamente 70 GB de datos, y tarda aproximadamente dos horas en ejecutarse y generar archivos utilizables para los portátiles ML. Puede usar esto como referencia para decidir si necesita escalar su instancia hacia arriba o hacia abajo.
Es importante que cierre su instancia de SageMaker una vez que termine de entrenar a los modelos, ya que los cargos pueden acumularse rápidamente. Esta es otra razón por la que las salidas finales del modelo serializado deberían almacenarse en otro lugar, como en S3. En lugar de la instancia EBS adjunta de SageMaker. No se preocupe, cuando inicie la copia de seguridad de SageMaker, restaurará sus cambios nuevamente en el lugar donde se encontraba en una nueva instancia.
Implementación de aplicaciones web
- Elastic Beanstalk: Servicio para implementar y escalar aplicaciones web creadas usando Varios lenguajes y marcos del lado del servidor. Inicializa todos los demás servicios de AWS necesarios que necesita para implementar la aplicación web bajo el capó. Que incluye EC2 y CloudWatch que se describen a continuación. En nuestro caso, aquí es donde se implementa la aplicación Python Flask. Una instancia t2.large (2 vCPUs, 8 GB RAM) de EC2 sin autoescalado fue suficiente para nosotros, ya que se iba a utilizar internamente. Puede usar la función de autoescalado de Beanstalk si está esperando un gran tráfico, y agregará y eliminará automáticamente las instancias del servidor en función del tráfico web, lo que es increíble.
- CodePipeline: Servicio de entrega continua que lo ayuda a automatizar Sus tuberías de lanzamiento para actualizaciones de infraestructura y aplicaciones rápidas y confiables. Usamos esto para enviar automáticamente los cambios de código más nuevos combinados a la rama maestra del Repositorio de CodeCommit a la versión en vivo de la aplicación web.
Otros servicios de AWS bajo el capó
- EC2: Servicio web que proporciona seguridad, Capacidad de cómputo redimensionable en la nube. Básicamente, piensa en ellos como máquinas virtuales en la nube. Otros servicios de AWS como Elastic Beanstalk y SageMaker hacen uso de este servicio para sus necesidades informáticas.
- CloudWatch: El servicio de monitoreo y administración proporciona datos e información para monitorear su aplicación y desencadenar procesos automatizados. Gestionado por los servicios de AWS que lo utilizan, no es algo que requiera una intervención manual en este caso.
La arquitectura
La automatización fue una clave en nuestro diseño: poder ofrecer una solución empaquetada que podría cuidarse sola no programadores sin necesidad de intervención manual cada semana.
Aprendizaje de máquinas e ingeniería de datos
El diagrama anterior describe la arquitectura de implementación de servicios de AWS para el lado del aprendizaje de máquinas y la ingeniería de datos. Como puede ver, la instancia de SageMaker es donde los desarrolladores y científicos de datos estarían trabajando principalmente.
Los portátiles extraen y empujan los datos y los envían directamente a los depósitos S3. Siempre puede cambiar el origen de datos a otros sistemas de base de datos si es allí donde residen sus datos. El código (es decir, los cuadernos) en sí se aloja dentro del repositorio de CodeCommit.
Puede clonar este repositorio dentro de la instancia de SageMaker para facilitar la confirmación de sus cambios con regularidad. De hecho, tiene la opción de crear o cargar cuadernos directamente en SageMaker si está jugando, pero se recomienda tener un sistema de control de versiones para cualquier trabajo de desarrollo serio.
Aplicación web
Esto le muestra la Arquitectura para el despliegue de la aplicación web. Los datos en los que se basa la aplicación web y los modelos ML serializados se alojan en el depósito S3. La instancia de Elastic Beanstalk en la que se implementa la aplicación web recupera datos nuevos al reiniciar la aplicación y los almacena en su sistema local. Esto estuvo bien para nosotros, ya que los archivos no eran enormes y guardarlos localmente ahorraba el tiempo y el costo que resultaría de las frecuentes visitas al S3. Pero es posible que desee reconsiderarlo si está obteniendo una gran cantidad de datos.
El repositorio de la aplicación web alojado en CodeCommit es supervisado constantemente por CodePipeline (que tiene un servicio CloudWatch ejecutándose bajo la supervisión para monitorear los cambios en su repositorio). En nuestro caso, en cualquier momento, los nuevos cambios se fusionan en la rama maestra. La nueva versión se extrae y se implementa automáticamente por el servicio CodePipeline en la instancia de Beanstalk.
¿Preguntas y comentarios?
Espero que sea posible arroje algo de luz sobre cómo puede aprovechar los servicios de AWS para la producción de sus soluciones de aprendizaje automático. Planeo escribir más sobre esta serie de casos de uso arquitectónicos, en función de lo que he desarrollado o encontrado en relación con el desarrollo de aplicaciones. El big data y el aprendizaje automático. Déjeme saber sus pensamientos sobre este artículo y sobre qué tipo de temas le gustaría que escribiera más.
¡Gracias por la lectura!