Usar o Azure Pipelines com o Azure Machine Learning
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Você pode usar um pipeline do Azure DevOps para automatizar o ciclo de vida de aprendizado de máquina. Algumas das operações que você pode automatizar são:
- 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 ou de descompasso de dados)
Este artigo ensinará como criar um Pipeline do Azure que cria e implanta um modelo de machine learning no Azure Machine Learning.
Este tutorial usa o SDK v2 do Python do Azure Machine Learning e a extensão de ML v2 da CLI do Azure.
Pré-requisitos
- Complete o artigo Criar recursos para começar para:
- Criar um workspace
- Criar um cluster de cálculo baseado em nuvem para usá-lo no treinamento de seu modelo
- Extensão do Azure Machine Learning para Azure Pipelines. Essa extensão pode ser instalada a partir do Marketplace do Visual Studio no link https://marketplace.visualstudio.com/items?itemName=ms-air-aiagility.azureml-v2.
Etapa 1: obter o código
Bifurque o seguinte repositório no GitHub:
https://github.com/azure/azureml-examples
Etapa 2: entrar no Azure Pipelines
Entre no Azure Pipelines. Depois de entrar, o navegador vai para https://dev.azure.com/my-organization-name
e exibe o painel do Azure DevOps.
Na organização selecionada, crie um projeto. Se você não tiver nenhum projeto em sua organização, verá uma tela Criar um projeto para começar. Caso contrário, selecione o botão Novo Projeto no canto superior direito do painel.
Etapa 3: Criar uma conexão de serviço
Você pode usar uma conexão de serviço existente.
Você precisará de uma conexão do Azure Resource Manager para autenticar junto ao portal do Azure.
No Azure DevOps, selecione Configurações do Projeto e abra a página Conexões do serviço.
Escolha Criar conexão de serviço e selecione Azure Resource Manager.
Selecione o método de autenticação padrão, Entidade de serviço (automática).
Crie sua conexão de serviço. Configure o nível de escopo, a assinatura, o grupo de recursos e o nome da conexão de sua preferência.
Etapa 4: criar um pipeline
Vá para Pipelines e, em seguida, selecione criar pipeline.
Percorra as etapas do assistente selecionando primeiro o GitHub como o local do código-fonte.
Você pode ser redirecionado para o GitHub para então entrar. Nesse caso, insira suas credenciais do GitHub.
Quando a lista de repositórios for exibida, selecione o repositório.
Você poderá ser redirecionado ao GitHub para instalar o aplicativo do Azure Pipelines. Nesse caso, selecione Aprovar e instalar.
Selecione Pipeline inicial. Você atualizará o modelo de pipeline inicial.
Etapa 5: Criar seu pipeline de YAML para enviar o trabalho do Azure Machine Learning
Exclua o pipeline inicial e substitua-o pelo código YAML a seguir. Nesse pipeline, você vai:
- Usar a tarefa de versão do Python para configurar o Python 3.8 e instalar os requisitos do SDK.
- Usar a tarefa Bash para executar scripts bash para o SDK e a CLI do Azure Machine Learning.
- Usar a tarefa da CLI do Azure para enviar um trabalho do Azure Machine Learning.
Selecione as guias a seguir, conforme você estiver usando uma conexão de serviço do Azure Resource Manager ou uma conexão de serviço genérico. No pipeline de YAML, substitua o valor das variáveis por seus recursos.
- Como usar uma conexão de serviço do Azure Resource Manager
- Como usar uma conexão de serviço genérico
name: submit-azure-machine-learning-job
trigger:
- none
variables:
service-connection: 'machine-learning-connection' # replace with your service connection name
resource-group: 'machinelearning-rg' # replace with your resource group name
workspace: 'docs-ws' # replace with your workspace name
jobs:
- job: SubmitAzureMLJob
displayName: Submit AzureML Job
timeoutInMinutes: 300
pool:
vmImage: ubuntu-latest
steps:
- task: UsePythonVersion@0
displayName: Use Python >=3.8
inputs:
versionSpec: '>=3.8'
- bash: |
set -ex
az version
az extension add -n ml
displayName: 'Add AzureML Extension'
- task: AzureCLI@2
name: submit_azureml_job_task
displayName: Submit AzureML Job Task
inputs:
azureSubscription: $(service-connection)
workingDirectory: 'cli/jobs/pipelines-with-components/nyc_taxi_data_regression'
scriptLocation: inlineScript
scriptType: bash
inlineScript: |
# submit component job and get the run name
job_name=$(az ml job create --file single-job-pipeline.yml -g $(resource-group) -w $(workspace) --query name --output tsv)
# Set output variable for next task
echo "##vso[task.setvariable variable=JOB_NAME;isOutput=true;]$job_name"
Etapa 6: Aguardar a conclusão do trabalho do Azure Machine Learning
Na Etapa 5, você criou um pipeline para enviar um trabalho do Azure Machine Learning. Nessa etapa, você adiciona um outro trabalho que aguarda a conclusão do trabalho do Azure Machine Learning.
- Como usar uma conexão de serviço do Azure Resource Manager
- Como usar uma conexão de serviço genérico
Se estiver usando uma conexão de serviço do Azure Resource Manager, você poderá usar a extensão "Machine Learning". Você pode pesquisar essa extensão no Marketplace de extensões do Azure DevOps ou ir diretamente para a extensão. Instalar a extensão "Machine Learning".
Importante
Não instale a extensão Machine Learning (clássica) por engano; trata-se de uma extensão mais antiga que não fornece a mesma funcionalidade.
Na janela de revisão do Pipeline, adicione um Trabalho de Servidor. Na parte das etapas do trabalho, selecione Mostrar assistente e procure AzureML. Selecione a tarefa Espera do Trabalho do AzureML e preencha as informações do trabalho.
A tarefa tem quatro entradas: Service Connection
, Azure Resource Group Name
, AzureML Workspace Name
e AzureML Job Name
. Preencha essas entradas. O YAML resultante para essas etapas é semelhante ao exemplo a seguir:
Observação
- A tarefa de espera do trabalho do Azure Machine Learning é executada em um trabalho de servidor, que não usa recursos caros do pool de agentes e não requer nenhuma cobrança adicional. Os trabalhos de servidor (indicados por
pool: server
) são executados no mesmo computador que o seu pipeline. Para obter mais informações, confira Trabalhos de servidor. - Uma tarefa de espera de trabalho do Azure Machine Learning pode aguardar apenas um trabalho. Você precisará configurar uma tarefa separada para cada trabalho que quiser aguardar.
- A tarefa de espera do trabalho do Azure Machine Learning pode aguardar por um máximo de 2 dias. Esse é um limite rígido definido pelos Pipelines do Azure DevOps.
- job: WaitForAzureMLJobCompletion
displayName: Wait for AzureML Job Completion
pool: server
timeoutInMinutes: 0
dependsOn: SubmitAzureMLJob
variables:
# We are saving the name of azureMl job submitted in previous step to a variable and it will be used as an inut to the AzureML Job Wait task
azureml_job_name_from_submit_job: $[ dependencies.SubmitAzureMLJob.outputs['submit_azureml_job_task.JOB_NAME'] ]
steps:
- task: AzureMLJobWaitTask@1
inputs:
serviceConnection: $(service-connection)
resourceGroupName: $(resource-group)
azureMLWorkspaceName: $(workspace)
azureMLJobName: $(azureml_job_name_from_submit_job)
Etapa 7: Enviar o pipeline e verificar a execução do pipeline
Selecione Salvar e executar. O pipeline irá aguardar a conclusão do trabalho do Azure Machine Learning e encerrar a tarefa incluída em WaitForJobCompletion
com o mesmo status do trabalho do Azure Machine Learning. Por exemplo: trabalho do Azure Machine Learning Succeeded
== Tarefa do Azure DevOps incluída no trabalho WaitForJobCompletion
Succeeded
Trabalho do Azure Machine Learning Failed
== Tarefa do Azure DevOps incluída no trabalho WaitForJobCompletion
Failed
Trabalho do Azure Machine Learning Cancelled
== Tarefa do Azure DevOps incluída no trabalho WaitForJobCompletion
Cancelled
Dica
Você pode ver o trabalho completo do Azure Machine Learning no Estúdio do Azure Machine Learning.
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.