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

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.

  1. No Azure DevOps, selecione Configurações do Projeto e abra a página Conexões de serviço.

  2. Escolha + Nova conexão de serviço e selecione Azure Resource Manager.

  3. Selecione o método de autenticação padrão, Entidade de serviço (automática).

  4. Crie sua conexão de serviço. Defina seu nível de escopo, assinatura, grupo de recursos e nome de conexão preferidos.

    Screenshot of ARM service connection.

Etapa 4: Criar um pipeline

  1. Vá para Pipelines e selecione Novo pipeline.

  2. Siga as etapas do assistente selecionando primeiro o GitHub como o local do código-fonte.

  3. Poderá ser redirecionado para o GitHub para iniciar sessão. Em caso afirmativo, insira suas credenciais do GitHub.

  4. Quando vir a lista de repositórios, selecione o repositório.

  5. Você pode ser redirecionado para o GitHub para instalar o aplicativo Azure Pipelines. Em caso afirmativo, selecione Aprovar e instalar.

  6. 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 trabalho do Azure Machine Learning Failed == Tarefa do Azure DevOps no trabalho do Azure Machine Learning Cancelled == Tarefa do Azure DevOps no trabalho SucceededFailedWaitForJobCompletionWaitForJobCompletionWaitForJobCompletionCancelled

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.