Pontuação em tempo real de modelos de machine learning em Python

Container Registry
Kubernetes Service
Machine Learning
Monitor
Máquinas Virtuais

Esta arquitetura de referência mostra como implementar modelos Python como serviços web para fazer previsões em tempo real usando Azure Kubernetes Service. Os modelos de machine learning implantados em Azure Kubernetes são bons para implantações de produção de alta escala. Neste artigo estão abordados dois cenários: implantação de modelos Python regulares e requisitos específicos de implementação de modelos de aprendizagem profunda. Ambos os cenários usam a arquitetura mostrada. Além disso, duas implementações de referência para estes cenários estão disponíveis no GitHub, uma para modelos pitão regulares e outra para modelos de aprendizagem profunda.

Arquitetura

Diagrama de arquitetura para pontuação em tempo real de modelos Python em Azure.

Transfira um ficheiro do Visio desta arquitetura.

Cenário: Stack Overflow FAQ matching

Este cenário mostra como implementar um modelo de correspondência de perguntas frequentes (FAQ) como um serviço web para fornecer previsões para perguntas do utilizador. Para este cenário, "Input Data" no diagrama de arquitetura refere-se a cadeias de texto que contêm perguntas do utilizador para combinar com uma lista de PERGUNTAS Frequentes. Este cenário é projetado para a biblioteca de aprendizagem automática scikit-learn para Python, mas pode ser generalizado a qualquer cenário que use modelos Python para fazer previsões em tempo real.

Este cenário utiliza um subconjunto de dados de perguntas stack overflow que inclui perguntas originais marcadas como JavaScript, as suas perguntas duplicadas e as suas respostas. Treina um oleoduto de aprendizagem de scikit para prever a probabilidade de correspondência de uma pergunta duplicada com cada uma das perguntas originais. Estas previsões são feitas em tempo real utilizando um ponto final rest API.

Fluxo de trabalho

O fluxo de aplicação para esta arquitetura é o seguinte:

  1. O modelo treinado está registado no registo do modelo de machine learning.
  2. A Azure Machine Learning cria uma imagem docker que inclui o modelo e o script de pontuação.
  3. A Azure Machine Learning implementa a imagem de pontuação no Azure Kubernetes Service (AKS) como um serviço web.
  4. O cliente envia um pedido HTTP POST com os dados de perguntas codificados.
  5. O serviço web criado pela Azure Machine Learning extrai a pergunta do pedido.
  6. A questão é enviada para o modelo de pipeline scikit-learn para a caracterização e pontuação.
  7. As perguntas das FAQ correspondentes com as suas pontuações são devolvidas ao cliente.

Aqui está uma imagem da aplicação exemplo que consome os resultados:

Screenshot de uma aplicação de correspondência faq exemplo usando um subconjunto de dados de perguntas Stack Overflow.

Cenário: Classificação de imagem com uma Rede Neural Convolucional

Este cenário mostra como implementar um modelo de Rede Neural Convolutional (CNN) como um serviço web para fornecer previsões em imagens. Para este cenário, "Input Data" no diagrama de arquitetura refere-se a ficheiros de imagem. Os CNNs são eficazes na visão computacional para tarefas como a classificação de imagem e a deteção de objetos. Este cenário é projetado para as estruturas TensorFlow, Keras (com a parte traseira TensorFlow) e PyTorch. No entanto, pode ser generalizado a qualquer cenário que utilize modelos de aprendizagem profunda para fazer previsões em tempo real.

Este cenário utiliza um modelo resNet-152 pré-treinado treinado no conjunto de dados ImageNet-1K (1.000 classes) para prever a categoria (ver figura abaixo) a que pertence uma imagem. Estas previsões são feitas em tempo real utilizando um ponto final rest API.

Exemplo das previsões de classificação de imagem usando um modelo convolucional da Rede Neural (CNN) como um serviço web.

Fluxo de trabalho

O fluxo de aplicação para o modelo de aprendizagem profunda é o seguinte:

  1. O modelo de aprendizagem profunda está registado no registo de modelos de aprendizagem automática.
  2. A Azure Machine Learning cria uma imagem de estiva, incluindo o modelo e o script de pontuação.
  3. A Azure Machine Learning implementa a imagem de pontuação no Azure Kubernetes Service (AKS) como um serviço web.
  4. O cliente envia um pedido HTTP POST com os dados de imagem codificados.
  5. O serviço web criado pela Azure Machine Learning préprocessa os dados de imagem e envia-os para o modelo para pontuação.
  6. As categorias previstas com as suas pontuações são devolvidas ao cliente.

Componentes

Esta arquitetura é composta pelos seguintes componentes.

Azure Machine Learning é um serviço de nuvem que é usado para treinar, implantar, automatizar e gerir modelos de machine learning, tudo à escala larga que a nuvem fornece. É utilizado nesta arquitetura para gerir a implementação de modelos e autenticação, encaminhamento e equilíbrio de carga do serviço web.

Máquina virtual (VM). O VM é apresentado como um exemplo de um dispositivo - local ou na nuvem - que pode enviar um pedido HTTP.

Azure Kubernetes Service (AKS) é usado para implementar a aplicação num cluster Kubernetes. AKS simplifica a implantação e operações de Kubernetes. O cluster pode ser configurado usando VMs apenas cpu para modelos pitão regulares ou VMs ativados por GPU para modelos de aprendizagem profunda.

Azure Container Registry permite o armazenamento de imagens para todos os tipos de implantações de contentores Docker, incluindo DC/OS, Docker Swarm e Kubernetes. As imagens de pontuação são implantadas como recipientes em Azure Kubernetes Service e usadas para executar o script de pontuação. A imagem usada aqui é criada por Machine Learning a partir do modelo treinado e do script de pontuação, e depois é empurrada para o Azure Container Registry.

Considerações

Estas considerações implementam os pilares do Quadro Azure Well-Architected, que é um conjunto de princípios orientadores que podem ser utilizados para melhorar a qualidade de uma carga de trabalho. Para mais informações, consulte Microsoft Quadro Well-Architected Azure.

Eficiência de desempenho

Eficiência de desempenho é a capacidade da sua carga de trabalho para dimensionar para satisfazer as exigências que os utilizadores lhe colocam de forma eficiente. Para obter mais informações, consulte a visão geral do pilar de eficiência de desempenho.

Para arquiteturas de pontuação em tempo real, o desempenho de produção torna-se uma consideração dominante. Para os modelos Python regulares, os CPUs são suficientes para lidar com a carga de trabalho.

No entanto, para trabalhos de aprendizagem profunda, quando a velocidade é um estrangulamento, as GPUs geralmente proporcionam um melhor desempenho em comparação com os CPUs. Para combinar o desempenho da GPU usando CPUs, é normalmente necessário um cluster com um grande número de CPUs.

Você pode usar CPUs para esta arquitetura em qualquer um dos cenários, mas para modelos de aprendizagem profunda, as GPUs fornecem valores de produção mais elevados em comparação com um cluster cpU de custo semelhante. A AKS apoia o uso de GPUs, que é uma vantagem de usar AKS para esta arquitetura. Além disso, as implementações de aprendizagem profunda normalmente usam modelos com um elevado número de parâmetros. A utilização de GPUs impede a disputa de recursos entre o modelo e o serviço web, que é um problema em implementações apenas de CPU.

Escalabilidade

Para os modelos Python regulares, onde o cluster AKS é alocado com VMs apenas cpu, tome cuidado ao escalonar o número de cápsulas. O objetivo é utilizar totalmente o cluster. A escala depende dos pedidos e limites do CPU definidos para as cápsulas. Machine Learning através de Kubernetes também suporta a autoscalagem de pod com base na utilização do CPU ou outras métricas. O autoescalador de cluster pode escalar nós de agente com base nas cápsulas pendentes.

Para cenários de aprendizagem profunda, utilizando VMs ativados por GPU, os limites de recursos em cápsulas são tais que uma GPU é atribuída a uma cápsula. Dependendo do tipo de VM utilizado, deve escalar os nós do cluster para satisfazer a procura do serviço. Pode fazê-lo facilmente utilizando o Azure CLI e o kubectl.

Monitorização e registos

Monitorização da AKS

Para visibilidade no desempenho da AKS, utilize a função de insights do recipiente Azure Monitor . Recolhe métricas de memória e processador de controladores, nós e contentores que estão disponíveis em Kubernetes através da API métricas.

Enquanto implementa a sua aplicação, monitorize o cluster AKS para se certificar de que está funcionando como esperado, todos os nós estão operacionais, e todas as cápsulas estão funcionando. Embora possa utilizar a ferramenta de linha de comando kubectl para recuperar o estado do pod, kubernetes também inclui um painel web para monitorização básica do estado e gestão do cluster.

Uma imagem do painel kubernetes para monitorização básica do estado e gestão do cluster.

Para ver o estado geral do cluster e os nós, vá para a secção De Nós do tablier Kubernetes. Se um nó estiver inativo ou tiver falhado, pode apresentar os registos de erro dessa página. Da mesma forma, aceda às secções Pods e Implementações para obter informações sobre o número de cápsulas e o estado da sua implantação.

Registos AKS

AKS regista automaticamente todos os stdout/stderr nos registos das cápsulas no cluster. Use kubectl para ver estes e também eventos e registos de nível de nó. Para mais detalhes, consulte os passos de implantação.

Utilize insights de recipiente do Azure Monitor para recolher métricas e troncos através de uma versão contentorizada do agente Log Analytics para o Linux, que está armazenado no seu espaço de trabalho Log Analytics.

Segurança

A segurança fornece garantias contra ataques deliberados e abuso dos seus valiosos dados e sistemas. Para mais informações, consulte a visão geral do pilar de segurança.

Use Microsoft Defender para a Cloud para ter uma visão central do estado de segurança dos seus recursos Azure. O Defender for Cloud monitoriza potenciais problemas de segurança e fornece uma imagem completa da saúde de segurança da sua implementação, embora não monitorize os nós do agente AKS. O Defender for Cloud está configurado por subscrição do Azure. Ativar a recolha de dados de segurança como descrito no Enable Defender for Cloud nas suas subscrições. Quando a recolha de dados está ativada, o Defender for Cloud digitaliza automaticamente quaisquer VMs criados por essa subscrição.

As operações. Para iniciar sedutação num cluster AKS utilizando o seu token de autenticação Azure Ative (Azure AD), configube a AKS para utilizar Azure AD para autenticação do utilizador. Os administradores do cluster também podem configurar o controlo de acesso baseado em funções (Kubernetes RBAC) baseado na identidade de um utilizador ou na adesão ao grupo de diretórios.

Use o Azure RBAC para controlar o acesso aos recursos Azure que implementa. O Azure RBAC permite atribuir funções de autorização aos membros da sua equipa de DevOps. Um utilizador pode ser designado para várias funções, e pode criar funções personalizadas para permissões ainda mais finas.

HTTPS. Como uma boa prática de segurança, a aplicação deve impor HTTPS e redirecionar pedidos HTTP. Utilize um controlador de entrada para implantar um representante inverso que exerça sSL e redirecione os pedidos HTTP. Para obter mais informações, consulte Criar um controlador de entrada HTTPS em Azure Kubernetes Service (AKS).

A autenticação. Esta solução não restringe o acesso aos pontos finais. Para implementar a arquitetura num ambiente empresarial, fixe os pontos finais através das teclas API e adicione alguma forma de autenticação do utilizador à aplicação do cliente.

Registo de contentores. Esta solução utiliza Azure Container Registry para armazenar a imagem do Docker. O código de que a aplicação depende, e o modelo, estão contidos nesta imagem. As aplicações da empresa devem utilizar um registo privado para ajudar a prevenir a execução de código malicioso e para ajudar a evitar que as informações dentro do contentor sejam comprometidas.

Proteção DDoS. Considere permitir a proteção da rede Azure DDos. Embora a proteção DDoS básica seja ativada como parte da plataforma Azure, a DDoS Network Protection fornece capacidades de mitigação que são sintonizadas especificamente para os recursos de rede virtual Azure.

Registo. Utilize as melhores práticas antes de armazenar dados de registo, tais como esfregar senhas de utilizador e outras informações que possam ser usadas para cometer fraude de segurança.

Otimização de custos

A otimização de custos tem a ver com formas de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para mais informações, consulte a visão geral do pilar de otimização de custos.

Utilize a calculadora de preços do Azure para prever os custos. Aqui estão outras considerações.

Para mais informações, consulte o Microsoft Azure Well-Architected artigo-quadro Princípios da otimização de custos.

Azure Machine Learning

Nesta arquitetura de referência, uma grande parte do custo é impulsionada por recursos compute. Para fins de experimentação e formação, a Azure Machine Learning é gratuita. É cobrado apenas pelo cálculo utilizado pelo serviço web. Utilize a calculadora de preços Azure para estimar os seus custos de cálculo.

Registo de Contentores do Azure

Azure Container Registry oferece Basic, Standard e Premium. Escolha um nível dependendo do armazenamento de que necessita. Escolha Premium se precisar de replicação de geo, ou se a produção melhorada para estivar puxa através de nós simultâneos. Além disso, aplicam-se os custos padrão de rede. Para mais informações, consulte os preços do Registo do Contentor Azure.

Azure Kubernetes Service

Só paga pelas instâncias de máquina virtual, armazenamento e recursos de rede consumidos pelo seu cluster do Kubernetes. Para estimar o custo dos recursos necessários, consulte a calculadora de Serviços de Contentores.

Para mais informações, consulte o Microsoft Azure Well-Architected artigo-quadro Princípios da otimização de custos.

DevOps

Nesta arquitetura, as imagens de pontuação são criadas pelo modelo machine learning e implantadas como recipientes em AKS. Pode integrar toda a arquitetura num pipeline de lançamento para gestão e operacionalização de modelos. O pipeline pode incluir tarefas de DevOps para teste de sanidade de dados, formação de modelos em diferentes alvos de computação, gestão de versão de modelo, implementação de modelos como serviço web em tempo real, implementação encenada para ambientes de QA/produção, testes de integração e testes funcionais. A operacionalização de machine learning (MLOps) para modelos Python utilizando a arquitetura de referência Azure Machine Learning mostra como implementar uma integração contínua (CI), entrega contínua (CD) e pipeline de reconversão para uma aplicação de IA usando Azure DevOps e Azure Machine Learning.

Implementar este cenário

Para implementar esta arquitetura de referência, siga os passos descritos nos repos do GitHub:

Contribuidores

Este artigo é mantido por Microsoft. Foi originalmente escrito pelos seguintes contribuintes.

Autores principais:

Para ver perfis não públicos do LinkedIn, inscreva-se no LinkedIn.

Passos seguintes

Leia a documentação do produto:

Experimente estes caminhos de aprendizagem: