Puntuación por lotes de modelos de aprendizaje automático de Python en AzureBatch scoring of Python machine learning models on Azure

Esta arquitectura de referencia muestra cómo crear una solución escalable para la puntuación por lotes de muchos modelos según una programación en paralelo mediante el servicio de Azure machine learning.This reference architecture shows how to build a scalable solution for batch scoring many models on a schedule in parallel using Azure Machine Learning Service. La solución se puede usar como plantilla y se puede generalizar para diferentes problemas.The solution can be used as a template and can generalize to different problems.

Hay disponible una implementación de referencia de esta arquitectura en GitHub.A reference implementation for this architecture is available on GitHub.

Puntuación por lotes de modelos de Python en Azure

Escenario: Esta solución supervisa el funcionamiento de un gran número de dispositivos en una configuración de IoT en la que cada dispositivo envía lecturas de sensor continuamente.Scenario: This solution monitors the operation of a large number of devices in an IoT setting where each device sends sensor readings continuously. Se supone que cada dispositivo se tiene que asociar con modelos de detección de anomalías entrenados previamente que se deben usar para predecir si una serie de medidas, que se agregan a través de un intervalo predefinido, corresponde a una anomalía, o no.Each device is assumed to be associated with pretrained anomaly detection models that need to be used to predict whether a series of measurements, that are aggregated over a predefined time interval, correspond to an anomaly or not. En escenarios del mundo real, podría tratarse de una secuencia de lecturas de los sensores que se deben filtrar y agregar antes de utilizarse en el entrenamiento o la puntuación en tiempo real.In real-world scenarios, this could be a stream of sensor readings that need to be filtered and aggregated before being used in training or real-time scoring. Por motivos de simplicidad, esta solución utiliza el mismo archivo de datos al ejecutar trabajos de puntuación.For simplicity, this solution uses the same data file when executing scoring jobs.

Esta arquitectura de referencia está diseñada para cargas de trabajo que se desencadenan según una programación.This reference architecture is designed for workloads that are triggered on a schedule. El procesamiento implica los siguientes pasos:Processing involves the following steps:

  1. Envíe las lecturas del sensor para la ingesta en Azure Event Hubs.Send sensor readings for ingestion to Azure Event Hubs.
  2. Realice el procesamiento de las secuencias y almacene los datos sin procesar.Perform stream processing and store the raw data.
  3. Envíe los datos a un clúster de Machine Learning que esté listo para comenzar a realizar el trabajo.Send the data to a Machine Learning cluster that is ready to start taking work. Cada nodo del clúster ejecuta un trabajo de puntuación para un sensor específico.Each node in the cluster runs a scoring job for a specific sensor.
  4. Ejecute la canalización de puntuación, que ejecuta los trabajos de puntuación en paralelo mediante scripts de Python de machine learning.Execute the scoring pipeline, which runs the scoring jobs in parallel using machine learning Python scripts. La canalización se ha creado, publicado y programado para que se ejecute en un intervalo predefinido de tiempo.The pipeline is created, published, and scheduled to run on a predefined interval of time.
  5. Genere predicciones y almacénelas en Blob Storage para su uso posterior.Generate predictions and store them in Blob storage for later consumption.

ArquitecturaArchitecture

Esta arquitectura consta de los siguientes componentes:This architecture consists of the following components:

Azure Event Hubs.Azure Event Hubs. Este servicio de ingesta de mensajes puede ingerir millones de mensajes de eventos por segundo.This message ingestion service can ingest millions of event messages per second. En esta arquitectura, los sensores envían un flujo de datos al centro de eventos.In this architecture, sensors send a stream of data to the event hub.

Azure Stream Analytics.Azure Stream Analytics. Un motor de procesamiento de eventos.An event-processing engine. Un trabajo de Stream Analytics lee los flujos de datos del centro de eventos y realiza su procesamiento.A Stream Analytics job reads the data streams from the event hub and performs stream processing.

Azure SQL Database.Azure SQL Database. Los datos de las lecturas del sensor se cargan en SQL Database.Data from the sensor readings is loaded into SQL Database. SQL es una manera conocida de almacenar los datos procesados y transmitidos en secuencias (que están estructurados y en formato de tabla), pero se pueden usar otros almacenes de datos.SQL is a familiar way to store the processed, streamed data (which is tabular and structured), but other data stores can be used.

