Modelos de classificação de lote do Python no AzureBatch scoring of Python models on Azure

Esta arquitetura de referência mostra como criar uma solução dimensionável para o batch muitos modelos de classificação com base numa agenda em paralelo com o serviço do 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. A solução pode ser utilizada como um modelo e pode generalizar para problemas diferentes.The solution can be used as a template and can generalize to different problems.

Uma implementação de referência para esta arquitetura está disponível no GitHub.A reference implementation for this architecture is available on GitHub.

Modelos de classificação de lote do Python no Azure

Cenário: Esta solução monitoriza a operação de um grande número de dispositivos numa definição de IoT em que cada dispositivo envia as leituras dos sensores continuamente.Scenario: This solution monitors the operation of a large number of devices in an IoT setting where each device sends sensor readings continuously. Cada dispositivo é considerado como associados com modelos de deteção de anomalias pré-preparadas com que têm de ser utilizado para prever se uma série de medidas, que são agregados ao longo de um intervalo de tempo predefinido, correspondem a uma anomalia ou não.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. Em cenários de mundo real, isso pode ser um fluxo das leituras dos sensores que têm de ser filtrada e agregados antes de ser usado no treinamento ou de classificação em tempo 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. Para simplificar, esta solução usa o mesmo arquivo de dados ao executar tarefas de classificação.For simplicity, this solution uses the same data file when executing scoring jobs.

Esta arquitetura de referência foi concebida para cargas de trabalho que são acionadas com base numa agenda.This reference architecture is designed for workloads that are triggered on a schedule. Processamento envolve os seguintes passos:Processing involves the following steps:

  1. Envie as leituras dos sensores para ingestão para os Hubs de eventos do Azure.Send sensor readings for ingestion to Azure Event Hubs.
  2. Realizar o processamento de fluxo e armazenar os dados não processados.Perform stream processing and store the raw data.
  3. Envie os dados para um cluster de Machine Learning que está pronto para começar a tirar o trabalho.Send the data to a Machine Learning cluster that is ready to start taking work. Cada nó do cluster executa uma tarefa de classificação para um sensor específico.Each node in the cluster runs a scoring job for a specific sensor.
  4. Execute o pipeline de classificação, que executa as tarefas de classificação em paralelo com scripts do Machine Learning Python.Execute the scoring pipeline, which runs the scoring jobs in parallel using Machine Learning Python scripts. O pipeline é criado, publicado e agendado para ser executada num intervalo de tempo predefinido.The pipeline is created, published, and scheduled to run on a predefined interval of time.
  5. Gerar predições e armazená-los no armazenamento de BLOBs para consumo posterior.Generate predictions and store them in Blob storage for later consumption.

ArquiteturaArchitecture

Esta arquitetura é composta pelos seguintes componentes:This architecture consists of the following components:

Os Hubs de eventos do Azure.Azure Event Hubs. Este serviço de ingestão de mensagens pode ingerir milhões de mensagens de eventos por segundo.This message ingestion service can ingest millions of event messages per second. Nesta arquitetura, sensores, enviar um fluxo de dados para o hub de eventos.In this architecture, sensors send a stream of data to the event hub.

O Azure Stream Analytics.Azure Stream Analytics. Um motor de processamento de eventos.An event-processing engine. Uma tarefa do Stream Analytics lê os dados transmitidos em fluxo do hub de eventos e efetua o processamento de fluxo.A Stream Analytics job reads the data streams from the event hub and performs stream processing.

Base de dados SQL do Azure.Azure SQL Database. Dados a partir das leituras dos sensores são carregados na base de dados SQL.Data from the sensor readings is loaded into SQL Database. SQL é uma forma fácil e familiar para armazenar os dados processados, transmitidos em fluxo (que é a tabela e não estruturados), mas outros arquivos de dados podem ser utilizados.SQL is a familiar way to store the processed, streamed data (which is tabular and structured), but other data stores can be used.

Azure Machine Learning Service.Azure Machine Learning Service. Machine Learning é um serviço cloud de formação, classificação, implementar e gerir modelos de aprendizagem automática à escala.Machine Learning is a cloud service for training, scoring, deploying, and managing machine learning models at scale. No contexto de classificação de lote, o Machine Learning cria um cluster de máquinas virtuais a pedido com uma opção de dimensionamento automático, onde cada nó do cluster é executada uma tarefa de classificação para um sensor específico.In the context of batch scoring, Machine Learning 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. As tarefas de classificação são executadas em paralelo, como passos de script de Python que são colocados em fila e geridos pelo Machine Learning.The scoring jobs are executed in parallel as Python-script steps that are queued and managed by Machine Learning. Estes passos fazem parte de um pipeline de Machine Learning, que é criado, publicado e agendado para ser executada num intervalo de tempo predefinido.These steps are part of a Machine Learning pipeline that is created, published, and scheduled to run on a predefined interval of time.

Armazenamento de Blobs do Azure.Azure Blob Storage. Contentores de BLOBs são utilizados para armazenar os modelos de pretrained, os dados e as previsões de saída.Blob containers are used to store the pretrained models, the data, and the output predictions. Os modelos são carregados para o armazenamento de BLOBs na [01_create_resources.ipynb] create-resources bloco de notas.The models are uploaded to Blob storage in the 01_create_resources.ipynb notebook. Estes [uma classe SVM] one-class-svm modelos estão treinados nos dados que representa valores de sensores diferentes para diferentes dispositivos.These one-class SVM models are trained on data that represents values of different sensors for different devices. Esta solução assume que os valores de dados são agregados ao longo de um intervalo fixo de tempo.This solution assumes that the data values are aggregated over a fixed interval of time.

