Пакетная оценка моделей машинного обучения R в AzureBatch scoring of R machine learning models on Azure

В этой эталонной архитектуре показано, как выполнять пакетную оценку с использованием моделей R с помощью пакетной службы Azure.This reference architecture shows how to perform batch scoring with R models using Azure Batch. Этот сценарий основан на прогнозе продаж магазина розничной торговли, но эту архитектуру можно обобщить для любого сценария, который требует создания прогнозов на более крупном масштабе с помощью моделей 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 larger scale using R models. Эталонная реализация для этой архитектуры доступна на сайте GitHub.A reference implementation for this architecture is available on GitHub.

Диаграмма архитектуры

Сценарий: цепочка супермаркете должна прогнозировать продажи продуктов в течение ближайшего квартала.Scenario: A supermarket chain needs to forecast sales of products over the upcoming quarter. Этот прогноз позволяет компании лучше управлять своей цепочкой поставок и гарантировать, что она может удовлетворить спрос на продукты в каждом из своих магазинов.The forecast allows the company to manage its supply chain better and ensure it can meet demand for products at each of its stores. Компания обновляет прогнозы каждую неделю по мере того, как становятся доступными новые данные о продажах за предыдущую неделю, и настраивается стратегия маркетинга продукта в следующем квартале.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. Прогнозы квантилей создаются для оценки неопределенности индивидуальных прогнозов продаж.Quantile forecasts are generated to estimate the uncertainty of the individual sales forecasts.

Обработка предусматривает указанные ниже действия.Processing involves the following steps:

  1. Приложение логики Azure запускает процесс создания прогнозов один раз в неделю.An Azure Logic App triggers the forecast generation process once per week.

  2. Приложение логики запускает экземпляр контейнера Azure с контейнером DOCKER Scheduler, который запускает задания оценки в кластере пакетной службы.The logic app starts an Azure Container Instance running the scheduler Docker container, which triggers the scoring jobs on the Batch cluster.

  3. Задания оценки выполняются параллельно на узлах кластера пакетной службы.Scoring jobs run in parallel across the nodes of the Batch cluster. Каждый узел:Each node:

    1. Извлекает из DOCKER Hub образ DOCKER Worker и запускает контейнер.Pulls the worker Docker image from Docker Hub and starts a container.

    2. Считывает входные данные и предварительно обученные модели R из хранилища BLOB-объектов Azure.Reads input data and pre-trained R models from Azure Blob storage.

    3. Оценивает данные для создания прогнозов.Scores the data to produce the forecasts.

    4. Записывает результаты прогноза в хранилище BLOB-объектов.Writes the forecast results to blob storage.

На рисунке ниже показан прогнозируемый объем продаж для четырех продуктов (SKU) в одном магазине.The figure below shows the forecasted sales for four products (SKUs) in one store. Черная линия — это история продаж, пунктирная линия — медиана (Q50), розовая полоса представляет двадцать пятый и Севенти-пятый процентили, а синяя полоса — пятый и девяносто процентили.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.

Прогнозы продаж

АрхитектураArchitecture

Архитектура состоит из следующих компонентов.This architecture consists of the following components.

Пакетная служба Azure используется для параллельного выполнения заданий формирования прогноза в кластере виртуальных машин.Azure Batch is used to run forecast generation jobs in parallel on a cluster of virtual machines. Прогнозы выполняются с помощью предварительно обученных моделей машинного обучения, реализованных в R. Пакетная служба Azure может автоматически масштабировать количество виртуальных машин в зависимости от количества заданий, отправленных в кластер.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. На каждом узле сценарий R выполняется в контейнере DOCKER для оценки данных и формирования прогнозов.On each node, an R script runs within a Docker container to score data and generate forecasts.

Хранилище BLOB-объектов Azure используется для хранения входных данных, предварительно обученных моделей машинного обучения и результатов прогноза.Azure Blob Storage is used to store the input data, the pre-trained machine learning models, and the forecast results. Он предоставляет очень экономичное хранилище для производительности, требуемой для этой рабочей нагрузки.It delivers very cost-effective storage for the performance that this workload requires.

