Classificação em tempo real de Python scikit-saiba e modelos no Azure de aprendizagem profundaReal-time scoring of Python scikit-learn and deep learning models on Azure

Esta arquitetura de referência mostra como implementar modelos de Python como serviços da web para fazer previsões em tempo real com o serviço Azure Machine Learning.This reference architecture shows how to deploy Python models as web services to make real-time predictions using the Azure Machine Learning service. Dois cenários são abordados: implementar modelos de Python regulares e requisitos específicos da implementação de modelos de aprendizagem profunda.Two scenarios are covered: deploying regular Python models, and the specific requirements of deploying deep learning models. Ambos os cenários usam a arquitetura mostrada.Both scenarios use the architecture shown.

Duas implementações de referência para esta arquitetura estão disponíveis no GitHub, um para [regulares modelos de Python] github-python e outro para [modelos de aprendizagem profunda] github-dl.Two reference implementations for this architecture are available on GitHub, one for regular Python models and one for deep learning models.

Diagrama de arquitetura para a classificação em tempo real de modelos de Python no Azure

CenáriosScenarios

As implementações de referência demonstram duas cenários através desta arquitetura.The reference implementations demonstrate two scenarios using this architecture.

Cenário 1: Correspondência de FAQ.Scenario 1: FAQ matching. Este cenário mostra como implementar um perguntas mais frequentes (FAQ) correspondentes de modelo como um serviço web para fornecer previsões de indisponibilidade para as perguntas de utilizador.This scenario shows how to deploy a frequently asked questions (FAQ) matching model as a web service to provide predictions for user questions. Para este cenário, "Dados de entrada" no diagrama de arquitetura refere-se às cadeias de caracteres de texto que contém as perguntas de utilizador de acordo com uma lista de perguntas frequentes.For this scenario, "Input Data" in the architecture diagram refers to text strings containing user questions to match with a list of FAQs. Este cenário foi concebido para o [scikit-Saiba] scikit máquina a biblioteca de aprendizagem para o Python, mas pode ser generalizada para qualquer cenário que utiliza modelos de Python para fazer previsões em tempo real.This scenario is designed for the scikit-learn machine learning library for Python, but can be generalized to any scenario that uses Python models to make real-time predictions.

Este cenário utiliza um subconjunto de dados de pergunta do Stack Overflow, que incluem perguntas originais marcadas como JavaScript e suas respostas às perguntas duplicadas.This scenario uses a subset of Stack Overflow question data that includes original questions tagged as JavaScript, their duplicate questions, and their answers. Ele prepara um scikit-saiba pipeline para prever a probabilidade de correspondência de uma pergunta duplicada com cada uma das perguntas originais.It trains a scikit-learn pipeline to predict the match probability of a duplicate question with each of the original questions. Estes previsões são feitas em tempo real com um ponto de final de REST API.These predictions are made in real time using a REST API endpoint.

O fluxo da aplicação para esta arquitetura é o seguinte:The application flow for this architecture is as follows:

  1. O modelo preparado é registado no registo do modelo de Machine Learning.The trained model is registered to the Machine Learning model registry.
  2. O serviço de Machine Learning cria uma imagem do Docker que inclui o modelo e o script de classificação.The Machine Learning service creates a Docker image that includes the model and scoring script.
  3. Machine Learning implementa a imagem de classificação no Azure Kubernetes Service (AKS) como um serviço web.Machine Learning deploys the scoring image on Azure Kubernetes Service (AKS) as a web service.
  4. O cliente envia um pedido de HTTP POST com os dados de pergunta codificada.The client sends an HTTP POST request with the encoded question data.
  5. O serviço da web criado pelo Machine Learning extrai a pergunta do pedido.The web service created by Machine Learning extracts the question from the request.
  6. A pergunta é enviada para o modelo de pipeline Scikit-saiba para featurization e classificação.The question is sent to the Scikit-learn pipeline model for featurization and scoring.
  7. As perguntas de FAQ correspondentes com suas pontuações são devolvidas ao cliente.The matching FAQ questions with their scores are returned to the client.

