Operacionalização de aprendizado de máquina (MLOps) para modelos Python usando Azure Machine LearningMachine learning operationalization (MLOps) for Python models using Azure Machine Learning

Essa arquitetura de referência mostra como implementar uma CI (integração contínua), um CD (entrega contínua) e um pipeline de novo treinamento para um aplicativo de ia usando o Azure DevOps e o Azure Machine Learning.This reference architecture shows how to implement a continuous integration (CI), continuous delivery (CD), and retraining pipeline for an AI application using Azure DevOps and 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 e Travis.The solution is built on the scikit-learn diabetes dataset but can be easily adapted for any AI scenario and other popular build systems such as Jenkins and Travis.

Logotipo do GitHub uma implementação de referência para essa arquitetura está disponível no GitHub.GitHub logo A reference implementation for this architecture is available on GitHub.

Diagrama da arquitetura MLOps

ArquiteturaArchitecture

Esta arquitetura é formada pelos seguintes componentes:This architecture consists of the following components:

Azure pipelines .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.This build and test system is based on Azure DevOps and used for the build and release pipelines. Azure Pipelines divide esses pipelines em etapas lógicas chamadas tarefas.Azure Pipelines breaks these pipelines into logical steps called tasks. Por exemplo, a tarefa CLI do Azure torna mais fácil trabalhar com recursos do Azure.For example, the Azure CLI task makes it easier to work with Azure resources.

Azure Machine Learning .Azure Machine Learning . 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.Azure Machine Learning is a cloud service for training, scoring, deploying, and managing machine learning models at scale. Essa arquitetura usa o SDK do Azure Machine Learning para Python 3 para criar um espaço de trabalho, recursos de computação, o pipeline do Machine Learning e a imagem de pontuação.This architecture uses the Azure Machine Learning SDK for Python 3 to create a workspace, compute resources, the machine learning pipeline, and the scoring image. Um espaço de trabalho Azure Machine Learning fornece o espaço para experimentar e treinar e implantar modelos de aprendizado de máquina.An Azure Machine Learning workspace provides the space in which to experiment and train and deploy machine learning models.

Azure Machine Learning computação é um cluster de máquinas virtuais sob demanda com um dimensionamento automático e opções de nó de CPU e de GPU.Azure Machine Learning Compute is cluster of virtual machines on demand with an automatic scaling and GPU and CPU node options. O trabalho de treinamento é executado neste cluster.The training job is executed on this cluster.

Azure Machine Learning pipelines fornecem fluxos de trabalho de aprendizado de máquina reutilizáveis que podem ser reutilizados em cenários.Azure Machine Learning pipelines provide reusable machine learning workflows that can be reused across scenarios. Treinamento, avaliação de modelo, registro de modelo e criação de imagem ocorrem em etapas distintas nesses pipelines para esse caso de uso.Training, model evaluation, model registration, and image creation occur in distinct steps within these pipelines for this use case. O pipeline é publicado ou atualizado no final da fase de compilação e é disparado na chegada de novos dados.The pipeline is published or updated at the end of the build phase and gets triggered on new data arrival.

Armazenamento de BLOBs do Azure .Azure Blob Storage . Os contêineres de blob são usados para armazenar os logs do serviço de pontuação.Blob containers are used to store the logs from the scoring service. Nesse caso, os dados de entrada e a previsão do modelo são coletados.In this case, both the input data and the model prediction are collected. Após algumas transformações, esses logs podem ser usados para o retreinamento do modelo.After some transformation, these logs can be used for model retraining.

Registro de contêiner do Azure .Azure Container Registry . O script Python de pontuação é empacotado como uma imagem do Docker e com controle de versão no registro.The scoring Python script is packaged as a Docker image and versioned in the registry.

Instâncias de contêiner do Azure .Azure Container Instances . 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.As part of release pipeline, the QA and staging environment is mimicked by deploying the scoring webservice image to Container Instances, which provides an easy, serverless way to run a container.

Serviço kubernetes do Azure .Azure Kubernetes Service . 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.Once the scoring webservice image is thoroughly tested in the QA environment, it is deployed to the production environment on a managed Kubernetes cluster.

Aplicativo Azure insights .Azure Application Insights . Esse serviço de monitoramento é usado para detectar anomalias de desempenho.This monitoring service is used to detect performance anomalies.

Pipeline de MLOpsMLOps Pipeline

Esta solução demonstra uma 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.This solution demonstrates an end-to-end automation of various stages of an AI project using tools that are already familiar to software engineers. O problema de aprendizado de máquina é simples de manter o foco no pipeline DevOps.The machine learning problem is simple to keep the focus on the DevOps pipeline. 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.The solution uses the scikit-learn diabetes dataset and builds a ridge linear regression model to predict the likelihood of diabetes. Consulte Training of Python scikit-Learn Models para obter detalhes.See Training of Python scikit-learn models for details.

