Editar

MLOps para modelos Python que utilizam o Azure Machine Learning

Azure Blob Storage
Azure Container Registry
Azure DevOps
Azure Machine Learning
Azure Pipelines

Esta arquitetura de referência mostra como implementar a integração contínua (CI), a entrega contínua (CD) e o pipeline de retreinamento para um aplicativo de IA usando o Azure DevOps e o Azure Machine Learning. A solução é construída sobre o conjunto de dados de diabetes scikit-learn, mas pode ser facilmente adaptada para qualquer cenário de IA e outros sistemas de construção populares, como Jenkins ou Travis.

Uma implementação de referência para essa arquitetura está disponível no GitHub.

Arquitetura

Diagrama da arquitetura de DevOps do Machine Learning.

Transfira um ficheiro do Visio desta arquitetura.

Fluxo de Trabalho

Esta arquitetura consiste nos seguintes serviços:

Azure Pipelines. Este sistema de compilação e teste é baseado no Azure DevOps e usado para os pipelines de compilação e lançamento. O Azure Pipelines divide esses pipelines em etapas lógicas chamadas tarefas. Por exemplo, a tarefa CLI do Azure facilita o trabalho com recursos do Azure.

O Azure Machine Learning é um serviço de nuvem para treinamento, pontuação, implantação e gerenciamento de modelos de aprendizado de máquina em escala. Essa arquitetura usa o SDK Python do Azure Machine Learning para criar um espaço de trabalho, recursos de computação, o pipeline de aprendizado de máquina e a imagem de pontuação. Um espaço de trabalho do Azure Machine Learning fornece o espaço para experimentar, treinar e implantar modelos de aprendizado de máquina.

O Azure Machine Learning Compute é um cluster de máquinas virtuais sob demanda com dimensionamento automático e opções de nó de GPU e CPU. O trabalho de treinamento é executado neste cluster.

Os pipelines do Azure Machine Learning fornecem fluxos de trabalho de aprendizado de máquina reutilizáveis que podem ser reutilizados em todos os cenários. Treinamento, avaliação de modelo, registro de modelo e criação de imagem ocorrem em etapas distintas dentro desses pipelines para este caso de uso. O pipeline é publicado ou atualizado no final da fase de construção e é acionado na chegada de novos dados.

Armazenamento de Blobs do Azure. Os contêineres de Blob são usados para armazenar os logs do serviço de pontuação. Nesse caso, os dados de entrada e a previsão do modelo são coletados. Após alguma transformação, esses logs podem ser usados para retreinamento de modelos.

Azure Container Registry. O script Python de pontuação é empacotado como uma imagem do Docker e versionado no registro.

Instâncias de contêiner do Azure. Como parte do pipeline de liberação, o ambiente de controle de qualidade e preparo é imitado pela implantação da imagem de serviço Web de pontuação em instâncias de contêiner, o que fornece uma maneira fácil e sem servidor de executar um contêiner.

Serviço Kubernetes do Azure. Depois que a imagem do webservice de pontuação é completamente testada no ambiente de QA, ela é implantada no ambiente de produção em um cluster Kubernetes gerenciado.

Azure Application Insights. Este serviço de monitorização é utilizado para detetar anomalias de desempenho.

MLOps Pipeline

Esta solução demonstra a automação de ponta a ponta de vários estágios de um projeto de IA usando ferramentas que já são familiares aos engenheiros de software. O problema do aprendizado de máquina é simples para manter o foco no pipeline de DevOps. A solução usa o conjunto de dados de diabetes scikit-learn e constrói um modelo de regressão linear de crista para prever a probabilidade de diabetes.

Esta solução baseia-se nos seguintes três pipelines:

  • Construir pipeline. Cria o código e executa um conjunto de testes.
  • Pipeline de reciclagem. Retreina o modelo em um cronograma ou quando novos dados ficam disponíveis.
  • Pipeline de liberação. Operacionaliza a imagem de pontuação e a promove com segurança em diferentes ambientes.

As próximas seções descrevem cada um desses pipelines.

Pipeline de compilação