Eis uma captura de ecrã da aplicação de exemplo que consome os resultados:Here is a screenshot of the example app that consumes the results:

Captura de ecrã da aplicação de exemplo

Cenário 2: Classificação de imagens.Scenario 2: Image classification. Este cenário mostra como implementar um modelo de rede Neural Convolucional (CNN) como um serviço web para fornecer previsões em imagens.This scenario shows how to deploy a Convolutional Neural Network (CNN) model as a web service to provide predictions on images. Para este cenário, "Dados de entrada" no diagrama de arquitetura refere-se a arquivos de imagem.For this scenario, "Input Data" in the architecture diagram refers to image files. CNNs são muito eficazes na visão do computador para tarefas como a classificação de imagens e deteção de objetos.CNNs are very effective in computer vision for tasks such as image classification and object detection. Este cenário foi concebido para as estruturas TensorFlow e PyTorch Keras (com o TensorFlow back-end).This scenario is designed for the frameworks TensorFlow, Keras (with the TensorFlow back end), and PyTorch. No entanto, pode ser generalizada para qualquer cenário que utiliza modelos de aprendizagem profunda para fazer previsões em tempo real.However, it can be generalized to any scenario that uses deep learning models to make real-time predictions.

Este cenário utiliza um modelo de utilizar o ResNet-152 pré-preparadas com base em com conjunto de dados do ImageNet - 1 K (1000 classes) para prever a qual categoria (veja a figura abaixo) uma imagem pertence.This scenario uses a pre-trained ResNet-152 model trained on ImageNet-1K (1,000 classes) dataset to predict which category (see figure below) an image belongs to. Estes previsões são feitas em tempo real com um ponto de final de REST API.These predictions are made in real time using a REST API endpoint.

Exemplo de previsões

O fluxo da aplicação para o modelo de aprendizagem profunda é o seguinte:The application flow for the deep learning model is as follows:

  1. O modelo de aprendizagem profunda está registado no registo de modelo de Machine Learning.The deep learning model is registered to the Machine Learning model registry.
  2. O serviço de Machine Learning cria uma imagem do docker, incluindo o modelo e o script de classificação.The Machine Learning service creates a docker image including the model and scoring script.
  3. Machine Learning implementa a imagem de classificação no Azure Kubernetes Service (AKS) como um serviço web.Machine Learning deploys the scoring image on Azure Kubernetes Service (AKS) as a web service.
  4. O cliente envia um pedido de HTTP POST com os dados de imagem codificada.The client sends an HTTP POST request with the encoded image data.
  5. O serviço da web criado pelo Machine Learning pré-processa dados de imagem e envia-os para o modelo para a classificação.The web service created by Machine Learning preprocesses the image data and sends it to the model for scoring.
  6. As categorias previstas com suas pontuações são devolvidas ao cliente.The predicted categories with their scores are returned to the client.

ArquiteturaArchitecture

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

[O serviço do Azure Machine Learning] aml é um serviço cloud que serve para preparar, implementar, automatizar e gerir modelos de aprendizagem automática, tudo na escala amplo que a cloud oferece.Azure Machine Learning service is a cloud service that is used to train, deploy, automate and manage machine learning models, all at the broad scale that the cloud provides. É utilizado nesta arquitetura para gerenciar a implantação de modelos, bem como a autenticação, encaminhamento e balanceamento de carga do serviço web.It is used in this architecture to manage the deployment of models as well as authentication, routing, and load balancing of the web service.

[Máquina virtual] vm (VM).Virtual machine (VM). A VM é mostrada como um exemplo de um dispositivo — local ou na cloud — que pode enviar uma solicitação HTTP.The VM is shown as an example of a device — local or in the cloud — that can send an HTTP request.

