Usar o Azure Pipelines com o Azure Machine Learning
Serviços de DevOps do Azure | Azure DevOps Server 2022 - Azure DevOps Server 2019
Você pode usar um pipeline de DevOps do Azure para automatizar o ciclo de vida do aprendizado de máquina. Algumas das operações que você pode automatizar são:
- 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 ou desvio de dados)
Este artigo ensina como criar um Pipeline do Azure que cria e implanta um modelo de aprendizado de máquina no Azure Machine Learning.
Este tutorial usa o SDK do Python do Azure Machine Learning v2 e a extensão do Azure CLI ML v2.
Pré-requisitos
- Conclua a seção Criar recursos para começar :
- Criar uma área de trabalho
- Crie um cluster de computação baseado em nuvem para usar no treinamento de seu modelo
- Extensão do Azure Machine Learning para Pipelines do Azure. Essa extensão pode ser instalada a partir do mercado do Visual Studio em https://marketplace.visualstudio.com/items?itemName=ms-air-aiagility.azureml-v2.
Passo 1: Obter o código
Fork o seguinte repo no GitHub:
https://github.com/azure/azureml-examples
Etapa 2: Entrar no Azure Pipelines
Entre no Azure Pipelines. Depois de entrar, seu navegador vai e https://dev.azure.com/my-organization-name
exibe seu painel do Azure DevOps.
Dentro da 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ê precisa de uma conexão do Azure Resource Manager para autenticar com o portal do Azure.
No Azure DevOps, selecione Configurações do Projeto e abra a página Conexões de serviço.
Escolha Criar conexão de serviço e selecione Gerenciador de Recursos do Azure.
Selecione o método de autenticação padrão, Entidade de serviço (automática).
Crie sua conexão de serviço. Defina seu nível de escopo, assinatura, grupo de recursos e nome de conexão preferidos.
Etapa 4: Criar um pipeline
Vá para Pipelines e selecione criar pipeline.
Siga as etapas do assistente selecionando primeiro o GitHub como o local do código-fonte.
Poderá ser redirecionado para o GitHub para iniciar sessão. Em caso afirmativo, insira suas credenciais do GitHub.
Quando vir a lista de repositórios, selecione o repositório.
Você pode ser redirecionado para o GitHub para instalar o aplicativo Azure Pipelines. Em caso afirmativo, selecione Aprovar e instalar.
Selecione o pipeline Starter. Você atualizará o modelo de pipeline inicial.
Etapa 5: Criar seu pipeline YAML para enviar o trabalho do Azure Machine Learning
Exclua o pipeline inicial e substitua-o pelo seguinte código YAML. Neste pipeline, você:
- Use a tarefa de versão do Python para configurar o Python 3.8 e instalar os requisitos do SDK.
- Use a tarefa Bash para executar scripts bash para o SDK e a CLI do Azure Machine Learning.
- Use a tarefa CLI do Azure para enviar um trabalho do Azure Machine Learning.
Selecione as guias a seguir, dependendo se você estiver usando uma conexão de serviço do Azure Resource Manager ou uma conexão de serviço genérica. No pipeline YAML, substitua o valor das variáveis pelos seus recursos.
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: Aguarde a conclusão do trabalho do Azure Machine Learning
Na etapa 5, você adicionou um trabalho para enviar um trabalho do Azure Machine Learning. Nesta etapa, você adiciona outro trabalho que aguarda a conclusão do trabalho do Azure Machine Learning.
Se estiver a utilizar uma ligação de serviço do Azure Resource Manager, pode utilizar a extensão "Machine Learning". Você pode pesquisar essa extensão no Azure DevOps extensions Marketplace ou ir diretamente para a extensão. Instale a extensão "Machine Learning".
Importante
Não instale a extensão Machine Learning (clássica) por engano, é uma extensão mais antiga que não fornece a mesma funcionalidade.
Na janela Revisão de pipeline, adicione um trabalho de servidor. Na parte de etapas do trabalho, selecione Mostrar assistente e procure AzureML. Selecione a tarefa AzureML Job Wait 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 estas entradas. O YAML resultante para estas etapas é semelhante ao exemplo a seguir:
Nota
- A tarefa de espera de trabalho do Azure Machine Learning é executada em um trabalho de servidor, que não consome recursos caros do pool de agentes e não requer cobranças adicionais. Os trabalhos do servidor (indicados por
pool: server
) são executados na mesma máquina que o pipeline. Para obter mais informações, consulte Trabalhos de servidor. - Uma tarefa de espera de trabalho do Azure Machine Learning só pode aguardar em um trabalho. Você precisará configurar uma tarefa separada para cada trabalho que deseja aguardar.
- A tarefa de espera de trabalho do Azure Machine Learning pode aguardar no máximo 2 dias. Este é um limite rígido definido pelo Azure DevOps Pipelines.
- 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 pipeline e verificar a execução do pipeline
Selecione Guardar e executar. O pipeline aguardará a conclusão do trabalho do Azure Machine Learning e terminará a tarefa com WaitForJobCompletion
o mesmo status do trabalho do Azure Machine Learning. Por exemplo: Trabalho Succeeded
do Azure Machine Learning == Tarefa do Azure DevOps no WaitForJobCompletion
trabalho Succeeded
do Azure Machine Learning Failed
== Tarefa do Azure DevOps no WaitForJobCompletion
trabalho Failed
do Azure Machine Learning Cancelled
== Tarefa do Azure DevOps no WaitForJobCompletion
trabalho Cancelled
Gorjeta
Você pode exibir o trabalho completo do Azure Machine Learning no estúdio do Azure Machine Learning.
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.