Modelos de puntuación por lotes del aprendizaje automático de R en AzureBatch scoring of R machine learning models on Azure

Esta arquitectura de referencia muestra cómo realizar con modelos de R con Azure Batch de puntuación por lotes.This reference architecture shows how to perform batch scoring with R models using Azure Batch. El escenario se basa en previsión de ventas de retail store, pero esta arquitectura puede generalizar para cualquier escenario que requiere la generación de predicciones en un gran scaler con modelos de R.The scenario is based on retail store sales forecasting, but this architecture can be generalized for any scenario requiring the generation of predictions on a large scaler using R models. Hay disponible una implementación de referencia de esta arquitectura en GitHub.A reference implementation for this architecture is available on GitHub.

Diagrama de la arquitectura

Escenario: Se necesita una cadena de supermercados pronosticar las ventas de productos durante el próximo trimestre.Scenario: A supermarket chain needs to forecast sales of products over the upcoming quarter. Permite que la previsión de la empresa a administrar mejor su cadena de suministro y asegúrese de que puede satisfacer la demanda de productos en cada uno de sus almacenes.The forecast allows the company to manage its supply chain better and ensure it can meet demand for products at each of its stores. La compañía actualiza cada semana de sus previsiones porque nuevos datos de ventas de la semana anterior se convierte en disponibles y se estableció la estrategia de marketing para el próximo trimestre de producto.The company updates its forecasts every week as new sales data from the previous week becomes available and the product marketing strategy for next quarter is set. Se generan previsiones de Cuantil para calcular la incertidumbre de las previsiones de ventas individuales.Quantile forecasts are generated to estimate the uncertainty of the individual sales forecasts.

El procesamiento implica los siguientes pasos:Processing involves the following steps:

  1. Una aplicación de lógica de Azure desencadena el proceso de generación de previsión una vez por semana.An Azure Logic App triggers the forecast generation process once per week.

  2. La aplicación lógica inicia una instancia de contenedor de Azure ejecutando al programador de contenedor de Docker, lo que desencadena los trabajos de puntuación en el clúster de Batch.The logic app starts an Azure Container Instance running the scheduler Docker container, which triggers the scoring jobs on the Batch cluster.

  3. Puntuación de los trabajos se ejecutan en paralelo en todos los nodos del clúster de Batch.Scoring jobs run in parallel across the nodes of the Batch cluster. Cada nodo:Each node:

    1. Extrae al trabajador de la imagen de Docker desde Docker Hub y se inicia un contenedor.Pulls the worker Docker image from Docker Hub and starts a container.

    2. Lee datos de entrada y de modelos de R desde Azure Blob storage previamente entrenados.Reads input data and pre-trained R models from Azure Blob storage.

    3. Las puntuaciones de los datos para generar las previsiones.Scores the data to produce the forecasts.

    4. Escribe los resultados de previsión en el almacenamiento de blobs.Writes the forecast results to blob storage.

La siguiente ilustración muestra las ventas previstas para cuatro productos (SKU) en un almacén.The figure below shows the forecasted sales for four products (SKUs) in one store. La línea negra es el historial de ventas, la línea discontinua es la mediana (q50) de previsión, la banda de color rosa representa los percentiles veinticinco y quinta parte setenta y la banda de color azul representa los percentiles quinto y noventa y cinco.The black line is the sales history, the dashed line is the median (q50) forecast, the pink band represents the twenty-fifth and seventy-fifth percentiles, and the blue band represents the fifth and ninety-fifth percentiles.

Previsiones de ventas

ArquitecturaArchitecture

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

[Azure Batch] batch se usa para ejecutar trabajos de generación de previsión en paralelo en un clúster de máquinas virtuales.Azure Batch is used to run forecast generation jobs in parallel on a cluster of virtual machines. Se realizan predicciones mediante automático entrenado previamente implementados en Azure Batch de R. de modelos de aprendizaje pueden escalar automáticamente el número de máquinas virtuales en función del número de trabajos enviados al clúster.Predictions are made using pre-trained machine learning models implemented in R. Azure Batch can automatically scale the number of VMs based on the number of jobs submitted to the cluster. En cada nodo, un script de R se ejecuta dentro de un contenedor de Docker para puntuar datos y generar las previsiones.On each node, an R script runs within a Docker container to score data and generate forecasts.

[Azure Blob Storage] blob se usa para almacenar los datos de entrada, los modelos de aprendizaje automático entrenado previamente y los resultados de previsión.Azure Blob Storage is used to store the input data, the pre-trained machine learning models, and the forecast results. Ofrece almacenamiento muy rentable para el rendimiento que requiere esta carga de trabajo.It delivers very cost-effective storage for the performance that this workload requires.

