Batchbewertung von R-Machine Learning-Modellen in AzureBatch scoring of R machine learning models on Azure

Diese Referenzarchitektur zeigt, wie Sie die Batchbewertung mit R-Modellen mit Azure Batch ausführen.This reference architecture shows how to perform batch scoring with R models using Azure Batch. Das Szenario basiert auf Einzelhandelsverkaufs-Prognosen, aber diese Architektur kann für jedes Szenario verallgemeinert werden, das die Generierung umfassenderer Vorhersagen mithilfe von R-Modellen erfordert.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 larger scale using R models. Eine Referenzimplementierung für diese Architektur ist auf GitHub verfügbar.A reference implementation for this architecture is available on GitHub.

Architekturdiagramm

Szenario: Eine Supermarktkette muss Produktverkäufe für das bevorstehende Quartal prognostizieren.Scenario: A supermarket chain needs to forecast sales of products over the upcoming quarter. Die Vorhersage ermöglicht dem Unternehmen, seine Lieferkette besser zu verwalten und sicherzustellen, die Nachfrage nach Produkten in allen Filialen zu erfüllen.The forecast allows the company to manage its supply chain better and ensure it can meet demand for products at each of its stores. Das Unternehmen aktualisiert seine Prognosen jede Woche, wenn neue Verkaufsdaten aus der vorherigen Woche verfügbar sind und die Produktmarketingstrategie für das nächste Quartal festgelegt ist.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. Quantilvorhersagen werden generiert, um die Ungewissheit bei einzelnen Umsatzprognosen einzuschätzen.Quantile forecasts are generated to estimate the uncertainty of the individual sales forecasts.

Die Verarbeitung umfasst die folgenden Schritte:Processing involves the following steps:

  1. Eine Azure-Logik-App löst einmal pro Woche die Vorhersagengenerierung aus.An Azure Logic App triggers the forecast generation process once per week.

  2. Die Logik-App startet eine Azure-Containerinstanz, auf der der Planer-Docker-Container ausgeführt wird, der die Bewertungsaufträge im Batch-Cluster startet.The logic app starts an Azure Container Instance running the scheduler Docker container, which triggers the scoring jobs on the Batch cluster.

  3. Bewertungsaufträge werden parallel die Knoten des Clusters übergreifend ausgeführt.Scoring jobs run in parallel across the nodes of the Batch cluster. Jeder Knoten:Each node:

    1. Ruft das Worker-Docker-Image aus Docker Hub ab und startet einen Container.Pulls the worker Docker image from Docker Hub and starts a container.

    2. Liest die Eingabedaten und vortrainierten R-Modelle aus Azure Blob Storage.Reads input data and pre-trained R models from Azure Blob storage.

    3. Bewertet die Daten, um die Prognosen zu erstellen.Scores the data to produce the forecasts.

    4. Schreibt die Prognoseergebnisse in Blob Storage.Writes the forecast results to blob storage.

Die folgende Abbildung zeigt die vorhergesagten Verkäufe für vier Produkte (SKUs) in einer Filiale.The figure below shows the forecasted sales for four products (SKUs) in one store. Die schwarze Linie ist der Umsatzverlauf, die gestrichelte Linie ist die Medianvorhersage (q50), das rosa Band stellt das 25. und 75. Quantil dar und das blaue Band das fünfte und 95. Quantil.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.

Verkaufsprognosen

ArchitectureArchitecture

Diese Architektur umfasst die folgenden Komponenten.This architecture consists of the following components.

Azure Batch wird verwendet, um Aufträge zur Vorhersagengenerierung parallel auf einem Cluster von virtuellen Computern auszuführen.Azure Batch is used to run forecast generation jobs in parallel on a cluster of virtual machines. Vorhersagen werden mithilfe vorab trainierter Machine Learning-Modelle getroffen, die in R implementiert sind. Azure Batch kann die Anzahl der VMs basierend auf der Anzahl der Aufträge, die an den Cluster übermittelt werden, automatisch skalieren.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. Auf jedem Knoten wird ein R-Skript zum Bewerten von Daten und Generieren von Vorhersagen in einem Docker-Container ausgeführt.On each node, an R script runs within a Docker container to score data and generate forecasts.

Azure Blob Storage wird zum Speichern der Eingabedaten, der vorab trainierten Machine Learning-Modelle und der Prognoseergebnisse verwendet.Azure Blob Storage is used to store the input data, the pre-trained machine learning models, and the forecast results. Blob Storage bietet sehr kostengünstigen Speicher für die Leistung, die diese Workload erfordert.It delivers very cost-effective storage for the performance that this workload requires.