Azure Container Registry.Azure Container Registry. A classificação Python [script] pyscript é executado em contentores do Docker que são criados em cada nó do cluster, onde ele lê os dados de sensor relevantes, gera predições e armazena-os no armazenamento 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.

Considerações de desempenhoPerformance considerations

Para modelos de Python padrão, é geralmente aceite que CPUs são suficientes para processar a carga de trabalho.For standard Python models, it's generally accepted that CPUs are sufficient to handle the workload. Esta arquitetura utiliza CPUs.This architecture uses CPUs. No entanto, para cargas de trabalho de aprendizagem profunda, GPUs geralmente superar o desempenho de CPUs por uma quantidade considerável — um cluster especial de CPUs, normalmente, é necessário para obter o desempenho comparável.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.

Paralelização por núcleos do vs VMsParallelizing across VMs vs cores

Ao executar processos de muitos modelos de classificação no modo de lote, os trabalhos tem de ser colocado em paralelo entre VMs.When running scoring processes of many models in batch mode, the jobs need to be parallelized across VMs. Duas abordagens são possíveis:Two approaches are possible:

  • Crie um cluster maior, ao utilizar VMs de baixo custo.Create a larger cluster using low-cost VMs.

  • Crie um cluster mais pequeno com alto executar VMs com maior número de núcleos disponíveis em cada um.Create a smaller cluster using high performing VMs with more cores available on each.

Em geral, não é tão exigente como classificação de modelos de aprendizagem profunda de classificação de modelos de Python padrão e um pequeno cluster deve ser capaz de lidar com um grande número de modelos em fila com eficiência.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. Pode aumentar o número de nós de cluster como o aumento de tamanhos de conjunto de dados.You can increase the number of cluster nodes as the dataset sizes increase.

Para sua comodidade neste cenário, uma tarefa de classificação é submetida dentro de um único passo de pipeline de Machine Learning.For convenience in this scenario, one scoring task is submitted within a single Machine Learning pipeline step. No entanto, pode ser mais eficiente para pontuar vários segmentos de dados dentro do mesmo passo de pipeline.However, it can be more efficient to score multiple data chunks within the same pipeline step. Nesses casos, escreva código personalizado para vários conjuntos de dados de leitura e executar o script de classificação para aquelas durante a execução de uma passo a passo.In those cases, write custom code to read in multiple datasets and execute the scoring script for those during a single-step execution.

Considerações de gestãoManagement considerations

  • Monitorizar tarefas.Monitor jobs. É importante monitorizar o progresso das tarefas em execução, mas pode ser um desafio para monitorizar um cluster de nós ativos.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 inspecionar o estado de nós do cluster, utilize o [Portal do Azure] portal para gerir o área de trabalho do machine learning.To inspect the state of the nodes in the cluster, use the Azure Portal to manage the machine learning workspace. Se um nó estiver inativo ou uma tarefa falhou, os registos de erros são guardados no armazenamento de BLOBs e também estão acessíveis na secção de Pipelines.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 um monitoramento mais avançado, ligar os registos para Application Insights, ou executar processos separados para consultar o estado do cluster e respetivas tarefas.For richer monitoring, connect logs to Application Insights, or run separate processes to poll for the state of the cluster and its jobs.
  • Registo.Logging. Serviço de Machine Learning regista todos os stdout/stderr a conta de armazenamento do Azure associada.Machine Learning Service logs all stdout/stderr to the associated Azure Storage account. Para visualizar facilmente os ficheiros de registo, utilize uma ferramenta de navegação de armazenamento, tal como Explorador de armazenamento do Azure.To easily view the log files, use a storage navigation tool such as Azure Storage Explorer.

Considerações de custosCost considerations

Os componentes mais caros utilizados nesta arquitetura de referência são os recursos de computação.The most expensive components used in this reference architecture are the compute resources. O tamanho do cluster de computação é dimensionada e reduzir verticalmente consoante as tarefas na fila.The compute cluster size scales up and down depending on the jobs in the queue. Ative dimensionamento automático por meio de programação através do SDK de Python, modificando a configuração de aprovisionamento a computação.Enable automatic scaling programmatically through the Python SDK by modifying the compute’s provisioning configuration. Ou utilize o [CLI do Azure] cli para definir os parâmetros de dimensionamento automáticos do cluster.Or use the Azure CLI to set the automatic scaling parameters of the cluster.

Para o trabalho que não requer processamento imediato, configure a fórmula de dimensionamento automática, para que o estado predefinido (mínimo) é um cluster de nós de zero.For work that doesn't require immediate processing, configure the automatic scaling formula so the default state (minimum) is a cluster of zero nodes. Com esta configuração, o cluster começa com zero nós e só são verticalmente quando detetar tarefas na fila.With this configuration, the cluster starts with zero nodes and only scales up when it detects jobs in the queue. Se o processo de classificação do lote acontece apenas algumas vezes por dia ou menos, esta definição permite a redução significativa de custos.If the batch scoring process happens only a few times a day or less, this setting enables significant cost savings.

Dimensionamento automático pode não ser adequado para tarefas de lote que acontecem aproximar muito entre si.Automatic scaling may not be appropriate for batch jobs that happen too close to each other. O tempo que demora para um cluster lançar e multi-canal também incorre num custo, portanto, se uma carga de trabalho do batch começa apenas alguns minutos depois de termina a tarefa anterior, pode ser mais rentável para manter o cluster em execução entre tarefas.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. Isso depende se os processos de classificação são agendados para serem executadas com alta frequência (a cada hora, por exemplo) ou com menos frequência (uma vez por mês, por exemplo).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).

ImplementaçãoDeployment

Para implementar esta arquitetura de referência, siga os passos descritos na repositório do GitHub.To deploy this reference architecture, follow the steps described in the GitHub repo.