[Azure Container Instances] aci proporcionan proceso sin servidor a petición.Azure Container Instances provide serverless compute on demand. En este caso, una instancia de contenedor se implementa en una programación para desencadenar los trabajos por lotes que generan las previsiones.In this case, a container instance is deployed on a schedule to trigger the Batch jobs that generate the forecasts. Los trabajos por lotes se desencadenan desde un script de R con el doAzureParallel paquete.The Batch jobs are triggered from an R script using the doAzureParallel package. La instancia del contenedor se cierra automáticamente una vez que hayan finalizado las tareas.The container instance automatically shuts down once the jobs have finished.

Azure Logic Apps desencadenar el flujo de trabajo completo mediante la implementación de las instancias de contenedor en una programación.Azure Logic Apps trigger the entire workflow by deploying the container instances on a schedule. Un conector de Azure Container Instances en Logic Apps permite a implementarse tras un intervalo de eventos de desencadenador de una instancia.An Azure Container Instances connector in Logic Apps allows an instance to be deployed upon a range of trigger events.

Consideraciones sobre rendimientoPerformance considerations

Implementación en contenedorContainerized deployment

Con esta arquitectura, todos los scripts de R se ejecutan dentro de Docker contenedores.With this architecture, all R scripts run within Docker containers. Esto garantiza que los scripts se ejecuten en un entorno coherente, con la misma versión de R y las versiones de paquetes, cada vez.This ensures that the scripts run in a consistent environment, with the same R version and packages versions, every time. Imágenes de Docker independientes se usan para los contenedores de programador y de trabajo, porque cada uno tiene un conjunto diferente de las dependencias de paquetes de R.Separate Docker images are used for the scheduler and worker containers, because each has a different set of R package dependencies.

Azure Container Instances proporciona un entorno sin servidor para ejecutar el contenedor de programador.Azure Container Instances provides a serverless environment to run the scheduler container. El contenedor de programador ejecuta un script de R que desencadena los trabajos de puntuación individuales que se ejecutan en un clúster de Azure Batch.The scheduler container runs an R script that triggers the individual scoring jobs running on an Azure Batch cluster.

Cada nodo del clúster de proceso por lotes ejecuta el contenedor de trabajo, que se ejecuta el script de puntuación.Each node of the Batch cluster runs the worker container, which executes the scoring script.

La carga de trabajo de paralelizaciónParallelizing the workload

Cuando batch puntuar datos con modelos de R, considere cómo paralelizar la carga de trabajo.When batch scoring data with R models, consider how to parallelize the workload. Los datos de entrada deben dividirse de alguna manera para que la operación de puntuación se puede distribuir entre los nodos del clúster.The input data must be partitioned somehow so that the scoring operation can be distributed across the cluster nodes. Pruebe distintos enfoques para detectar la mejor opción para distribuir la carga de trabajo.Try different approaches to discover the best choice for distributing your workload. Cada caso por caso, considere lo siguiente:On a case-by-case basis, consider the following:

  • ¿Cuántos datos se pueden cargar y procesar en la memoria de un solo nodo.How much data can be loaded and processed in the memory of a single node.
  • La sobrecarga de inicio de cada trabajo por lotes.The overhead of starting each batch job.
  • La sobrecarga de la carga de los modelos de R.The overhead of loading the R models.

En el escenario usado en este ejemplo, los objetos del modelo son grandes y tarda unos pocos segundos para generar un pronóstico de productos individuales.In the scenario used for this example, the model objects are large, and it takes only a few seconds to generate a forecast for individual products. Por este motivo, puede agrupar los productos y ejecutar un único trabajo por lotes por nodo.For this reason, you can group the products and execute a single Batch job per node. Un bucle dentro de cada trabajo genera secuencialmente las previsiones de los productos.A loop within each job generates forecasts for the products sequentially. Este método resulta para ser la manera más eficaz paralelizar esta carga de trabajo determinado.This method turns out to be the most efficient way to parallelize this particular workload. Evita la sobrecarga de iniciar varios trabajos por lotes más pequeños y varias veces al cargar los modelos de R.It avoids the overhead of starting many smaller Batch jobs and repeatedly loading the R models.