Essa solução é baseada nos três pipelines a seguir:This solution is based on the following three pipelines:

  • Pipeline de compilação .Build pipeline . Edifícios o código e executa um pacote de testes.Buildings the code and runs a suite of tests.
  • Retreinando pipeline .Retraining pipeline . Retreina o modelo em um agendamento ou quando novos dados ficam disponíveisRetrains the model on a schedule or when new data becomes available
  • Pipeline de liberação .Release pipeline . Operationalizes a imagem de Pontuação e a promove com segurança em diferentes ambientes.Operationalizes the scoring image and promotes it safely across different environments.

As seções a seguir descrevem cada um desses pipelines.The next sections describe each of these pipelines.

Pipeline de buildBuild pipeline

O pipeline de CI é disparado sempre que é realizado o check-in do código.The CI pipeline gets triggered every time code is checked in. 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.It publishes an updated Azure Machine Learning pipeline after building the code and running a suite of tests. O pipeline de compilação consiste nas seguintes tarefas:The build pipeline consists of the following tasks:

  • Qualidade do código.Code quality. Esses testes garantem que o código esteja em conformidade com os padrões da equipe.These tests ensure that the code conforms to the standards of the team.

  • Teste de unidade.Unit test. Esses testes verificam se o código funciona, tem cobertura de código adequada e é estável.These tests make sure the code works, has adequate code coverage, and is stable.

  • Teste de dados.Data test. Esses testes verificam se os exemplos de dados estão em conformidade com o esquema e a distribuição esperados.These tests verify that the data samples conform to the expected schema and distribution. 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.Customize this test for other use cases and run it as a separate data sanity pipeline that gets triggered as new data arrives. Por exemplo, mova a tarefa de teste de dados para um pipeline de ingestão de dados para que você possa testá-la anteriormente.For example, move the data test task to a data ingestion pipeline so you can test it earlier.

ANOTAÇÕES 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.[NOTE] You should consider enabling DevOps practices for the data used to train the machine learning models, but this is not covered in this article. 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.For more information about the architecture and best practices for CI/CD of a data ingestion pipeline, see DevOps for a data ingestion pipeline.

As seguintes tarefas de uso único ocorrem ao configurar a infraestrutura para Azure Machine Learning e o SDK do Python:The following one-time tasks occur when setting up the infrastructure for Azure Machine Learning and the Python SDK:

  • Crie o espaço de trabalho que hospeda todos os recursos relacionados ao Azure Machine Learning.Create the workspace that hosts all Azure Machine Learning-related resources.

  • Crie os recursos de computação que executam o trabalho de treinamento.Create the compute resources that run the training job.

  • Crie o pipeline de Machine Learning com o script de treinamento atualizado.Create the machine learning pipeline with the updated training script.

  • Publique o pipeline do Machine Learning como um ponto de extremidade REST para orquestrar o fluxo de trabalho de treinamento.Publish the machine learning pipeline as a REST endpoint to orchestrate the training workflow. A próxima seção descreve essa etapa.The next section describes this step.

Retreinando pipelineRetraining pipeline

O pipeline de Machine Learning orquestra o processo de treinar novamente o modelo de maneira assíncrona.The machine learning pipeline orchestrates the process of retraining the model in an asynchronous manner. O novo treinamento pode ser disparado em uma agenda ou quando novos dados ficam disponíveis chamando o ponto de extremidade REST do pipeline publicado da etapa anterior.Retraining can be triggered on a schedule or when new data becomes available by calling the published pipeline REST endpoint from previous step.

Esse pipeline abrange as seguintes etapas:This pipeline covers the following steps:

  • Modelo de treinamento.Train model. 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.The training Python script is executed on the Azure Machine Learning Compute resource to get a new model file which is stored in the run history. 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.Since training is the most compute-intensive task in an AI project, the solution uses Azure Machine Learning Compute.

  • Avaliar modelo.Evaluate model. Um teste de avaliação simples compara o novo modelo com o modelo existente.A simple evaluation test compares the new model with the existing model. Somente quando o novo modelo é melhor, ele é promovido.Only when the new model is better does it get promoted. Caso contrário, o modelo não será registrado e o pipeline será cancelado.Otherwise, the model is not registered and the pipeline is canceled.

  • Registrar modelo.Register model. O modelo retreinado é registrado com o registro de modelo do Azure ml.The retrained model is registered with the Azure ML Model registry. Esse serviço fornece controle de versão para os modelos junto com as marcas de metadados para que possam ser facilmente reproduzidos.This service provides version control for the models along with metadata tags so they can be easily reproduced.

