Configurar MLOps com o Azure DevOps
APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)SDK do Python azure-ai-ml v2 (atual)
O Azure Machine Learning permite a integração com o pipeline do Azure DevOps para automatizar o ciclo de vida do machine learning. Algumas das operações que você pode automatizar são:
- Implantação da infraestrutura do Azure Machine Learning
- Preparação de dados (operações de extrair, transformar, carregar)
- Treinar modelos de machine learning com expansão e escala vertical sob demanda
- Implantação de modelos de machine learning como serviços Web públicos ou privados
- Monitoramento de modelos de machine learning implantados (como para análise de desempenho)
Neste artigo, você aprenderá a usar o Azure Machine Learning para configurar um pipeline de MLOps de ponta a ponta que executa uma regressão linear para prever tarifas de táxi em NYC. O pipeline é feito por componentes, cada um atuando em funções diferentes, os quais podem ser registrados com o workspace, com controle de versão e reutilizados com várias entradas e saídas. Você usará a arquitetura recomendada do Azure para MLOps e o acelerador de solução do AzureMLOps (v2) para configurar rapidamente um projeto de MLOps no Azure Machine Learning.
Dica
Recomendamos que você entenda algumas das arquiteturas recomendadas do Azure para MLOps, antes de implementar qualquer solução. Você precisará escolher a melhor arquitetura para seu projeto de aprendizado de máquina.
Pré-requisitos
- Uma assinatura do Azure. Caso não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar. Experimente a versão gratuita ou paga do Azure Machine Learning.
- Um Workspace do Azure Machine Learning.
- Git em execução no computador local.
- Uma organização no Azure DevOps.
- O projeto do Azure DevOps que hospedará os repositórios de origem e os pipelines.
- A extensão do Terraform para Azure DevOps, se você estiver usando o Azure DevOps + Terraform para desenvolver a infraestrutura
Observação
É necessário ter o Git versão 2.27 ou mais recente. Para obter mais informações sobre como instalar o comando do Git, confira https://git-scm.com/downloads e selecione seu sistema operacional
Importante
Os comandos da CLI neste artigo foram testados usando o Bash. Se você usar um shell diferente, poderá encontrar erros.
Configurar a autenticação com o Azure e DevOps
Para configurar um projeto de MLOps com o Azure Machine Learning, você precisa configurar a autenticação para o Azure DevOps.
Criar uma entidade de serviço
Para o uso da demonstração, a criação de um ou dois princípios de serviço é necessária, dependendo de em quantos ambientes você deseja trabalhar (Desenvolvimento, Produção ou Ambos). Esses princípios podem ser criados usando um dos seguintes métodos:
Iniciar o Azure Cloud Shell.
Dica
Na primeira vez que iniciar o Cloud Shell, você será solicitado a criar uma conta de armazenamento para o Cloud Shell.
Se solicitado, escolha Bash como o ambiente usado no Cloud Shell. Você também pode alterar os ambientes na lista suspensa na barra de navegação superior
Copie os comandos bash a seguir para o computador e atualize as variáveis projectName, subscriptionId e environment com os valores do projeto. Se você estiver criando um ambiente de Desenvolvimento e Produção, precisará executar esse script uma vez para cada ambiente, criando uma entidade de serviço para cada um. Esse comando também concederá a função Colaborador à entidade de serviço na assinatura fornecida. Isso é necessário para que o Azure DevOps use corretamente os recursos nessa assinatura.
projectName="<your project name>" roleName="Contributor" subscriptionId="<subscription Id>" environment="<Dev|Prod>" #First letter should be capitalized servicePrincipalName="Azure-ARM-${environment}-${projectName}" # Verify the ID of the active subscription echo "Using subscription ID $subscriptionID" echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes /subscriptions/$subscriptionId" az ad sp create-for-rbac --name $servicePrincipalName --role $roleName --scopes /subscriptions/$subscriptionId echo "Please ensure that the information created here is properly save for future use."
Copie os comandos editados no Azure Shell e execute-os (Ctrl + Shift + v).
Depois de executar esses comandos, você verá as informações relacionadas à entidade de serviço. Salve essas informações em um local seguro. Elas serão usadas posteriormente na demonstração para configurar o Azure DevOps.
{ "appId": "<application id>", "displayName": "Azure-ARM-dev-Sample_Project_Name", "password": "<password>", "tenant": "<tenant id>" }
Repita a Etapa 3, se você estiver criando entidades de serviço para ambientes de Desenvolvimento e Produção. Para essa demonstração, criaremos apenas um ambiente, que é o Prod.
Feche o Cloud Shell depois que as entidades de serviço forem criadas.
Configurar o Azure DevOps
Navegue até o Azure DevOps.
Selecione Criar um novo projeto (nomeie o projeto
mlopsv2
para este tutorial).No projeto, em Configurações do Projeto (na parte inferior esquerda da página do projeto), selecione Conexões de Serviço.
Selecione Criar Conexão de Serviço.
Selecione Azure Resource Manager, Avançar, Entidade de serviço (manual), Avançar e a Assinatura no Nível do Escopo.
- Nome da Assinatura – use o nome da assinatura em que sua entidade de serviço está armazenada.
- ID da Assinatura – Use a entrada
subscriptionId
usada na Etapa 1 como a ID da Assinatura - ID da Entidade de Serviço – Use o
appId
da saída da Etapa 1 como a ID da Entidade de Serviço - Chave da Entidade de Serviço – Use o
password
da saída da Etapa 1 como a Chave da Entidade de Serviço - ID do Locatário – Use o
tenant
da saída da Etapa 1 como a ID do Locatário
Nomeie a conexão de serviço Azure-ARM-Prod.
Selecione Conceder permissão de acesso a todos os pipelines e, em seguida, selecione Verificar e Salvar.
A configuração do Azure DevOps foi concluída com êxito.
Configurar o repositório de origem com o Azure DevOps
Abra o projeto que você criou no Azure DevOps
Abra a seção Repos e selecione Importar Repositório
Insira https://github.com/Azure/mlops-v2-ado-demo no campo Clonar URL. Selecione Importar na parte inferior da página
Abra as Configurações do projeto na parte inferior do painel de navegação esquerdo
Na seção Repos, selecione Repositórios. Selecione o repositório que você criou na etapa anterior. Selecione a guia Segurança
Na seção Permissões de usuário, selecione o usuário mlopsv2 Build Service. Altere a permissão Contribuir para Permitir e a permissão Criar branch para Permitir.
Abra a seção Pipelines no painel de navegação à esquerda e selecione os três pontos verticais ao lado do botão Criar Pipelines. Selecione Gerenciar Segurança
Selecione a conta do mlopsv2 Build Service para seu projeto na seção Usuários. Alterar a permissão Editar pipeline de build para Permitir
Observação
Isso conclui a seção de pré-requisitos e a implantação do acelerador de solução pode ocorrer adequadamente.
Implantação da infraestrutura por meio do Azure DevOps
Esta etapa implanta o pipeline de treinamento no workspace do Azure Machine Learning criado nas etapas anteriores.
Dica
Entenda os Padrões de Arquitetura do acelerador de solução, antes de fazer check-out do repositório de MLOps v2 e implantar a infraestrutura. Em exemplos, você usará o tipo de projeto de ML clássico.
Executar o pipeline de infraestrutura do Azure
Vá para o repositório,
mlops-v2-ado-demo
, e selecione o arquivo config-infra-prod.yml.Importante
Verifique se você selecionou a ramificação principal do repositório.
Esse arquivo de configuração usa o namespace e os valores pós-fixados dos nomes dos artefatos para garantir a exclusividade. Atualize a seção a seguir na configuração conforme desejar.
namespace: [5 max random new letters] postfix: [4 max random new digits] location: eastus
Observação
Se você estiver executando uma carga de trabalho de Aprendizado Profundo, como CV ou NLP, verifique se a computação de GPU está disponível na sua zona de implantação.
Selecione Confirmar e envie o código para obter esses valores no pipeline.
Ir para a seção Pipelines
Selecione Criar pipeline.
Selecionar Git do Azure Repos.
Selecione o repositório que você clonou na seção anterior
mlops-v2-ado-demo
Selecione Arquivo YAML do Azure Pipelines existente
Selecione o branch
main
e escolhamlops/devops-pipelines/cli-ado-deploy-infra.yml
e, em seguida, selecione Continuar.Execute o pipeline. Isso levará alguns minutos para ser concluído. O pipeline deve criar os seguintes artefatos:
- Grupo de recursos para seu workspace, incluindo conta de armazenamento, registro de contêiner, Application Insights, Keyvault e o próprio Workspace do Azure Machine Learning.
- No workspace, um cluster de computação também foi criado.
Agora, a infraestrutura do projeto de MLOps foi implantada.
Observação
Os avisos Não é possível mover e reutilizar o repositório existente para o local necessário podem ser ignorado.
Exemplo de cenário de treinamento e implantação
O acelerador de solução inclui um código e dados para um pipeline de machine learning de ponta a ponta que executa uma regressão linear para prever as tarifas de táxi em Nova York. O pipeline é feito por componentes, cada um atuando em funções diferentes, os quais podem ser registrados com o workspace, com controle de versão e reutilizados com várias entradas e saídas. Os exemplos de pipelines e fluxos de trabalho para os cenários de Pesquisa Visual Computacional e NLP terão etapas e etapas de implantação diferentes.
Este pipeline de treinamento contém as seguintes etapas:
Preparar os Dados
- Este componente usa vários conjuntos de dados de táxi (amarelo e verde) e mescla/filtra os dados e prepara os conjuntos de dados de treinamento/val e avaliação.
- Entrada: dados locais em ./data/ (vários arquivos .csv)
- Saída: um único conjunto de dados preparado (.csv) e conjuntos de dados de train/val/test.
Treinar Modelo
- Este componente treina um Regressor Linear com o conjunto de treinamento.
- Entrada: conjunto de dados de treinamento
- Saída: modelo treinado (formato pickle)
Avaliar Modelo
- Este componente usa o modelo treinado para prever as tarifas de táxi no conjunto de testes.
- Entrada: modelo de ML e conjunto de dados de teste
- Saída: desempenho do modelo e um sinalizador de implantação, seja para implantar ou não.
- Este componente compara o desempenho do modelo com todos os modelos implantados anteriormente no novo conjunto de dados de teste e decide se deseja promover o modelo para produção. A promoção do modelo para produção ocorre registrando o modelo no workspace do AML.
Registrar Modelo
- Este componente classifica o modelo com base na precisão das previsões no conjunto de testes.
- Entrada: modelo treinado e o sinalizador de implantação.
- Saída: modelo registrado no Azure Machine Learning.
Implantação do pipeline de treinamento de modelo
Ir para os pipelines do ADO
Selecione Novo Pipeline.
Selecionar Git do Azure Repos.
Selecione o repositório que você clonou na seção anterior
mlopsv2
Selecione Arquivo YAML do Azure Pipelines existente
Selecione
main
como branch e escolha/mlops/devops-pipelines/deploy-model-training-pipeline.yml
e, em seguida, selecione Continuar.Salve e execute o pipeline
Observação
Neste ponto, a infraestrutura foi configurada e o Loop de Prototipagem da Arquitetura de MLOps foi implantado. Você está pronto para passar para o nosso modelo treinado para a produção.
Implantação do modelo treinado
Este cenário inclui fluxos de trabalho predefinidos para duas abordagens de implantação de um modelo treinado, uma pontuação em lote ou uma implantação de um modelo em um ponto de extremidade para pontuação em tempo real. Você pode executar um ou ambos os fluxos de trabalho para testar o desempenho do modelo no workspace do Azure ML. Neste exemplo, usaremos a pontuação em tempo real.
Implantar ponto de extremidade do modelo de ML
Ir para os pipelines do ADO
Selecione Novo Pipeline.
Selecionar Git do Azure Repos.
Selecione o repositório que você clonou na seção anterior
mlopsv2
Selecione Arquivo YAML do Azure Pipelines existente
Selecione
main
como um branch e escolha Ponto de Extremidade Online Gerenciado/mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml
e, em seguida, selecione Continuar.Os nomes do ponto de extremidade online precisam ser exclusivos, portanto, altere
taxi-online-$(namespace)$(postfix)$(environment)
para outro nome exclusivo e selecione Executar. Não será necessário alterar o padrão se ele não falhar.Importante
Se a execução falhar devido a um nome de ponto de extremidade online existente, recrie o pipeline conforme descrito anteriormente e altere [your endpoint-name] para [your endpoint-name (random number)]
Quando a execução for concluída, você verá uma saída semelhante à seguinte imagem:
Para testar essa implantação, acesse a guia Pontos de Extremidade no workspace do AzureML, selecione o ponto de extremidade e clique na Guia Teste. Use os exemplos de dados de entrada localizados no repositório clonado em
/data/taxi-request.json
para testar o ponto de extremidade.
Limpar recursos
- Se você não quiser continuar a usar seu pipeline, exclua seu projeto do Azure DevOps.
- No portal do Azure, exclua seu grupo de recursos e a instância do Azure Machine Learning.
Próximas etapas
- Instalar e configurar o SDK do Python v2
- Instalar e configurar a CLI do Python v2
- Acelerador de solução do Azure MLOps (v2) no GitHub
- Curso de treinamento em MLOps com Machine Learning
- Saiba mais sobre Azure Pipelines com Azure Machine Learning
- Saiba mais sobre GitHub Actions com Azure Machine Learning
- Implantar MLOps no Azure em menos de uma hora – Vídeo do Acelerador de MLOps V2 da Comunidade