Служба " экземпляры контейнеров Azure " обеспечивает бессерверное вычисление по запросу.Azure Container Instances provide serverless compute on demand. В этом случае экземпляр контейнера развертывается по расписанию для запуска пакетных заданий, создающих прогнозы.In this case, a container instance is deployed on a schedule to trigger the Batch jobs that generate the forecasts. Пакетные задания запускаются из скрипта R с помощью пакета doAzureParallel .The Batch jobs are triggered from an R script using the doAzureParallel package. Экземпляр контейнера автоматически завершает работу после завершения заданий.The container instance automatically shuts down once the jobs have finished.

Azure Logic Apps запускать весь рабочий процесс, развертывая экземпляры контейнеров по расписанию.Azure Logic Apps trigger the entire workflow by deploying the container instances on a schedule. Соединитель экземпляров контейнеров Azure в Logic Apps позволяет развертывать экземпляр на основе ряда событий триггера.An Azure Container Instances connector in Logic Apps allows an instance to be deployed upon a range of trigger events.

Вопросы производительностиPerformance considerations

Контейнерное развертываниеContainerized deployment

В этой архитектуре все скрипты R выполняются в контейнерах DOCKER .With this architecture, all R scripts run within Docker containers. Это гарантирует, что скрипты запускаются в единообразной среде с одинаковой версией R и версиями пакетов каждый раз.This ensures that the scripts run in a consistent environment, with the same R version and packages versions, every time. Отдельные образы DOCKER используются для планировщика и рабочих контейнеров, так как каждый из них имеет свой набор зависимостей пакета R.Separate Docker images are used for the scheduler and worker containers, because each has a different set of R package dependencies.

Служба "экземпляры контейнеров Azure" предоставляет бессерверную среду для запуска контейнера планировщика.Azure Container Instances provides a serverless environment to run the scheduler container. Контейнер планировщика запускает сценарий R, который запускает отдельные задания оценки, выполняемые в кластере пакетной службы Azure.The scheduler container runs an R script that triggers the individual scoring jobs running on an Azure Batch cluster.

Каждый узел кластера пакетной службы запускает рабочий контейнер, который выполняет скрипт оценки.Each node of the Batch cluster runs the worker container, which executes the scoring script.

Параллелизации рабочей нагрузкиParallelizing the workload

При использовании данных пакетной обработки с моделями R рассмотрите способ параллелизации рабочей нагрузки.When batch scoring data with R models, consider how to parallelize the workload. Входные данные должны быть секционированы по каким бы то ни было, что операция оценки может быть распределена между узлами кластера.The input data must be partitioned somehow so that the scoring operation can be distributed across the cluster nodes. Попробуйте использовать различные подходы, чтобы найти оптимальный вариант распространения рабочей нагрузки.Try different approaches to discover the best choice for distributing your workload. Для каждого случая учитывайте следующее.On a case-by-case basis, consider the following:

  • Объем данных, которые могут быть загружены и обработаны в памяти одного узла.How much data can be loaded and processed in the memory of a single node.
  • Затраты на запуск каждого пакетного задания.The overhead of starting each batch job.
  • Затраты на загрузку моделей R.The overhead of loading the R models.

В сценарии, используемом в этом примере, объекты модели велики, и создание прогноза для отдельных продуктов занимает всего несколько секунд.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. По этой причине можно сгруппировать продукты и выполнить одно пакетное задание для каждого узла.For this reason, you can group the products and execute a single Batch job per node. Цикл внутри каждого задания создает прогнозы для продуктов последовательно.A loop within each job generates forecasts for the products sequentially. Этот метод становится наиболее эффективным способом параллелизации этой конкретной рабочей нагрузки.This method turns out to be the most efficient way to parallelize this particular workload. Это позволяет избежать издержек на запуск множества небольших пакетных заданий и многократной загрузки моделей R.It avoids the overhead of starting many smaller Batch jobs and repeatedly loading the R models.

Альтернативный подход заключается в активации одного пакетного задания для каждого продукта.An alternative approach is to trigger one Batch job per product. Пакетная служба Azure автоматически формирует очередь заданий и отправляет их для выполнения в кластере, когда узлы становятся доступными.Azure Batch automatically forms a queue of jobs and submits them to be executed on the cluster as nodes become available. Используйте Автоматическое масштабирование , чтобы настроить количество узлов в кластере в зависимости от числа заданий.Use automatic scaling to adjust the number of nodes in the cluster depending on the number of jobs. Этот подход имеет более смысл, если для выполнения каждой операции оценки требуется относительно много времени, что позволяет выровнять издержки на запуск заданий и перезагрузку объектов модели.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. Этот подход также упрощает реализацию и дает возможность использовать автоматическое масштабирование — важно учитывать, если размер общей рабочей нагрузки заранее не известен.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.