Pipeline de lançamentoRelease pipeline

Esse pipeline mostra como colocar a imagem de pontuação em operação e promovê-la com segurança em diferentes ambientes.This pipeline shows how to operationalize the scoring image and promote it safely across different environments. Esse pipeline é subdividido em dois ambientes, QA e produção:This pipeline is subdivided into two environments, QA and production:

Ambiente de QAQA environment

  • Gatilho do artefato do modelo.Model Artifact trigger. Os pipelines de versão são disparados sempre que um novo artefato está disponível.Release pipelines get triggered every time a new artifact is available. Um novo modelo registrado para Azure Machine Learning Gerenciamento de Modelos é tratado como um artefato de versão.A new model registered to Azure Machine Learning Model Management is treated as a release artifact. Nesse caso, um pipeline é disparado para cada novo modelo registrado.In this case, a pipeline is triggered for each new model is registered.

  • Criar imagem de pontuação.Create scoring image. O modelo registrado é empacotado com o script de Pontuação e dependências do Python (arquivo Conda YAML) em uma imagem do Docker operacional.The registered model is packaged together with scoring script and Python dependencies (Conda YAML file) into an operationalization Docker image. O controle de versão da imagem é realizado automaticamente por meio do Registro de Contêiner do Azure.The image automatically gets versioned through Azure Container Registry.

  • Implantar em instâncias de contêiner.Deploy on Container Instances. Esse serviço é usado para criar um ambiente de não produção.This service is used to create a non-production environment. A imagem de Pontuação também é implantada aqui, e isso é usado principalmente para teste.The scoring image is also deployed here, and this is mostly used for testing. As instâncias de contêiner fornecem uma maneira fácil e rápida de testar a imagem do Docker.Container Instances provides an easy and quick way to test the Docker image.

  • Testar o serviço Web.Test web service. Um teste de API simples garante que a imagem seja implantada com êxito.A simple API test makes sure the image is successfully deployed.

Ambiente de produçãoProduction environment

  • Implantar no serviço kubernetes do Azure.Deploy on Azure Kubernetes Service. Esse serviço é usado para implantar a imagem de Pontuação como um serviço Web em escala em um ambiente de produção.This service is used for deploying scoring image as a web service at scale in a production environment.

  • Testar o serviço Web.Test web service. Um teste de API simples garante que a imagem seja implantada com êxito.A simple API test makes sure the image is successfully deployed.

Considerações sobre escalabilidadeScalability considerations

Um pipeline de compilação no Azure DevOps pode ser dimensionado para aplicativos de qualquer tamanho.A build pipeline on Azure DevOps can be scaled for applications of any size. Os pipelines de compilação têm um tempo limite máximo que varia dependendo do agente em que são executados.Build pipelines have a maximum timeout that varies depending on the agent they are run on. As compilações podem ser executadas sempre em agentes de hospedagem interna (agentes particulares).Builds can run forever on self-hosted agents (private agents). Para agentes hospedados pela Microsoft para um projeto público, as compilações podem ser executadas por seis horas.For Microsoft-hosted agents for a public project, builds can run for six hours. Para projetos privados, o limite é de 30 minutos.For private projects, the limit is 30 minutes.

Para usar o tempo limite máximo, defina a seguinte propriedade no arquivo de Azure pipelines YAML :To use the maximum timeout, set the following property in your Azure Pipelines YAML file:

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.Ideally, have your build pipeline finish quickly and execute only unit tests and a subset of other tests. Isso permite que você valide as alterações rapidamente e corrija-as se surgirem problemas.This allows you to validate the changes quickly and fix them if issues arise. Executar testes de longa execução fora do horário de expediente.Run long-running tests during off hours.

O pipeline de lançamento publica um serviço Web de pontuação em tempo real.The release pipeline publishes a real-time scoring web service. 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.A release to the QA environment is done using Container Instances for convenience, but you can use another Kubernetes cluster running in the QA/staging environment.