Azure Container Instances ermöglicht serverlose Computevorgänge nach Bedarf.Azure Container Instances provide serverless compute on demand. In diesem Fall wird eine Containerinstanz nach einem Zeitplan bereitgestellt, um Batchaufträge auszulösen, die die Prognosen generieren.In this case, a container instance is deployed on a schedule to trigger the Batch jobs that generate the forecasts. Die Batchaufträge werden von einem R-Skript unter Verwendung des doAzureParallel-Pakets ausgelöst.The Batch jobs are triggered from an R script using the doAzureParallel package. Die Containerinstanz wird automatisch beendet, sobald die Aufträge abgeschlossen sind.The container instance automatically shuts down once the jobs have finished.

Azure Logic Apps löst den gesamten Workflow durch Bereitstellung der Containerinstanzen nach einem Zeitplan aus.Azure Logic Apps trigger the entire workflow by deploying the container instances on a schedule. Ein Azure Container Instances-Connector in Logic Apps ermöglicht, dass eine Instanz bei einer Reihe von Auslöseereignissen bereitgestellt werden kann.An Azure Container Instances connector in Logic Apps allows an instance to be deployed upon a range of trigger events.

Überlegungen zur LeistungPerformance considerations

ContainerbereitstellungContainerized deployment

Bei dieser Architektur werden alle R-Skripts in Docker-Containern ausgeführt.With this architecture, all R scripts run within Docker containers. Dadurch wird sichergestellt, dass die Skripts jedes Mal in einer konsistenten Umgebung, mit der gleichen R-Version und den gleichen Paketversionen ausgeführt werden.This ensures that the scripts run in a consistent environment, with the same R version and packages versions, every time. Für den Planer- und Worker-Container werden separate Docker-Images verwendet, da jeder einen anderen Satz von R-Paketabhängigkeiten hat.Separate Docker images are used for the scheduler and worker containers, because each has a different set of R package dependencies.

Azure Container Instances bietet eine serverlose Umgebung zum Ausführen des Planer-Containers.Azure Container Instances provides a serverless environment to run the scheduler container. Der Planer-Container führt ein R-Skript aus, das die einzelnen in einem Azure Batch-Cluster ausgeführten Bewertungsaufträge auslöst.The scheduler container runs an R script that triggers the individual scoring jobs running on an Azure Batch cluster.

Jeder Knoten des Batch-Clusters führt den Worker-Container aus, der das Bewertungsskript ausführt.Each node of the Batch cluster runs the worker container, which executes the scoring script.

Parallelisierung der WorkloadParallelizing the workload

Erwägen Sie bei der Batchbewertung von Daten mit R-Modellen, wie Sie die Workload parallelisieren.When batch scoring data with R models, consider how to parallelize the workload. Die Eingabedaten müssen irgendwie partitioniert werden, damit der Bewertungsvorgang auf die Clusterknoten verteilt werden kann.The input data must be partitioned somehow so that the scoring operation can be distributed across the cluster nodes. Probieren Sie unterschiedliche Ansätze aus, um die beste Wahl für die Verteilung Ihrer Workload zu ermitteln.Try different approaches to discover the best choice for distributing your workload. Berücksichtigen Sie auf Fall-zu-Fall-Basis Folgendes:On a case-by-case basis, consider the following:

  • Wie viele Daten in den Arbeitsspeicher eines einzelnen Knotens geladen und dort verarbeitet werden können.How much data can be loaded and processed in the memory of a single node.
  • Den Mehraufwand, jeden einzelnen Batchauftrag zu starten.The overhead of starting each batch job.
  • Den Mehraufwand, die R-Modelle zu laden.The overhead of loading the R models.

In dem für dieses Beispiel verwendeten Szenario sind die Modellobjekte umfangreich, und es dauert nur wenige Sekunden, um eine Vorhersage für die einzelnen Produkte zu generieren.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. Aus diesem Grund können Sie die Produkte gruppieren und einen einzelnen Batchauftrag pro Knoten ausführen.For this reason, you can group the products and execute a single Batch job per node. Eine Schleife innerhalb jedes Auftrags generiert sequenziell Vorhersagen für die Produkte.A loop within each job generates forecasts for the products sequentially. Es zeigt sich, dass diese bestimmte Workload mit dieser Methode am effizientesten parallelisiert werden kann.This method turns out to be the most efficient way to parallelize this particular workload. Sie vermeidet den zusätzlichen Aufwand, viele kleinere Batchaufträge zu starten und die R-Modelle wiederholt zu laden.It avoids the overhead of starting many smaller Batch jobs and repeatedly loading the R models.

Ein alternativer Ansatz ist, einen Batchauftrag pro Produkt auszulösen.An alternative approach is to trigger one Batch job per product. Azure Batch bildet automatisch eine Warteschlange mit Aufträgen und übermittelt sie zur Ausführung an den Cluster, sobald Knoten verfügbar sind.Azure Batch automatically forms a queue of jobs and submits them to be executed on the cluster as nodes become available. Passen Sie mit der automatischen Skalierung die Anzahl der Knoten im Cluster entsprechend der Anzahl der Aufträge an.Use automatic scaling to adjust the number of nodes in the cluster depending on the number of jobs. Dieser Ansatz ergibt mehr Sinn, wenn es relativ lange dauert, jeden Bewertungsvorgang auszuführen, sodass der Aufwand, die Aufträge zu starten und die Modellobjekte erneut zu laden, gerechtfertigt ist.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. Dieser Ansatz ist auch einfacher zu implementieren und bietet Ihnen die Flexibilität, die automatische Skalierung zu verwenden – ein wichtiger Aspekt, wenn die Größe der gesamten Workload im Voraus nicht bekannt ist.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.

