MLOps para modelos em Python usando o Azure Machine Learning

Application Insights
Armazenamento de Blobs
Instâncias de Contêiner
Registro de Contêiner
Azure DevOps
Serviço de Kubernetes
Machine Learning
Pipelines

Visão geral

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

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

Diagrama da arquitetura MLOps

Arquitetura

Esta arquitetura é formada pelos seguintes componentes:

Azure pipelines. Esse sistema de compilação e teste baseia-se no Azure DevOps e usado para os pipelines de compilação e versão. Azure Pipelines divide esses pipelines em etapas lógicas chamadas tarefas. Por exemplo, a tarefa CLI do Azure torna mais fácil trabalhar com recursos do Azure.

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 Azure Machine Learning para criar um espaço de trabalho, recursos de computação, o pipeline do Machine Learning e a imagem de pontuação. Um espaço de trabalho Azure Machine Learning fornece o espaço para experimentar, treinar e implantar modelos de aprendizado de máquina.

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

Azure Machine Learning pipelines fornecem fluxos de trabalho de aprendizado de máquina reutilizáveis que podem ser reutilizados em cenários. Treinamento, avaliação de modelo, registro de modelo e criação de imagem ocorrem em etapas distintas nesses pipelines para esse caso de uso. O pipeline é publicado ou atualizado no final da fase de compilação 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 algumas transformações, esses logs podem ser usados para o retreinamento do modelo.

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

Instâncias de contêiner do Azure. Como parte do pipeline de lançamento, o ambiente de preparo e de p e r é imitado implantando a imagem WebService 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 WebService de pontuação é testada exaustivamente no ambiente de QA, ela é implantada no ambiente de produção em um cluster kubernetes gerenciado.

Aplicativo Azure insights. Esse serviço de monitoramento é usado para detectar anomalias de desempenho.

Pipeline de MLOps

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 de aprendizado de máquina é simples de manter o foco no pipeline DevOps. A solução usa o conjunto de scikit-Learn diabetes e cria um modelo de regressão linear de ondulação para prever a probabilidade de diabetes. Consulte Training of Python scikit-Learn Models para obter detalhes.

Essa solução é baseada nos três pipelines a seguir:

  • Pipeline de compilação. Compila o código e executa um pacote de testes.
  • Retreinando pipeline. Retreina o modelo em um agendamento ou quando novos dados ficam disponíveis.
  • Pipeline de liberação. Operationalizes a imagem de Pontuação e a promove 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 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 de unidade. Esses testes verificam se o código funciona, tem cobertura de código adequada e é 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 integridade 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 anteriormente.

Observação

Você deve considerar a habilitação de 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 de uso único ocorrem ao configurar a infraestrutura para 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 Machine Learning com o script de treinamento atualizado.
  • Publique o pipeline do Machine Learning como um ponto de extremidade REST para orquestrar o fluxo de trabalho de treinamento. A próxima seção descreve essa etapa.

Retreinando pipeline

O pipeline de Machine Learning orquestra o processo de treinar novamente o modelo de maneira assíncrona. 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.

Esse pipeline abrange as seguintes etapas:

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

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

  • Registrar modelo. O modelo retreinado é registrado com o registro de modelo do Azure ml. Esse serviço fornece controle de versão para os modelos junto com as marcas de metadados para que possam ser facilmente reproduzidos.

Pipeline de lançamento

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

Ambiente de QA

  • Gatilho do artefato do modelo. Os pipelines de versão são disparados sempre que um novo artefato está disponível. Um novo modelo registrado para Azure Machine Learning Gerenciamento de Modelos é tratado como um artefato de versão. Nesse caso, um pipeline é disparado 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 do Python (arquivo CONDA YAML) em uma imagem do Docker operacional. 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. As instâncias de contêiner fornecem uma maneira fácil e rápida de testar a imagem do Docker.

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

Ambiente de produção

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

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

Considerações sobre escalabilidade

Um pipeline de compilação no Azure DevOps pode ser dimensionado para aplicativos de qualquer tamanho. 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 sempre em agentes de hospedagem interna (agentes particulares). 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 no arquivo de Azure pipelines YAML :

jobs:
- job: <job_name>
  timeoutInMinutes: 0

O ideal é que seu pipeline de compilação 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. Executar testes de execução longa fora do horário comercial.

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

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 que você espera 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 aprofundado, a CPU deve ser suficiente para lidar com a carga; no entanto, para cargas de trabalho de aprendizado profundo, quando a velocidade é um afunilamento, as GPUs geralmente fornecem um melhor desempenho em comparação com as CPUs. O serviço kubernetes do Azure dá suporte a tipos de nó de CPU e GPU, que é o motivo pelo qual essa solução o utiliza para a implantação de imagem. Para obter mais informações, consulte GPUs vs CPUs para a implantação de modelos de aprendizado profundo.

Dimensione o pipeline de readaptação para cima e para baixo, dependendo do número de nós em seu recurso de computação Azure Machine Learning e use a opção 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 pelo Azure Machine Learning computação.

Considerações de gerenciamento

  • Monitorar o trabalho de readaptação. Os pipelines do Machine Learning orquestram o novo treinamento 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 examine a seção pipelines para os logs. Como alternativa, esses logs também são gravados no BLOB e podem ser lidos a partir daí, usando ferramentas como Gerenciador de armazenamento do Azure.

  • Logout. Azure Machine Learning fornece uma maneira fácil de fazer logon em cada etapa do ciclo de vida do Machine Learning. Os logs são armazenados em um contêiner de BLOB. Para obter mais informações, consulte habilitar o log em Azure Machine Learning. Para um monitoramento mais avançado, configure Application insights para usar os logs.

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

Considerações de custo

O Azure DevOps é gratuito para projetos de código-fonte 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 de acordo com o caso de uso. Essa arquitetura usa Azure Machine Learning computação, mas outras Opções estão disponíveis. Azure Machine Learning não adiciona nenhuma sobretaxa sobre o custo das máquinas virtuais de backup do cluster de computação. Configure seu cluster de cálculo para ter um mínimo de 0 nós, para que, quando não estiver em uso, ele possa reduzir verticalmente para 0 nós e não incorrer em nenhum custo. O custo de computação depende do tipo de nó, de um número de nós e do modo de provisionamento (baixa prioridade ou dedicado). Você pode estimar o custo de Machine Learning e outros serviços usando a calculadora de preçosdo Azure.

Implantar a solução

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

Próximas etapas