Servicio Azure machine learning.Azure Machine Learning Service. Azure Machine Learning servicio es un servicio en la nube para entrenar, puntuar, implementar y administrar modelos de aprendizaje automático a escala.Azure Machine Learning service is a cloud service for training, scoring, deploying, and managing machine learning models at scale. En el contexto de la puntuación por lotes, el servicio Azure Machine Learning crea un clúster de máquinas virtuales a petición con una opción de escalado automático, donde cada nodo del clúster ejecuta un trabajo de puntuación para un sensor específico.In the context of batch scoring, Azure Machine Learning service creates a cluster of virtual machines on demand with an automatic scaling option, where each node in the cluster runs a scoring job for a specific sensor. Los trabajos de puntuación se ejecutan en paralelo como pasos de script de Python que el servicio pone en cola y administra.The scoring jobs are executed in parallel as Python-script steps that are queued and managed by the service. Estos pasos forman parte de una canalización de servicio Machine Learning que se ha creado, publicado y programado para ejecutarse en un intervalo de tiempo predefinido.These steps are part of a Machine Learning service pipeline that is created, published, and scheduled to run on a predefined interval of time.

Azure Blob Storage.Azure Blob Storage. Los contenedores de blobs se usan para almacenar los modelos previamente entrenados, los datos y las predicciones de salida.Blob containers are used to store the pretrained models, the data, and the output predictions. Los modelos se cargan en el almacenamiento de blobs en el cuaderno de 01_create_resources. ipynb .The models are uploaded to Blob storage in the 01_create_resources.ipynb notebook. Estos modelos SVM de una clase están entrenados en datos que representan valores de distintos sensores para diferentes dispositivos.These one-class SVM models are trained on data that represents values of different sensors for different devices. En esta solución se da por supuesto que los valores de los datos se agregan en un intervalo fijo.This solution assumes that the data values are aggregated over a fixed interval of time.

Azure Container Registry.Azure Container Registry. El script de Python de puntuación se ejecuta en contenedores de Docker que se crean en cada nodo del clúster, donde Lee los datos de sensor pertinentes, genera predicciones y los almacena en el almacenamiento de blobs.The scoring Python script runs in Docker containers that are created on each node of the cluster, where it reads the relevant sensor data, generates predictions and stores them in Blob storage.

Consideraciones sobre rendimientoPerformance considerations

En los modelos de Python estándar, se suele aceptar que las CPU son suficientes para controlar la carga de trabajo.For standard Python models, it's generally accepted that CPUs are sufficient to handle the workload. Esta arquitectura utiliza varias CPU.This architecture uses CPUs. Sin embargo, en el caso de cargas de trabajo de aprendizaje profundo, las GPU — generalmente superan las CPU en una cantidad considerable, normalmente se necesita un clúster de CPU de gran tamaño para obtener un rendimiento comparable.However, for deep learning workloads, GPUs generally outperform CPUs by a considerable amount — a sizeable cluster of CPUs is usually needed to get comparable performance.

Paralelizar en máquinas virtuales frente a núcleosParallelizing across VMs versus cores

Al ejecutar los procesos de puntuación de muchos modelos de puntuación en modo por lotes, es preciso que los trabajos se ejecuten en paralelo en las máquinas virtuales.When running scoring processes of many models in batch mode, the jobs need to be parallelized across VMs. Son posibles dos enfoques:Two approaches are possible:

  • Crear un clúster mayor mediante máquinas virtuales de bajo costo.Create a larger cluster using low-cost VMs.
  • Crear un clúster menor mediante máquinas virtuales de alto rendimiento con más núcleos disponibles en cada una de ellas.Create a smaller cluster using high performing VMs with more cores available on each.

En general, la puntuación de los modelos de Python estándar no es tan exigente como la de los de aprendizaje profundo y un clúster pequeño debería poder controlar de forma eficaz un gran número de modelos en cola.In general, scoring of standard Python models is not as demanding as scoring of deep learning models, and a small cluster should be able to handle a large number of queued models efficiently. Puede aumentar el número de nodos de clúster a medida que aumenten los tamaños de los conjunto de datos.You can increase the number of cluster nodes as the dataset sizes increase.

