En este artículo se describe una arquitectura para varios modelos que usan clústeres de Machine Learning y de proceso. Proporciona una gran versatilidad para las situaciones que requieren una configuración compleja.
Un artículo complementario, Aprendizaje automático de varios modelos a escala en Azure con Spark, utiliza Apache Spark en Azure Databricks o Azure Synapse Analytics.
Arquitectura
Descargue un archivo Visio de esta arquitectura.
Flujo de trabajo
- Ingesta de datos: Azure Data Factory extrae datos de una base de datos de origen y los copia en Azure Data Lake Storage. A continuación, los almacena en un almacén de datos de Machine Learning como un conjunto de datos tabulares.
- Canalización de entrenamiento de modelos:
- Preparación de datos: la canalización de entrenamiento extrae los datos del almacén de datos y los transforma aún más, según sea necesario. También agrupa los datos en conjuntos de datos para entrenar los modelos.
- Entrenamiento de modelos: la canalización entrena modelos para todos los conjuntos de datos que se crearon durante la preparación de los datos. Utiliza la clase ParallelRunStep para entrenar varios modelos en paralelo. Después de haber entrenado un modelo, la canalización lo registra en Machine Learning junto con las métricas de prueba.
- Canalización de promoción de modelos:
- Evaluar modelos: la canalización de promoción evalúa los modelos entrenados antes de transferirlos a producción. Una canalización de DevOps aplica la lógica de negocios para determinar si un modelo cumple los criterios de implementación. Por ejemplo, podría comprobar que la precisión de los datos de prueba es superior al 80 %.
- Registro de modelos: la canalización de promoción registra los modelos aptos para el área de trabajo de Machine Learning de producción.
- Canalización de puntuación por lotes del modelo:
- Preparación de datos: la canalización de puntuación por lotes extrae datos del almacén de datos y transforma cada archivo según sea necesario. También agrupa los datos en conjuntos de datos para la puntuación.
- Puntuación de modelos: la canalización usa la clase ParallelRunStep para puntuar varios conjuntos de datos a la vez. Identifica el modelo adecuado para cada conjunto de datos en Machine Learning buscando las etiquetas del modelo. Después descarga el modelo y lo usa para puntuar el conjunto de datos. Utiliza la clase DataTransferStep para volver a escribir los resultados en Azure Data Lake y, a continuación, pasa las predicciones de Azure Data Lake a Synapse SQL para el servicio.
- Puntuación en tiempo real: Azure Kubernetes Service (AKS) puede puntuar en tiempo real si es necesario. Debido al elevado número de modelos, se deben cargar a petición, no están precargados.
- Resultados:
- Predicciones: la canalización de puntuación por lotes guarda las predicciones en Synapse SQL.
- Métricas: Power BI se conecta a las predicciones del modelo para recuperar y agregar resultados para presentar.
Componentes
- Azure Machine Learning es un servicio de aprendizaje automático empresarial para compilar e implementar modelos rápidamente. Proporciona a los usuarios de todos los niveles de aptitud con un diseñador de código bajo, ML automatizado (AutoML) y un entorno de Jupyter Notebook hospedado que admite diversos IDE.
- Azure Databricks es una herramienta de ingeniería de datos basada en la nube que se basa en Apache Spark. Puede procesar y transformar grandes cantidades de datos y explorarlos mediante modelos de aprendizaje automático. Puede escribir trabajos en R, Python, Java, Scala y Spark SQL.
- Azure Synapse Analytics es un servicio de análisis que unifica integración de datos, almacenamiento de datos empresariales y análisis de macrodatos.
- Synapse SQL es un sistema de consultas distribuidas para T-SQL que permite escenarios de almacenamiento y virtualización de datos, y que extiende T-SQL para abordar escenarios de streaming y aprendizaje automático. Ofrece modelos de recursos sin servidor y dedicados.
- Azure Data Lake Storage es un servicio de almacenamiento seguro y que se puede escalar de forma masiva para cargas de trabajo de análisis de alto rendimiento.
- Azure Kubernetes Service (AKS) es un servicio de Kubernetes administrado para la implementación y la administración de aplicaciones contenedorizadas. AKS simplifica la implementación de un clúster de AKS administrado en Azure, al descargar la sobrecarga operativa en Azure.
- Azure DevOps es un conjunto de servicios para desarrolladores que permiten administrar todo el ciclo de vida de las aplicaciones y la infraestructura. DevOps facilita el seguimiento del trabajo, el control de código fuente, la compilación y CI/CD, la administración de paquetes y las soluciones de pruebas.
- Microsoft Power BI es una colección de servicios de software, aplicaciones y conectores que funcionan conjuntamente para convertir los orígenes de datos no relacionados en información coherente, interactiva y visualmente atractiva.
Alternativas
- Los datos de origen pueden proceder de cualquier base de datos.
- Puede usar un punto de conexión en línea administrado o AKS para implementar la inferencia en tiempo real.
Detalles del escenario
Muchos problemas de aprendizaje automático son demasiado complejos para que un solo modelo de aprendizaje automático los pueda resolver. Tanto si se trata de predecir las ventas para cada artículo de cada almacén como de modelar el tipo de mantenimiento para cientos de pozos petrolíferos, disponer de un modelo para cada instancia puede mejorar los resultados para muchos problemas de aprendizaje automático. Este patrón de varios modelos es común en una amplia variedad de sectores y tiene muchos casos de uso reales. Mediante el uso de Azure Machine Learning, una canalización de varios modelos de un extremo a otro puede incluir entrenamiento de modelos, implementación de inferencia por lotes e implementación en tiempo real.
Una solución de muchos modelos requiere un conjunto de datos diferente para cada modelo durante el proceso de entrenamiento y puntuación. Por ejemplo, si la tarea consiste en predecir las ventas de cada artículo y almacén, cada conjunto de datos se corresponderá con una combinación única de artículo y almacén.
Posibles casos de uso
- Venta al por menor: una cadena de tiendas de alimentación necesita crear un modelo de previsión de ingresos independiente para cada tienda y artículo, con más de 1000 modelos por tienda.
- Cadena de suministro: para cada combinación de almacén y producto, una empresa de distribución debe optimizar el inventario.
- Restaurantes: una cadena con miles de franquicias necesita hacer una previsión de la demanda de cada una de ellas.
Consideraciones
Estas consideraciones implementan los pilares del marco de buena arquitectura de Azure, que es un conjunto de principios guía que se pueden usar para mejorar la calidad de una carga de trabajo. Para más información, consulte Marco de buena arquitectura de Microsoft Azure.
- Particiones de datos: la creación de particiones de datos es fundamental para implementar el patrón de varios modelos. Si desea usar un modelo por almacén, un conjunto de datos constará de todos los datos para un almacén y habrá tantos conjuntos de datos como almacenes. Si desea modelar los productos por almacén, habrá un conjunto de datos para cada combinación de producto y almacén. Dependiendo del formato de los datos de origen, puede que sea fácil crear particiones o tal vez haya que transformar y ordenar grandes cantidades de datos. Spark y Synapse SQL facilitan el escalado para esas tareas, mientras que Pandas de Python no lo hace, ya que solo se ejecuta en un nodo y proceso.
- Administración de modelos: las canalizaciones de entrenamiento y puntuación identifican e invocan el modelo adecuado para cada conjunto de datos. Para ello, calculan las etiquetas que caracterizan el conjunto de datos y después usan las etiquetas para identificar el modelo correspondiente. Las etiquetas identifican la clave de partición de datos y la versión del modelo. También pueden proporcionar otra información.
- Elección de la arquitectura adecuada:
- Spark es adecuado cuando la canalización de entrenamiento impone requisitos complejos de agrupación y transformación de datos. Ofrece técnicas flexibles de división y agrupación para organizar los datos por combinaciones de características, como el producto y el almacén o la ubicación y el producto. Los resultados se pueden incluir en un dataframe de Spark para usarlos en pasos posteriores.
- Cuando los algoritmos de entrenamiento y puntuación de aprendizaje automático son sencillos, es posible crear particiones de datos con bibliotecas como Scikit-learn. En esos casos, puede que no necesite Spark. De este modo, evitará complicaciones que pueden surgir al instalar Azure Synapse o Azure Databricks.
- Cuando los conjuntos de datos de entrenamiento ya están creados (por ejemplo, se encuentran en archivos, en filas o en columnas independientes), no se necesita Spark para efectuar transformaciones de datos complejas.
- La solución de clústeres de Machine Learning y de proceso ofrece una gran versatilidad en situaciones que requieren una configuración compleja. Así, por ejemplo, puede usar un contenedor de Docker personalizado, descargar archivos o descargar modelos previamente entrenados. El servicio Computer Vision y el aprendizaje profundo del procesamiento de lenguaje natural (NLP) son ejemplos de las aplicaciones que pueden requerir esa flexibilidad.
- Entrenamiento y puntuación de Spark: al usar la arquitectura de Spark, puede utilizar la API de función Pandas de Spark para efectuar el entrenamiento y la puntuación simultáneamente.
- Repositorios de modelos independientes: para proteger los modelos implementados, valore la posibilidad de almacenarlos en su propio repositorio, ya que las canalizaciones de entrenamiento y pruebas no les afectarán.
- Clase ParallelRunStep: la clase ParallelRunStep de Python es una opción eficaz para ejecutar el entrenamiento y la inferencia de varios modelos. Puede crear particiones de los datos de varias maneras y, después, aplicar el script de aprendizaje automático en los elementos de la partición en paralelo. Al igual que otras formas de entrenamiento de Machine Learning, puede especificar un entorno de entrenamiento personalizado con acceso a paquetes de índice de paquetes de Python (PyPI) o un entorno de Docker personalizado más avanzado para las configuraciones que requieren más de un PyPI estándar. Existen muchas CPU y GPU entre las que elegir.
- Inferencia en línea: si una canalización carga y almacena en caché todos los modelos al principio, los modelos podrían agotar la memoria del contenedor. Por lo tanto, cargue los modelos a petición en el método de ejecución, aunque la latencia pueda aumentar ligeramente.
Optimización de costos
La optimización de costos trata de buscar formas de reducir los gastos innecesarios y mejorar las eficiencias operativas. Para más información, vea Información general del pilar de optimización de costos.
Para entender mejor el costo de ejecutar este escenario en Azure, use la calculadora de precios. Las suposiciones iniciales son las siguientes:
- Los modelos de servicios se entrenan diariamente para mantenerse actualizados.
- Para un conjunto de datos de 40 millones de filas con 10 000 combinaciones de almacén y producto, el entrenamiento en Azure Databricks mediante un clúster con 12 máquinas virtuales que usan instancias de Ls16_v2 tarda unos 30 minutos.
- La puntuación por lotes con el mismo conjunto de datos lleva unos 20 minutos.
- Puede usar Machine Learning para implementar la inferencia en tiempo real. En función del volumen de la solicitud, elija un tipo de máquina virtual y un tamaño de clúster adecuados.
- El clúster de AKS se ajusta automáticamente según las necesidades, lo que da lugar a dos nodos activos al mes como promedio.
Para ver cómo difieren los precios en su caso de uso, cambie las variables para que coincidan con los requisitos de carga de servicio y tamaño de datos previstos. Para tamaños de datos de entrenamiento más grandes o pequeños, aumente o reduzca el tamaño del clúster Azure Databricks. Para administrar más usuarios simultáneamente durante el servicio de modelos, aumente el tamaño del clúster de AKS.
Colaboradores
Microsoft mantiene este artículo. Originalmente lo escribieron los siguientes colaboradores.
Autor principal:
- James Nguyen | Arquitecto principal de soluciones en la nube
Pasos siguientes
- Configuración de un clúster de Kubernetes para Azure Machine Learning
- Repositorio de GitHub del Acelerador de soluciones de muchos modelos
- Clase ParallelRunStep
- Clase DataTransferStep
- Conexión a los servicios de almacenamiento en Azure
- ¿Qué es Azure Synapse Analytics?
- Implementación de un modelo en un clúster de Azure Kubernetes Service