Configurar MLOps com o Azure DevOps
APLICA-SE A:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)
O Azure Machine Learning permite que você se integre ao pipeline do Azure DevOps para automatizar o ciclo de vida do aprendizado de máquina. 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 extração, transformação, carga)
- Treinamento de modelos de aprendizado de máquina com scale-out e scale-up sob demanda
- Implementação de modelos de aprendizagem automática como serviços Web públicos ou privados
- Monitoramento de modelos de aprendizado de máquina implantados (como para análise de desempenho)
Neste artigo, você aprenderá a usar o Aprendizado de Máquina do Azure para configurar um pipeline de MLOps de ponta a ponta que executa uma regressão linear para prever tarifas de táxi em Nova York. O pipeline é composto por componentes, cada um servindo funções diferentes, que podem ser registrados no espaço de trabalho, versionados e reutilizados com várias entradas e saídas. você usará a arquitetura recomendada do Azure para MLOps e o acelerador de solução AzureMLOps (v2) para configurar rapidamente um projeto MLOps no Azure Machine Learning.
Gorjeta
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 subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente a versão gratuita ou paga do Azure Machine Learning.
- Uma área de trabalho do Azure Machine Learning.
- Git em execução na sua máquina local.
- Uma organização no Azure DevOps.
- Projeto Azure DevOps que hospedará os repositórios e pipelines de origem.
- A extensão Terraform para Azure DevOps se você estiver usando o Azure DevOps + Terraform para girar a infraestrutura
Nota
É necessária a versão 2.27 ou mais recente do Git. Para obter mais informações sobre como instalar o comando Git, consulte https://git-scm.com/downloads e selecione seu sistema operacional
Importante
Os comandos da CLI neste artigo foram testados usando Bash. Se você usar um shell diferente, poderá encontrar erros.
Configurar a autenticação com o Azure e o DevOps
Antes de configurar um projeto MLOps com o Azure Machine Learning, você precisa configurar a autenticação para o Azure DevOps.
Criar um principal de serviço
Para o uso da demonstração, é necessária a criação de um ou dois princípios de serviço, dependendo de quantos ambientes você deseja trabalhar (Dev ou Prod ou ambos). Esses princípios podem ser criados usando um dos seguintes métodos:
- Criar a partir do Azure Cloud Shell
- Create from Azure Portal (Criar a partir do portal do Azure)
Inicie o Azure Cloud Shell.
Gorjeta
Na primeira vez que você 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 ambientes na lista suspensa na barra de navegação superior
Copie os seguintes comandos bash para o seu computador e atualize as variáveis projectName, subscriptionId e environment com os valores para o seu projeto. Se você estiver criando um ambiente Dev e Prod, 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 de 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 seus comandos editados para o Shell do Azure e execute-os (Ctrl + Shift + v).
Depois de executar esses comandos, você receberá 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 estiver criando entidades de serviço para ambientes Dev e Prod. Para esta demonstração, criaremos apenas um ambiente, que é o Prod.
Feche o Cloud Shell assim que as entidades de serviço forem criadas.
Configurar o Azure DevOps
Navegue até Azure DevOps.
Selecione criar um novo projeto (Nomeie o projeto
mlopsv2
para este tutorial).No projeto, em Configurações do Projeto (no canto inferior esquerdo da página do projeto), selecione Conexões de Serviço.
Selecione Criar conexão de serviço.
Selecione Azure Resource Manager, selecione Next, selecione Service principal (manual), selecione Next e selecione a Scope Level Subscription.
- Nome da Subscrição - Utilize o nome da subscrição onde a entidade de serviço está armazenada.
- ID da Subscrição - Utilize a introdução utilizada
subscriptionId
no Passo 1 como ID de Subscrição - ID da entidade de serviço - Use a
appId
saída da etapa 1 como a ID da entidade de serviço - Chave da entidade de serviço - Use a
password
saída da Etapa 1 como a chave da entidade de serviço - ID do Locatário - Use a
tenant
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 instalação do Azure DevOps foi concluída com êxito.
Configurar o repositório de origem com o Azure DevOps
Abra o projeto criado no Azure DevOps
Abra a seção Repos e selecione Importar repositório
Entre https://github.com/Azure/mlops-v2-ado-demo no campo URL do clone. Selecione importar na parte inferior da página
Abra as configurações do Project 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 do Serviço de Compilação mlopsv2. Altere a permissão Contribuir para Permitir e a permissão Criar ramificação para Permitir.
Abra a seção Pipelines no painel de navegação esquerdo e selecione os 3 pontos verticais ao lado do botão Create Pipelines . Selecione Gerenciar Segurança
Selecione a conta do Serviço de Compilação mlopsv2 para seu projeto na seção Usuários. Altere a permissão Editar pipeline de compilação para Permitir
Nota
Isso conclui a seção de pré-requisitos e a implantação do acelerador de solução pode acontecer de acordo.
Implantando a infraestrutura por meio do Azure DevOps
Esta etapa implanta o pipeline de treinamento no espaço de trabalho do Azure Machine Learning criado nas etapas anteriores.
Gorjeta
Certifique-se de entender os padrões de arquitetura do acelerador de solução antes de fazer checkout do repositório MLOps v2 e implantar a infraestrutura. Em exemplos, você usará o tipo de projeto ML clássico.
Executar pipeline de infraestrutura do Azure
Vá para o repositório
mlops-v2-ado-demo
e selecione o arquivo config-infra-prod.yml .Importante
Certifique-se de ter selecionado a ramificação principal do repositório.
Esse arquivo de configuração usa o namespace e o postfix valoriza os nomes dos artefatos para garantir exclusividade. Atualize a seção a seguir na configuração ao seu gosto.
namespace: [5 max random new letters] postfix: [4 max random new digits] location: eastus
Nota
Se você estiver executando uma carga de trabalho do Deep Learning, como CV ou NLP, verifique se a computação da GPU está disponível na zona de implantação.
Selecione Confirmar e enviar código para colocar esses valores no pipeline.
Ir para a seção Pipelines
Selecione Criar Pipeline.
Selecione Azure Repos Git.
Selecione o repositório clonado na seção anterior
mlops-v2-ado-demo
Selecione o arquivo YAML do Azure Pipelines existente
Selecione a
main
ramificação e escolhamlops/devops-pipelines/cli-ado-deploy-infra.yml
e, em seguida, selecione Continuar.Executar o pipeline; levará alguns minutos para terminar. O pipeline deve criar os seguintes artefatos:
- Grupo de Recursos para seu Espaço de Trabalho, incluindo Conta de Armazenamento, Registro de Contêiner, Application Insights, Keyvault e o próprio Espaço de Trabalho do Azure Machine Learning.
- No espaço de trabalho, também há um cluster de computação criado.
Agora a infraestrutura para seu projeto MLOps está implantada.
Nota
Os avisos Não é possível mover e reutilizar o repositório existente para o local necessário podem ser ignorados.
Exemplo de cenário de treinamento e implantação
O acelerador de solução inclui código e dados para um pipeline de aprendizado de máquina de ponta a ponta de amostra que executa uma regressão linear para prever as tarifas de táxi em Nova York. O pipeline é composto por componentes, cada um servindo funções diferentes, que podem ser registrados no espaço de trabalho, versionados e reutilizados com várias entradas e saídas. Pipelines e fluxos de trabalho de exemplo para os cenários de Visão Computacional e PNL terão etapas e etapas de implantação diferentes.
Este pipeline de treinamento contém as seguintes etapas:
Preparar dados
- Este componente usa vários conjuntos de dados de táxi (amarelo e verde) e mescla/filtra os dados, além de preparar os conjuntos de dados de trem/val e avaliação.
- Entrada: Dados locais em ./data/ (vários arquivos .csv)
- Saída: Conjunto de dados único preparado (.csv) e conjuntos de dados de comboio/val/teste.
Modelo de comboio
- 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 teste.
- Entrada: modelo de ML e conjunto de dados de teste
- Saída: Desempenho do modelo e um sinalizador de implantação para implantação ou não.
- Este componente compara o desempenho do modelo com todos os modelos implantados anteriores no novo conjunto de dados de teste e decide se o modelo deve ser promovido ou não para a produção. A promoção do modelo para a produção acontece registrando o modelo no espaço de trabalho AML.
Modelo de registo
- Este componente pontua o modelo com base na precisão das previsões no conjunto de testes.
- Entrada: Modelo treinado e o sinalizador deploy.
- Saída: Modelo registrado no Azure Machine Learning.
Implantando o pipeline de treinamento do modelo
Ir para pipelines ADO
Selecione Novo Pipeline.
Selecione Azure Repos Git.
Selecione o repositório clonado na seção anterior
mlopsv2
Selecione o arquivo YAML do Azure Pipelines existente
Selecione
main
como uma ramificação e escolha/mlops/devops-pipelines/deploy-model-training-pipeline.yml
e, em seguida, selecione Continuar.Salvar e executar o pipeline
Nota
Neste ponto, a infraestrutura é configurada e o loop de prototipagem da arquitetura MLOps é implantado. Você está pronto para mudar para o nosso modelo treinado para a produção.
Implantando o modelo treinado
Esse cenário inclui fluxos de trabalho pré-criados para duas abordagens para implantar um modelo treinado, pontuação em lote ou implantação de um modelo em um ponto de extremidade para pontuação em tempo real. Você pode executar um ou ambos esses fluxos de trabalho para testar o desempenho do modelo em seu espaço de trabalho do Azure ML. Neste exemplo, usaremos a pontuação em tempo real.
Implantar ponto de extremidade do modelo de ML
Ir para pipelines ADO
Selecione Novo Pipeline.
Selecione Azure Repos Git.
Selecione o repositório clonado na seção anterior
mlopsv2
Selecione o arquivo YAML do Azure Pipelines existente
Selecione
main
como uma ramificação e escolha Managed Online Endpoint/mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml
e, em seguida, selecione Continuar.Os nomes de pontos finais online precisam ser exclusivos, portanto, mude
taxi-online-$(namespace)$(postfix)$(environment)
para outro nome exclusivo e selecione Executar. Não há necessidade de 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 [seu nome do ponto de extremidade] para [seu nome do ponto de extremidade (número aleatório)]
Quando a execução for concluída, você verá uma saída semelhante à imagem a seguir:
Para testar essa implantação, vá para a guia Pontos de extremidade em seu espaço de trabalho AzureML, selecione o ponto de extremidade e clique na guia Teste . Você pode usar os dados de entrada de exemplo localizados no repositório clonado em
/data/taxi-request.json
para testar o ponto de extremidade.
Clean up resources (Limpar recursos)
- Se você não vai 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óximos passos
- Instalar e configurar o Python SDK v2
- Instalar e configurar a CLI do Python v2
- Azure MLOps (v2) acelerador de solução no GitHub
- Curso de formação em MLOps com Machine Learning
- Saiba mais sobre o Azure Pipelines com o Azure Machine Learning
- Saiba mais sobre as Ações do GitHub com o Azure Machine Learning
- Implantar MLOps no Azure em menos de uma hora - Vídeo do Community MLOps V2 Accelerator