Para mayor comodidad en este escenario, se envía una tarea de puntuación en un solo Azure machine learning paso de canalización.For convenience in this scenario, one scoring task is submitted within a single Azure Machine Learning pipeline step. Sin embargo, es posible que sea más eficaz puntuar varios fragmentos de datos dentro del mismo paso de la canalización.However, it can be more efficient to score multiple data chunks within the same pipeline step. En esos casos, escriba código personalizado para leer en varios conjuntos de datos y ejecutar el script de puntuación en ellos durante la ejecución de un único paso.In those cases, write custom code to read in multiple datasets and execute the scoring script for those during a single-step execution.

Consideraciones de administraciónManagement considerations

  • Supervisión de trabajos.Monitor jobs. Es importante supervisar el progreso de los trabajos en ejecución, pero puede ser un desafío hacerlo en un clúster de nodos activos.It's important to monitor the progress of running jobs, but it can be a challenge to monitor across a cluster of active nodes. Para inspeccionar el estado de los nodos del clúster, use el Azure portal para administrar el área de trabajo de machine learning.To inspect the state of the nodes in the cluster, use the Azure portal to manage the machine learning workspace. Si un nodo está inactivo o un trabajo presenta algún error, los registros de errores se guardan en Blob Storage y también se puede acceder a ellos en la sección de canalizaciones.If a node is inactive or a job has failed, the error logs are saved to blob storage, and are also accessible in the Pipelines section. Para una supervisión más completa, conecte los registros a Application Insightso ejecute procesos independientes para sondear el estado del clúster y sus trabajos.For richer monitoring, connect logs to Application Insights, or run separate processes to poll for the state of the cluster and its jobs.
  • Registro.Logging. Machine Learning Service registra todos los procesos stdout/stderr en la cuenta de Azure Storage asociada.Machine Learning Service logs all stdout/stderr to the associated Azure Storage account. Para ver fácilmente los archivos de registro, use una herramienta de navegación de almacenamiento como Explorador de Azure Storage.To easily view the log files, use a storage navigation tool such as Azure Storage Explorer.

Consideraciones sobre el costoCost considerations

Los componentes más caros que se usan en esta arquitectura de referencia son los recursos de proceso.The most expensive components used in this reference architecture are the compute resources. El tamaño del clúster de proceso se escala y se reduce verticalmente en función de los trabajos que haya en la cola.The compute cluster size scales up and down depending on the jobs in the queue. Habilite el escalado automático mediante programación a través del SDK de Python mediante la modificación de la configuración de aprovisionamiento del proceso.Enable automatic scaling programmatically through the Python SDK by modifying the compute’s provisioning configuration. O bien, use el CLI de Azure para establecer los parámetros de escalado automático del clúster.Or use the Azure CLI to set the automatic scaling parameters of the cluster.

Para el trabajo que no requiera un procesamiento inmediato, configure la fórmula de escalado automático, con el fin de que el estado predeterminado (mínimo) sea un clúster de cero nodos.For work that doesn't require immediate processing, configure the automatic scaling formula so the default state (minimum) is a cluster of zero nodes. Con esta configuración, el clúster empieza con cero nodos y solo se escala verticalmente si detecta trabajos en la cola.With this configuration, the cluster starts with zero nodes and only scales up when it detects jobs in the queue. Si el proceso de puntuación por lotes solo se produce algunas veces al día o menos, esta configuración permite obtener importantes ahorros.If the batch scoring process happens only a few times a day or less, this setting enables significant cost savings.

Es posible que el escalado no sea apropiado para los trabajos por lotes que realizan con muy poco tiempo de diferencia entre sí.Automatic scaling may not be appropriate for batch jobs that happen too close to each other. El tiempo que tarda un clúster en agilizarse y ralentizarse también genera costos, por tanto, si una carga de trabajo por lotes empieza solo unos minutos después de que el trabajo anterior termine, puede resultar más rentable mantener el clúster en ejecución entre los trabajos.The time that it takes for a cluster to spin up and spin down also incurs a cost, so if a batch workload begins only a few minutes after the previous job ends, it might be more cost effective to keep the cluster running between jobs. Eso depende de si los procesos de puntuación están programados para ejecutarse con mucha frecuencia (por ejemplo, cada hora), o con poca (por ejemplo, una vez al mes).That depends on whether scoring processes are scheduled to run at a high frequency (every hour, for example), or less frequently (once a month, for example).

ImplementaciónDeployment

Para implementar esta arquitectura de referencia, siga los pasos descritos en el repositorio de github.To deploy this reference architecture, follow the steps described in the GitHub repo.