Überlegungen zur Überwachung und ProtokollierungMonitoring and logging considerations

Überwachen von Azure Batch-AufträgenMonitoring Azure Batch jobs

Überwachen und beenden Sie Batchaufträge vom Bereich Aufträge des Batchkontos im Azure-Portal aus.Monitor and terminate Batch jobs from the Jobs pane of the Batch account in the Azure portal. Überwachen Sie den Batchcluster einschließlich des Status der einzelnen Knoten vom Bereich Pools aus.Monitor the batch cluster, including the state of individual nodes, from the Pools pane.

Protokollierung mit doAzureParallelLogging with doAzureParallel

Das doAzureParallel-Paket erfasst automatisch Protokolle aller stdout-/stderr-Vorgänge für jeden an Azure Batch übermittelten Auftrag.The doAzureParallel package automatically collects logs of all stdout/stderr for every job submitted on Azure Batch. Diese Protokolle finden Sie im beim Setup erstellten Speicherkonto.These can be found in the storage account created at setup. Verwenden Sie für die Anzeige ein Speichernavigationstool wie z. B. den Azure Storage-Explorer oder das Azure-Portal.To view them, use a storage navigation tool such as Azure Storage Explorer or Azure portal.

Um Batchaufträge während der Entwicklung schnell zu debuggen, drucken Sie Protokolle in Ihrer lokalen R-Sitzung mit der getJobFiles-Funktion von doAzureParallel aus.To quickly debug Batch jobs during development, print logs in your local R session using the getJobFiles function of doAzureParallel.

KostenbetrachtungCost considerations

Die in dieser Referenzarchitektur genutzten Computeressourcen sind die teuersten Komponenten.The compute resources used in this reference architecture are the most costly components. Für dieses Szenario wird ein Cluster mit fester Größe erstellt, wenn der Auftrag ausgelöst wird, und dann nach Abschluss des Auftrags heruntergefahren.For this scenario, a cluster of fixed size is created whenever the job is triggered and then shut down after the job has completed. Kosten fallen nur an, während die Clusterknoten gestartet, ausgeführt oder heruntergefahren werden.Cost is incurred only while the cluster nodes are starting, running, or shutting down. Dieser Ansatz eignet sich für ein Szenario, in dem die zum Generieren der Vorhersagen benötigten Computeressourcen von Job zu Job relativ konstant bleiben.This approach is suitable for a scenario where the compute resources required to generate the forecasts remain relatively constant from job to job.

In Szenarien, in denen die zum Ausführen des Auftrags erforderliche Computekapazität nicht im Voraus bekannt ist, kann es sinnvoller sein, die automatische Skalierung zu verwenden.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. Bei diesem Ansatz wird die Größe des Clusters abhängig von der Größe des Auftrags nach oben oder unten skaliert.With this approach, the size of the cluster is scaled up or down depending on the size of the job. Azure Batch unterstützt eine Reihe von Formeln für die automatische Skalierung, die Sie festlegen können, wenn Sie den Cluster mit der doAzureParallel-API definieren.Azure Batch supports a range of auto-scale formulae which you can set when defining the cluster using the doAzureParallel API.

Für einige Szenarien ist die Zeit zwischen Aufträgen möglicherweise zu kurz, um den Cluster herunterzufahren und wieder zu starten.For some scenarios, the time between jobs may be too short to shut down and start up the cluster. Behalten Sie in diesen Fällen die Ausführung des Clusters zwischen Aufträgen nach Möglichkeit bei.In these cases, keep the cluster running between jobs if appropriate.

Azure Batch und doAzureParallel unterstützen die Verwendung von VMs mit niedriger Priorität.Azure Batch and doAzureParallel support the use of low-priority VMs. Diese virtuellen Computer bieten einen erheblichen Rabatt, doch besteht das Risiko, das andere Workloads mit höherer Priorität sich diese VMs aneignen.These VMs come with a significant discount but risk being appropriated by other higher priority workloads. Die Verwendung dieser virtuellen Computer ist daher für entscheidende Produktionsworkloads nicht zu empfehlen.The use of these VMs are therefore not recommended for critical production workloads. Sie sind jedoch sehr nützlich für experimentelle oder Entwicklungsworkloads.However, they are very useful for experimental or development workloads.

BereitstellungDeployment

Befolgen Sie die Schritte im GitHub-Repository, um diese Referenzarchitektur bereitzustellen.To deploy this reference architecture, follow the steps described in the GitHub repo.