[Serviço Kubernetes do Azure] aks (AKS) é utilizado para implementar a aplicação num cluster do Kubernetes.Azure Kubernetes Service (AKS) is used to deploy the application on a Kubernetes cluster. AKS simplifica a implantação e operações do Kubernetes.AKS simplifies the deployment and operations of Kubernetes. O cluster pode ser configurado com as VMs só na CPU para modelos de Python regulares ou VMs ativadas para GPU para modelos de aprendizagem profunda.The cluster can be configured using CPU-only VMs for regular Python models or GPU-enabled VMs for deep learning models.

[O Azure Container Registry] acr permite o armazenamento de imagens de todos os tipos de implementações de contentor do Docker incluindo DC/OS, Docker Swarm e Kubernetes.Azure Container Registry enables storage of images for all types of Docker container deployments including DC/OS, Docker Swarm and Kubernetes. As imagens de classificação são implementadas como contentores no Azure Kubernetes Service e utilizadas para executar o script de classificação.The scoring images are deployed as containers on Azure Kubernetes Service and used to run the scoring script. A imagem utilizada aqui é criada pelo Machine Learning a partir do modelo preparado e o script de classificação e, em seguida, é emitida para o Azure Container Registry.The image used here is created by Machine Learning from the trained model and scoring script, and then is pushed to the Azure Container Registry.

Considerações de desempenhoPerformance considerations

Para arquiteturas de classificação em tempo real, o desempenho de taxa de transferência se torna uma consideração dominante.For real-time scoring architectures, throughput performance becomes a dominant consideration. Para modelos de Python regulares, é geralmente aceite que CPUs são suficientes para processar a carga de trabalho.For regular Python models, it's generally accepted that CPUs are sufficient to handle the workload.

No entanto para cargas de trabalho de aprendizagem profunda, quando a velocidade é de um estrangulamento, GPUs geralmente proporcionar melhor [desempenho] gpus-vs-cpus em comparação com a CPUs.However for deep learning workloads, when speed is a bottleneck, GPUs generally provide better performance compared to CPUs. Para fazer corresponder o desempenho de GPU com CPUs, um cluster com grande número de CPUs, normalmente, é necessário.To match GPU performance using CPUs, a cluster with large number of CPUs is usually needed.

Pode utilizar CPUs para esta arquitetura em ambos os cenários, mas para modelos de aprendizagem profunda, GPUs proporcionar significativamente superior em comparação comparadas um cluster de CPU de custo semelhante de valores de débito.You can use CPUs for this architecture in either scenario, but for deep learning models, GPUs provide significantly higher throughput values compared to a CPU cluster of similar cost. AKS suporta a utilização de GPUs, que é uma das vantagens de utilizar o AKS para esta arquitetura.AKS supports the use of GPUs, which is one advantage of using AKS for this architecture. Além disso, as implementações de aprendizagem profunda, normalmente, utilizam modelos com um elevado número de parâmetros.Also, deep learning deployments typically use models with a high number of parameters. Utilizar GPUs impede a contenção de recursos entre o modelo e o web service, que é um problema em implementações só na CPU.Using GPUs prevents contention for resources between the model and the web service, which is an issue in CPU-only deployments.

Considerações de escalabilidadeScalability considerations

Para regular Python modela, onde o cluster do AKS é aprovisionado com as VMs só na CPU, tenha cuidado quando aumentar horizontalmente o número de pods.For regular Python models, where the AKS cluster is provisioned with CPU-only VMs, take care when scaling out the number of pods. O objetivo é utilizar totalmente o cluster.The goal is to fully utilize the cluster. Dimensionamento depende dos pedidos de CPU e os limites definidos para os pods.Scaling depends on the CPU requests and limits defined for the pods. Também oferece suporte a aprendizagem automática através de Kubernetes [pod dimensionamento automático] autoscale-pods com base na utilização da CPU ou de outras métricas.Machine Learning through Kubernetes also supports pod autoscaling based on CPU utilization or other metrics. O [dimensionamento automático de clusters] autoscaler (pré-visualização) permite dimensionar nós de agente com base nos pods pendentes.The cluster autoscaler (in preview) can scale agent nodes based on the pending pods.