Un enfoque alternativo es desencadenar un trabajo por lotes por producto.An alternative approach is to trigger one Batch job per product. Azure Batch automáticamente formularios de una cola de trabajos y los envía se puedan ejecutar en el clúster como nodos estén disponibles.Azure Batch automatically forms a queue of jobs and submits them to be executed on the cluster as nodes become available. Use [el escalado automático] autoscale para ajustar el número de nodos del clúster según el número de trabajos.Use automatic scaling to adjust the number of nodes in the cluster depending on the number of jobs. Este enfoque tiene más sentido si tarda bastante tiempo en completarse cada operación de puntuación, que justifique la sobrecarga de iniciar los trabajos y volver a cargar los objetos del modelo.This approach makes more sense if it takes a relatively long time to complete each scoring operation, justifying the overhead of starting the jobs and reloading the model objects. Este enfoque también es más fácil de implementar y le ofrece la flexibilidad de usar el escalado automático, una consideración importante si el tamaño de la carga de trabajo total no se conoce de antemano.This approach is also simpler to implement and gives you the flexibility to use automatic scaling—an important consideration if the size of the total workload is not known in advance.

Consideraciones acerca de la supervisión y el registroMonitoring and logging considerations

Supervisión de trabajos de Azure BatchMonitoring Azure Batch jobs

Supervisar y terminar los trabajos por lotes desde la trabajos panel de la cuenta de Batch en Azure portal.Monitor and terminate Batch jobs from the Jobs pane of the Batch account in the Azure portal. Supervisar el clúster de batch, incluido el estado de los nodos individuales, desde el grupos panel.Monitor the batch cluster, including the state of individual nodes, from the Pools pane.

Registro con doAzureParallelLogging with doAzureParallel

El paquete doAzureParallel recopila automáticamente los registros de todos los stdout y stderr para todos los trabajos enviados en Azure Batch.The doAzureParallel package automatically collects logs of all stdout/stderr for every job submitted on Azure Batch. Estos pueden encontrarse en la cuenta de almacenamiento que se crea en la instalación.These can be found in the storage account created at setup. Para verlas, usar una herramienta de exploración de almacenamiento, como [Explorador de Azure Storage] storage-explorer o portal de Azure.To view them, use a storage navigation tool such as Azure Storage Explorer or Azure portal.

Para depurar rápidamente los trabajos por lotes durante el desarrollo, imprimir los registros en la sesión de R local con el getJobFiles función de doAzureParallel.To quickly debug Batch jobs during development, print logs in your local R session using the getJobFiles function of doAzureParallel.

Consideraciones sobre el costoCost considerations

Los recursos de proceso utilizados en esta arquitectura de referencia son los componentes más costosos.The compute resources used in this reference architecture are the most costly components. En este escenario, se crea un clúster de tamaño fijo siempre que el trabajo se desencadena y, a continuación, se cierra después de que se haya completado el trabajo.For this scenario, a cluster of fixed size is created whenever the job is triggered and then shut down after the job has completed. Se incurre mientras que los nodos del clúster se iniciar, ejecutar o va a cerrar.Cost is incurred only while the cluster nodes are starting, running, or shutting down. Este enfoque es adecuado para un escenario donde los recursos de proceso necesarios para generar las previsiones siguen siendo relativamente constantes desde un proyecto a otro.This approach is suitable for a scenario where the compute resources required to generate the forecasts remain relatively constant from job to job.

En escenarios donde la cantidad de proceso necesario para completar el trabajo no se conoce de antemano, puede ser más adecuado para usar el escalado automático.In scenarios where the amount of compute required to complete the job is not known in advance, it may be more suitable to use automatic scaling. Con este enfoque, el tamaño del clúster se escala hacia arriba o hacia abajo según el tamaño del trabajo.With this approach, the size of the cluster is scaled up or down depending on the size of the job. Azure Batch admite una variedad de fórmulas de escalado automático que se pueden establecer al definir el clúster con el doAzureParallel API.Azure Batch supports a range of auto-scale formulae which you can set when defining the cluster using the doAzureParallel API.

En algunos escenarios, el tiempo entre los trabajos puede ser demasiado corto para apagar e iniciar el clúster.For some scenarios, the time between jobs may be too short to shut down and start up the cluster. En estos casos, no elimine el clúster que se ejecuta entre los trabajos si es necesario.In these cases, keep the cluster running between jobs if appropriate.

Azure Batch y doAzureParallel admiten el uso de máquinas virtuales de prioridad baja.Azure Batch and doAzureParallel support the use of low-priority VMs. Estas máquinas virtuales incluyen un descuento considerable, pero se apropian por otras cargas de trabajo de prioridad más alto de riesgo.These VMs come with a significant discount but risk being appropriated by other higher priority workloads. Por lo tanto, el uso de estas máquinas virtuales no se recomiendan para cargas de trabajo de producción críticos.The use of these VMs are therefore not recommended for critical production workloads. Sin embargo, son muy útiles para experimentales o cargas de trabajo de desarrollo.However, they are very useful for experimental or development workloads.

ImplementaciónDeployment

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