Dimensione o ambiente de produção de acordo com o tamanho do cluster do serviço kubernetes do Azure.Scale the production environment according to the size of your Azure Kubernetes Service cluster. O tamanho do cluster depende da carga que você espera para o serviço Web de Pontuação implantado.The size of the cluster depends on the load you expect for the deployed scoring web service. Para arquiteturas de pontuação em tempo real, a taxa de transferência é uma métrica de otimização de chave.For real-time scoring architectures, throughput is a key optimization metric. 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.For non-deep learning scenarios, CPU should be sufficient to handle the load; however, for deep learning workloads, when speed is a bottleneck, GPUs generally provide better performance compared to CPUs. Para obter correspondência com o desempenho de GPU usando CPUs, geralmente é necessário um cluster com um grande número de CPUs.For moreTo match GPU performance using CPUs, a cluster with a large number of CPUs is usually needed. O serviço kubernetes dá suporte a tipos de nó de CPU e GPU-o motivo pelo qual essa solução usa o serviço kubernetes para implantação de imagem.Kubernetes Service supports both CPU and GPU node types-the reason this solution uses Kubernetes Service for image deployment. Para obter mais informações, consulte GPUs vs CPUs para a implantação de modelos de aprendizado profundo (postagem de blog).For more information, see GPUs vs CPUs for deployment of deep learning models (blog post).

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.Scale the retraining pipeline up and down depending on the number of nodes in your Azure Machine Learning Compute resource, and use the autoscaling option to manage the cluster. Esta arquitetura usa CPUs.This architecture uses 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.For deep learning workloads, GPUs are a better choice and are supported by Azure Machine Learning Compute.

Considerações de gerenciamentoManagement considerations

  • Monitorar o trabalho de readaptação.Monitor retraining job. Os pipelines do Machine Learning orquestram o novo treinamento em um cluster de computadores e fornece uma maneira fácil de monitorá-los.Machine learning pipelines orchestrate retraining across a cluster of machines and provides an easy way to monitor them. Use o portal do Azuree vá para o espaço de trabalho Machine Learning e examine a seção pipelines para os logs.Use the Azure portal, and go to the machine learning workspace, and look under pipelines section for the 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.Alternatively, these logs are also written to blob and can be read from there as well using tools such as Azure Storage Explorer.

  • Logout.Logging. Azure Machine Learning fornece uma maneira fácil de fazer logon em cada etapa do ciclo de vida do Machine Learning.Azure Machine Learning provides an easy way to log at each step of the machine learning life cycle. Os logs são armazenados em um contêiner de BLOB.The logs are stored in a blob container. Para obter mais informações, consulte habilitar o log em Azure Machine Learning.For more information, see Enable logging in Azure Machine Learning. Para um monitoramento mais avançado, configure Application insights para usar os logs.For richer monitoring, configure Application Insights to use the logs.

  • Segurança.Security. Todos os segredos e credenciais são armazenados em Azure Key Vault e acessados em Azure pipelines usando grupos de variáveis.All secrets and credentials are stored in Azure Key Vault and accessed in Azure Pipelines using variable groups.

Considerações de custoCost considerations

O Azure DevOps é gratuito para projetos de código-fonte aberto e pequenos projetos com até cinco usuários.Azure DevOps is free for open-source projects and small projects with up to five users. Para equipes maiores, compre um plano com base no número de usuários.For larger teams, purchase a plan based on the number of users.

Computação é o maior fator de custo nessa arquitetura e varia dependendo do caso de uso.Compute is the biggest cost driver in this architecture and varies depending on the use case. Para experimentação e treinamento, Azure Machine Learning é gratuito, você paga apenas pela computação usada.For experimentation and training, Azure Machine Learning is free, you pay only for the compute used. Ao implantar modelos no cluster do serviço kubernetes, Azure Machine Learning adiciona uma pequena sobretaxa sobre o custo de computação do serviço kubernetes.While deploying models to Kubernetes Service cluster, Azure Machine Learning adds a small surcharge on top of the Kubernetes Service compute cost. Dependendo da carga esperada do serviço Web e da opção de dimensionamento automático definida, você pode controlar esse custo.Depending on the expected web service load and the defined autoscaling option, you can control this cost. Você pode usar CLI do Azure ou Azure Machine Learning o SDK do Python para definir programaticamente uma configuração de dimensionamento automático.You can use either Azure CLI or Azure Machine Learning Python SDK to programmatically set an autoscaling configuration.

O pipeline de readaptação também requer uma forma de computação.The retraining pipeline also requires a form of compute. Essa arquitetura usa Azure Machine Learning computação, mas outras Opções estão disponíveis.This architecture uses Azure Machine Learning Compute, but other options are available. Como mencionado anteriormente, os modelos de treinamento não incorrem na sobretaxa do serviço de Machine Learning; Você paga apenas o custo de computação.As mentioned earlier, training models do not incur the machine learning service surcharge; you only pay the compute cost. O custo de computação depende do tamanho do cluster, do tipo de nó e do número de nós.The compute cost depends on the cluster size, node type, and number of nodes. Você pode estimar o custo de Machine Learning e outros serviços usando a calculadora de preçosdo Azure.You can estimate the cost for Machine Learning and other services using the Azure pricing calculator.

Implantar a soluçãoDeploy the solution

Para implantar essa arquitetura de referência, siga as etapas descritas no guia de introdução no repositório GitHub.To deploy this reference architecture, follow the steps described in the Getting Started guide in the GitHub repo.