MLOps para modelos em Python usando o Azure Machine Learning

Armazenamento do Blobs do Azure
Registro de Contêiner do Azure
Azure DevOps
Azure Machine Learning
Azure Pipelines

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

Há uma implantação de referência para essa arquitetura disponível no GitHub.

Arquitetura

Diagrama da arquitetura de Machine Learning DevOps.

Baixe um Arquivo Visio dessa arquitetura.

Workflow

Essa arquitetura é formada pelos seguintes serviços:

Azure Pipelines. Esse sistema de compilação e teste é baseado no Azure DevOps e usado para os pipelines de build e lançamento. O Azure Pipelines divide esses pipelines em etapas lógicas chamadas tarefas. Por exemplo, a tarefa da CLI do Azure facilita o trabalho com recursos do 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 do 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 no qual experimentar, treinar e implantar modelos de aprendizado de máquina.

A Computação do Azure Machine Learning é um cluster de máquinas virtuais sob demanda com opções automáticas de dimensionamento e GPU e nó de CPU. O trabalho de treinamento é executado neste cluster.

Os pipelines do Azure Machine Learning fornecem fluxos de trabalho reutilizáveis de aprendizado de máquina que podem ser reutilizados em cenários. Treinamento, avaliação de modelo, registro de modelo e criação de imagem ocorrem em etapas distintas dentro desses pipelines para esse caso de uso. O pipeline é publicado ou atualizado no final da fase de build e é disparado 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 treinamento de modelo.

Registro de Contêiner do Azure. O script Python de pontuação é empacotado como uma imagem do Docker e com versão no registro.

Instâncias de Contêiner do Azure. Como parte do pipeline de lançamento, o ambiente de QA e preparo é imitado implantando a 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 de Kubernetes do Azure. Depois que a imagem de serviço Web de pontuação é testada minuciosamente no ambiente de QA, ela é implantada no ambiente de produção em um cluster gerenciado de Kubernetes.

Azure Application Insights. Esse serviço de monitoramento é usado para detectar anomalias de desempenho.

MLOps Pipeline

Essa 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 para 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 cria um modelo de regressão linear de cume para prever a probabilidade de diabetes.

Essa solução se baseia nos três pipelines a seguir:

  • Pipeline de build. Cria o código e executa um conjunto de testes.
  • Treinar novamente o pipeline. Treina novamente o modelo em uma programação ou quando novos dados ficam disponíveis.
  • Pipeline de lançamento. Você vai operacionalizar a imagem de pontuação em operação e promovê-la com segurança em diferentes ambientes.

As seções a seguir descrevem cada um desses pipelines.

Pipeline de build

O pipeline de CI é disparado sempre que é realizado o check-in do código. Ele publica um pipeline atualizado do Azure Machine Learning após a criação do código e a execução de um conjunto de testes. O pipeline de build 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 de unidade. Esses testes garantem que o código funcione, tenha cobertura de código adequada e esteja estável.

  • Teste de dados. Esses testes verificam se os exemplos 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 é disparado à 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 antes.

Observação

Você deve habilitar as práticas de DevOps para os dados usados a fim de 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 pontuais ocorrem ao configurar a infraestrutura para o Azure Machine Learning e o SDK do Python:

  • 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.

Treinar novamente o pipeline

O pipeline de machine learning orquestra o processo de novo treinamento do modelo de modo assíncrono. O novo treinamento poderá ser disparado em um agendamento ou quando novos dados forem disponibilizados chamando o ponto de extremidade REST do pipeline publicado da etapa anterior.

Este pipeline aborda as seguintes etapas:

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

  • Avaliar modelo. Um teste de avaliação simples compara o novo modelo com o existente. Somente quando o novo modelo for melhor ele será promovido. Caso contrário, o modelo não será registrado e o pipeline será cancelado.

  • Registrar modelo. O modelo retreinado é registrado no Registro de Modelo do Azure Machine Learning. Esse serviço fornece controle de versão para os modelos junto com marcas de metadados para que possam ser reproduzidos facilmente.