Мониторинг и ведение журнала запросовMonitoring and logging considerations

Наблюдение за пакетными заданиями AzureMonitoring Azure Batch jobs

Отслеживайте и завершайте пакетные задания в области задания учетной записи пакетной службы в портал Azure.Monitor and terminate Batch jobs from the Jobs pane of the Batch account in the Azure portal. Отслеживайте кластер пакетной службы, включая состояние отдельных узлов, в области Пулы .Monitor the batch cluster, including the state of individual nodes, from the Pools pane.

Ведение журнала с помощью doAzureParallelLogging with doAzureParallel

Пакет doAzureParallel автоматически собирает журналы всех stdout/stderr для каждого задания, отправленного в пакетной службе Azure.The doAzureParallel package automatically collects logs of all stdout/stderr for every job submitted on Azure Batch. Их можно найти в учетной записи хранения, созданной при установке.These can be found in the storage account created at setup. Чтобы просмотреть их, используйте средство навигации по хранению, например Обозреватель службы хранилища Azure или портал Azure.To view them, use a storage navigation tool such as Azure Storage Explorer or Azure portal.

Чтобы быстро выполнить отладку пакетных заданий во время разработки, распечатайте журналы в локальном сеансе R с помощью функции Жетжобфилес doAzureParallel.To quickly debug Batch jobs during development, print logs in your local R session using the getJobFiles function of doAzureParallel.

Рекомендации по стоимостиCost considerations

Ресурсы вычислений, используемые в этой эталонной архитектуре, являются самыми ресурсоемкими компонентами.The compute resources used in this reference architecture are the most costly components. В этом случае кластер фиксированного размера создается при каждом запуске задания, а затем завершает работу после завершения задания.For this scenario, a cluster of fixed size is created whenever the job is triggered and then shut down after the job has completed. Стоимость наступает только тогда, когда узлы кластера запускаются, запускаются или завершают работу.Cost is incurred only while the cluster nodes are starting, running, or shutting down. Этот подход подходит для сценария, в котором ресурсы вычислений, необходимые для создания прогнозов, остаются относительно постоянными от задания к работе.This approach is suitable for a scenario where the compute resources required to generate the forecasts remain relatively constant from job to job.

В сценариях, где объем вычислений, необходимых для выполнения задания, не известен заранее, может оказаться более подходящим использовать автоматическое масштабирование.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. При таком подходе размер кластера масштабируется или изменяется в зависимости от размера задания.With this approach, the size of the cluster is scaled up or down depending on the size of the job. Пакетная служба Azure поддерживает ряд формул автомасштабирования, которые можно задать при определении кластера с помощью API doAzureParallel .Azure Batch supports a range of auto-scale formulae which you can set when defining the cluster using the doAzureParallel API.

В некоторых сценариях время между заданиями может быть слишком коротким, чтобы завершить работу кластера и запустить его.For some scenarios, the time between jobs may be too short to shut down and start up the cluster. В таких случаях при необходимости обеспечьте выполнение кластера между заданиями.In these cases, keep the cluster running between jobs if appropriate.

Пакетная служба Azure и doAzureParallel поддерживают использование виртуальных машин с низким приоритетом.Azure Batch and doAzureParallel support the use of low-priority VMs. Эти виртуальные машины имеют значительную скидку, но риск, подходящий для других рабочих нагрузок с более высоким приоритетом.These VMs come with a significant discount but risk being appropriated by other higher priority workloads. Поэтому использование этих виртуальных машин не рекомендуется для критически важных рабочих нагрузок.The use of these VMs are therefore not recommended for critical production workloads. Однако они очень полезны для экспериментальных и разрабатываемых рабочих нагрузок.However, they are very useful for experimental or development workloads.

РазвертываниеDeployment

Чтобы развернуть эту эталонную архитектуру, выполните действия, описанные в репозитории GitHub .To deploy this reference architecture, follow the steps described in the GitHub repo.