O pipeline de CI é acionado sempre que o código for carregado. Publica um pipeline do Azure Machine Learning atualizado após a criação do código e a execução de um conjunto de testes. O pipeline de compilação consiste nas seguintes tarefas:

  • Qualidade do código. Esses testes garantem que o código esteja em conformidade com os padrões da equipe.

  • Teste unitário. Esses testes garantem que o código funcione, tenha cobertura de código adequada e seja estável.

  • Teste de dados. Esses testes verificam se as amostras de dados estão em conformidade com o esquema e a distribuição esperados. Personalize esse teste para outros casos de uso e execute-o como um pipeline de sanidade de dados separado que é acionado à medida que novos dados chegam. Por exemplo, mova a tarefa de teste de dados para um pipeline de ingestão de dados para que você possa testá-la mais cedo.

Nota

Você deve considerar habilitar práticas de DevOps para os dados usados para treinar os modelos de aprendizado de máquina, mas isso não é abordado neste artigo. Para obter mais informações sobre a arquitetura e as práticas recomendadas para CI/CD de um pipeline de ingestão de dados, consulte DevOps para um pipeline de ingestão de dados.

As seguintes tarefas únicas ocorrem ao configurar a infraestrutura do Azure Machine Learning e do Python SDK:

  • Crie o espaço de trabalho que hospeda todos os recursos relacionados ao Azure Machine Learning.
  • Crie os recursos de computação que executam o trabalho de treinamento.
  • Crie o pipeline de aprendizado de máquina com o script de treinamento atualizado.
  • Publique o pipeline de aprendizado de máquina como um ponto de extremidade REST para orquestrar o fluxo de trabalho de treinamento. A próxima seção descreve esta etapa.

Pipeline de reciclagem

O pipeline de aprendizado de máquina orquestra o processo de retreinamento do modelo de forma assíncrona. A nova preparação pode ser acionada com base numa agenda ou quando os novos dados estiverem disponíveis ao utilizar o ponto final de REST do pipeline publicado do passo anterior.

Esse pipeline abrange as seguintes etapas:

  • Modelo do comboio. O script Python de treinamento é executado no recurso de computação do Azure Machine Learning para obter um novo arquivo de modelo que é armazenado no histórico de execução. Como o treinamento é a tarefa mais intensiva em computação em um projeto de IA, a solução usa o Azure Machine Learning Compute.

  • Avaliar modelo. Um teste de avaliação simples compara o novo modelo com o modelo existente. Só quando o novo modelo é melhor é que é promovido. Caso contrário, o modelo não é registrado e o pipeline é cancelado.

  • Modelo de registo. O modelo retreinado é registrado no registro do Modelo de Aprendizado de Máquina do Azure. Este serviço fornece controle de versão para os modelos, juntamente com tags de metadados para que eles possam ser facilmente reproduzidos.

Pipeline de versão

Esse pipeline mostra como operacionalizar a imagem de pontuação e promovê-la com segurança em diferentes ambientes. Este pipeline é subdividido em dois ambientes, QA e produção:

Ambiente de QA

  • Gatilho de artefato de modelo. Os pipelines de liberação são acionados toda vez que um novo artefato está disponível. Um novo modelo registrado no Gerenciamento de Modelo do Azure Machine Learning é tratado como um artefato de versão. Nesse caso, um pipeline é acionado para cada novo modelo registrado.

  • Crie uma imagem de pontuação. O modelo registrado é empacotado junto com um script de pontuação e dependências Python (arquivo Conda YAML) em uma imagem Docker de operacionalização. É feito automaticamente um controlo de versão da imagem através do Azure Container Registry.

  • Implante em instâncias de contêiner. Este serviço é usado para criar um ambiente de não produção. A imagem de pontuação também é implantada aqui, e isso é usado principalmente para testes. As instâncias de contêiner fornecem uma maneira fácil e rápida de testar a imagem do Docker.

  • Serviço Web de teste. Um teste de API simples garante que a imagem seja implantada com êxito.

Ambiente de produção

  • Implante no Serviço Kubernetes do Azure. Esse serviço é usado para implantar uma imagem de pontuação como um serviço Web em escala em um ambiente de produção.

  • Serviço Web de teste. Um teste de API simples garante que a imagem seja implantada com êxito.

Considerações

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

Escalabilidade

um pipeline de compilação no Azure DevOps pode ser dimensionado para aplicações de qualquer dimensão. Os pipelines de compilação têm um tempo limite máximo que varia dependendo do agente em que são executados. As compilações podem ser executadas para sempre em agentes auto-hospedados (agentes privados). Para agentes hospedados pela Microsoft para um projeto público, as compilações podem ser executadas por seis horas. Para projetos privados, o limite é de 30 minutos.

Para usar o tempo limite máximo, defina a seguinte propriedade em seu arquivo YAML do Azure Pipelines:

jobs:
- job: <job_name>
  timeoutInMinutes: 0

Idealmente, faça com que seu pipeline de construção termine rapidamente e execute apenas testes de unidade e um subconjunto de outros testes. Isso permite que você valide as alterações rapidamente e as corrija se surgirem problemas. Execute testes de longa duração fora do horário de expediente.

O pipeline de lançamento publica um serviço Web de pontuação em tempo real. Uma liberação para o ambiente de QA é feita usando instâncias de contêiner por conveniência, mas você pode usar outro cluster Kubernetes em execução no ambiente de controle de qualidade/preparação.

Dimensione o ambiente de produção de acordo com o tamanho do cluster do Serviço Kubernetes do Azure. O tamanho do cluster depende da carga esperada para o serviço Web de pontuação implantado. Para arquiteturas de pontuação em tempo real, a taxa de transferência é uma métrica de otimização fundamental. Para cenários de aprendizagem não profunda, a CPU deve ser suficiente para lidar com a carga; no entanto, para cargas de trabalho de aprendizagem profunda, quando a velocidade é um gargalo, as GPUs geralmente fornecem melhor desempenho em comparação com CPUs. O Serviço Kubernetes do Azure dá suporte aos tipos de nó de CPU e GPU, que é a razão pela qual esta solução o usa para implantação de imagem. Para obter mais informações, consulte GPUs vs CPUs para implantação de modelos de aprendizado profundo.

Dimensione o pipeline de retreinamento para cima e para baixo, dependendo do número de nós em seu recurso de computação do Azure Machine Learning, e use a opção de dimensionamento automático para gerenciar o cluster. Essa arquitetura usa CPUs. Para cargas de trabalho de aprendizagem profunda, as GPUs são uma escolha melhor e são suportadas pelo Azure Machine Learning Compute.

Gestão

  • Acompanhar o trabalho de reconversão profissional. Os pipelines de aprendizado de máquina orquestram o retreinamento em um cluster de máquinas e fornecem uma maneira fácil de monitorá-los. Use a interface do usuário do Azure Machine Learning e procure os logs na seção de pipelines. Como alternativa, esses logs também são gravados no blob e podem ser lidos a partir daí, bem como usando ferramentas como o Gerenciador de Armazenamento do Azure.

  • Registo. O Azure Machine Learning fornece uma maneira fácil de registrar em cada etapa do ciclo de vida do aprendizado de máquina. Os logs são armazenados em um contêiner de blob. Para obter mais informações, consulte Habilitar o registro em log no Aprendizado de Máquina do Azure. Para um monitoramento mais avançado, configure o Application Insights para usar os logs.

  • Segurança. Todos os segredos e credenciais são armazenados no Cofre de Chaves do Azure e acessados no Azure Pipelines usando grupos de variáveis.

Otimização de custos

A otimização de custos consiste em procurar formas de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, consulte Visão geral do pilar de otimização de custos.

O Azure DevOps é gratuito para projetos de código aberto e pequenos projetos com até cinco usuários. Para equipes maiores, adquira um plano com base no número de usuários.

A computação é o maior fator de custo nessa arquitetura e seu custo varia dependendo do caso de uso. Essa arquitetura usa o Azure Machine Learning Compute, mas outras opções estão disponíveis. O Aprendizado de Máquina do Azure não adiciona nenhuma sobretaxa ao custo das máquinas virtuais que dão suporte ao cluster de computação. Configure seu cluster de computação para ter um mínimo de 0 nós, de modo que, quando não estiver em uso, ele possa ser reduzido para 0 nós e não incorrer em nenhum custo. O custo de computação depende do tipo de nó, do número de nós e do modo de provisionamento (de baixa prioridade ou dedicado). Você pode estimar o custo do Machine Learning e de outros serviços usando a calculadora de preços do Azure.

Implementar este cenário

Para implantar essa arquitetura de referência, siga as etapas descritas no guia Introdução no repositório GitHub.

Contribuidores

Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.

Autor principal:

  • Praneet Singh Solanki - Brasil | Engenheiro de Software Sênior

Próximos passos