Pipeline de lançamento

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

Ambiente de garantia de qualidade

  • Gatilho de artefato de modelo. Os pipelines de versão são disparados sempre que um novo artefato está disponível. Um novo modelo registrado no Gerenciamento de Modelos do Azure Machine Learning é tratado como um artefato de versão. Nesse caso, um pipeline é disparado para cada novo modelo registrado.

  • Crie um arquivo de pontuação. O modelo registrado é empacotado junto com um script de pontuação e dependências de Python (arquivo YAML do Conda) em uma imagem do Docker de operacionalização. O controle de versão da imagem é realizado automaticamente por meio do Registro de Contêiner do Azure.

  • Implantar em Instâncias de Contêiner. Esse 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 teste. Instâncias de Contêiner são uma maneira fácil e rápida de testar a imagem do Docker.

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

Ambiente de produção

  • Implantar no Serviço de 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.

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

Considerações

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

Escalabilidade

Um pipeline de build no Azure DevOps pode ser dimensionado para aplicativos de qualquer tamanho. Os pipelines de build têm um tempo limite máximo que varia dependendo do agente em que são executados. Os builds podem ser executados para sempre em agentes auto-hospedados (agentes privados). Para agentes hospedados pela Microsoft para um projeto público, os builds podem ser executados por seis horas. Para projetos privados, o limite é de 30 minutos.

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

jobs:
- job: <job_name>
  timeoutInMinutes: 0

O ideal é que o pipeline de build seja concluído rapidamente e execute apenas testes de unidade e um subconjunto de outros testes. Isso permite que você valide as alterações rapidamente e corrija-as se surgirem problemas. Execute testes de longa execução durante o horário de folga.

O pipeline de lançamento publica um serviço Web de pontuação em tempo real. Uma versão para o ambiente de garantia de qualidade é feita usando Instâncias de Contêiner para conveniência, mas você pode usar outro cluster de Kubernetes em execução no ambiente de garantia de qualidade/preparo.

Dimensione o ambiente de produção de acordo com o tamanho do cluster Serviço de 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 de chave. Para cenários de aprendizado não profundo, a CPU deve ser suficiente para lidar com a carga; no entanto, para cargas de trabalho de aprendizado profundo, quando a velocidade é um gargalo, as GPUs geralmente fornecem melhor desempenho em comparação com as CPUs. O Serviço de Kubernetes do Azure dá suporte a tipos de nó de CPU e GPU, razão pela qual essa solução a 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 no recurso de Computação do Azure Machine Learning e use a opção de dimensionamento automático para gerenciar o cluster. Esta arquitetura usa CPUs. Para cargas de trabalho de aprendizado profundo, as GPUs são uma opção melhor e têm suporte na Computação do Azure Machine Learning.

Gerenciamento

  • Monitore o trabalho de retreinamento. Os pipelines de aprendizado de máquina orquestram o retreinamento em um cluster de computadores 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 nele, bem como usando ferramentas como Gerenciador de Armazenamento do Azure.

  • Log. O Azure Machine Learning fornece uma maneira fácil de fazer logon 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 log no Azure Machine Learning. Para ter um monitoramento mais avançado, configure o Application Insights para usar os logs.

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

Otimização de custo

A otimização de custos é a análise de maneiras de reduzir as despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, confira Visão geral do pilar de otimização de custo.

O Azure DevOps é gratuito para projetos de código aberto e pequenos projetos com até cinco usuários. Para equipes maiores, compre 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 a Computação do Azure Machine Learning, mas outras opções estão disponíveis. O Azure Machine Learning 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 no mínimo 0 nós, para que, quando não estiver em uso, ele possa reduzir para 0 nós e não incorrer em custos. 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.

Implantar este cenário

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

Colaboradores

Esse artigo é mantido pela Microsoft. Ele foi originalmente escrito pelos colaboradores a seguir.

Autor principal:

  • Praneet Singh Solanki | Engenheiro de Software Sênior

Próximas etapas