Para mais profundos aprender cenários, ao utilizar VMs ativadas para GPU, limites de recursos no pods fazem com que um GPU é atribuído a um pod.For deep learning scenarios, using GPU-enabled VMs, resource limits on pods are such that one GPU is assigned to one pod. Dependendo do tipo de VM utilizado, deve [dimensionar os nós do cluster] scale-cluster para satisfazer a procura para o serviço.Depending on the type of VM used, you must scale the nodes of the cluster to meet the demand for the service. Pode fazê-lo facilmente com a CLI do Azure e o kubectl.You can do this easily using the Azure CLI and kubectl.

Monitorização e considerações de registoMonitoring and logging considerations

Monitorização do AKSAKS monitoring

Para a visibilidade sobre o desempenho do AKS, utilize o [Monitor do Azure para contentores] monitor-containers funcionalidade.For visibility into AKS performance, use the Azure Monitor for containers feature. Recolhe métricas de memória e processador de controladores, nós e contentores que estão disponíveis no Kubernetes por meio da API de métricas.It collects memory and processor metrics from controllers, nodes, and containers that are available in Kubernetes through the Metrics API.

Ao implementar a aplicação, monitorize o cluster do AKS para se certificar-se de que está a funcionar conforme esperado, todos os nós estão operacionais e todos os pods em execução.While deploying your application, monitor the AKS cluster to make sure it's working as expected, all the nodes are operational, and all pods are running. Apesar de poder utilizar o kubectl kubectl ferramenta da linha de comandos para obter o estado de pod, Kubernetes também inclui um dashboard de web para a monitorização básica do Estado do cluster e gestão.Although you can use the kubectl command-line tool to retrieve pod status, Kubernetes also includes a web dashboard for basic monitoring of the cluster status and management.

Captura de ecrã do dashboard do Kubernetes

Para ver o estado geral do cluster e nós, vá para o nós secção do dashboard do Kubernetes.To see the overall state of the cluster and nodes, go to the Nodes section of the Kubernetes dashboard. Se um nó estiver inativo ou falhou, pode apresentar os registos de erros dessa página.If a node is inactive or has failed, you can display the error logs from that page. Da mesma forma, vá para o Pods e implementações secções para obter informações sobre o número de pods e o estado da implementação.Similarly, go to the Pods and Deployments sections for information about the number of pods and status of your deployment.

Registos do AKSAKS logs

AKS regista automaticamente stdout/stderr todos os registos de pods no cluster.AKS automatically logs all stdout/stderr to the logs of the pods in the cluster. Utilizar o kubectl para vê-los e também ao nível do nó de eventos e registos.Use kubectl to see these and also node-level events and logs. Para obter detalhes, veja os passos de implementação.For details, see the deployment steps.

Uso [Monitor do Azure para contentores] monitor-containers para recolher métricas e registos através de uma versão em contentores do agente do Log Analytics para Linux, o que é armazenada na sua área de trabalho do Log Analytics.Use Azure Monitor for containers to collect metrics and logs through a containerized version of the Log Analytics agent for Linux, which is stored in your Log Analytics workspace.

Considerações de segurançaSecurity considerations

Para obter uma visão central do estado de segurança dos recursos do Azure, utilize o Centro de Segurança do Azure.Use Azure Security Center to get a central view of the security state of your Azure resources. Centro de segurança monitoriza potenciais problemas de segurança e fornece uma visão global do Estado de funcionamento de segurança da sua implementação, embora ele não monitoriza nós de agente do AKS.Security Center monitors potential security issues and provides a comprehensive picture of the security health of your deployment, although it doesn't monitor AKS agent nodes. O Centro de Segurança está configurado por subscrição do Azure.Security Center is configured per Azure subscription. Ativar a recolha de dados de segurança, conforme descrito em carregar sua subscrição do Azure para o Centro de segurança Standard.Enable security data collection as described in Onboard your Azure subscription to Security Center Standard. Quando a recolha de dados está ativada, o Centro de Segurança analisa automaticamente todas as VMs criadas nessa subscrição.When data collection is enabled, Security Center automatically scans any VMs created under that subscription.

Operações.Operations. Para iniciar sessão para um cluster do AKS com o token de autenticação do Azure Active Directory (Azure AD), configure o AKS para utilizar o Azure AD para autenticação de utilizador.To sign in to an AKS cluster using your Azure Active Directory (Azure AD) authentication token, configure AKS to use Azure AD for user authentication. Administradores de cluster também podem configurar o controlo de acesso baseado em função do Kubernetes (RBAC) com base na associação de grupo de identidade ou o diretório de um utilizador.Cluster administrators can also configure Kubernetes role-based access control (RBAC) based on a user's identity or directory group membership.

Uso RBAC rbac para controlar o acesso aos recursos do Azure que implementar.Use RBAC to control access to the Azure resources that you deploy. O RBAC permite-lhe atribuir funções de autorização a membros da sua equipa de DevOps.RBAC lets you assign authorization roles to members of your DevOps team. Um utilizador pode ser atribuído a várias funções e pode criar funções personalizadas para muito mais refinado permissões.A user can be assigned to multiple roles, and you can create custom roles for even more fine-grained permissions.

HTTPS.HTTPS. Como prática recomendada de segurança, a aplicação deve impor HTTPS e redirecionar os pedidos HTTP.As a security best practice, the application should enforce HTTPS and redirect HTTP requests. Utilize um [controlador de entradas] ingress-controller para implementar um proxy inverso que termina o SSL e redireciona os pedidos de HTTP.Use an ingress controller to deploy a reverse proxy that terminates SSL and redirects HTTP requests. Para obter mais informações, consulte criar um controlador de entradas HTTPS no Azure Kubernetes Service (AKS).For more information, see Create an HTTPS ingress controller on Azure Kubernetes Service (AKS).

Autenticação.Authentication. Esta solução não restringe o acesso aos pontos finais.This solution doesn't restrict access to the endpoints. Para implementar a arquitetura numa definição empresarial, proteger os pontos de extremidade através de chaves de API e adicionar algum tipo de autenticação de utilizador para a aplicação cliente.To deploy the architecture in an enterprise setting, secure the endpoints through API keys and add some form of user authentication to the client application.

Registo de contentor.Container registry. Esta solução utiliza o Azure Container Registry para armazenar a imagem do Docker.This solution uses Azure Container Registry to store the Docker image. O código que depende a aplicação e o modelo, são contidos nesta imagem.The code that the application depends on, and the model, are contained within this image. Aplicações empresariais devem utilizar um registo privado para o ajudar a proteger contra execução de código malicioso e para ajudar a manter as informações no interior do contentor sejam comprometidos.Enterprise applications should use a private registry to help guard against running malicious code and to help keep the information inside the container from being compromised.

Proteção contra DDoS.DDoS protection. Considere ativar padrão de proteção de DDoS.Consider enabling DDoS Protection Standard. Embora básica DDoS protection está ativada como parte da plataforma do Azure, o padrão de proteção contra DDoS fornece capacidades de atenuação que são ajustadas especificamente para os recursos de rede virtual do Azure.Although basic DDoS protection is enabled as part of the Azure platform, DDoS Protection Standard provides mitigation capabilities that are tuned specifically to Azure virtual network resources.

Registo.Logging. Utilize as práticas recomendadas antes de armazenar dados de registo, como limpeza de palavras-passe de utilizador e outras informações que podem ser utilizadas para uma fraude de segurança.Use best practices before storing log data, such as scrubbing user passwords and other information that could be used to commit security fraud.

ImplementaçãoDeployment

Para implementar esta arquitetura de referência, siga os passos descritos em repositórios do GitHub:To deploy this reference architecture, follow the steps described in the GitHub repos: