Använda Azure Pipelines med Azure Machine Learning

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Du kan använda en Azure DevOps-pipeline för att automatisera maskininlärningslivscykeln. Några av de åtgärder som du kan automatisera är:

  • Förberedelse av data (extrahera, transformera, läsa in åtgärder)
  • Träna maskininlärningsmodeller med utskalning på begäran och uppskalning
  • Distribution av maskininlärningsmodeller som offentliga eller privata webbtjänster
  • Övervakning av distribuerade maskininlärningsmodeller (till exempel för prestanda- eller dataavvikelseanalys)

Den här artikeln lär dig hur du skapar en Azure Pipeline som skapar och distribuerar en maskininlärningsmodell till Azure Machine Learning.

I den här självstudien används Azure Machine Learning Python SDK v2 och Azure CLI ML-tillägget v2.

Förutsättningar

Steg 1: Hämta koden

Förgrena följande lagringsplats på GitHub:

https://github.com/azure/azureml-examples

Steg 2: Logga in på Azure Pipelines

Logga in på Azure Pipelines. När du har loggat in går webbläsaren till https://dev.azure.com/my-organization-name och visar din Azure DevOps-instrumentpanel.

Skapa ett projekt i den valda organisationen. Om du inte har några projekt i din organisation visas skärmen Skapa ett projekt för att komma igång . Annars väljer du knappen Nytt projekt i det övre högra hörnet på instrumentpanelen.

Steg 3: Skapa en tjänstanslutning

Du kan använda en befintlig tjänstanslutning.

Du behöver en Azure Resource Manager-anslutning för att autentisera med Azure-portalen.

  1. I Azure DevOps väljer du Project Inställningar och öppnar sidan Tjänstanslutningar.

  2. Välj + Ny tjänstanslutning och välj Azure Resource Manager.

  3. Välj standardautentiseringsmetod, Tjänstens huvudnamn (automatisk).

  4. Skapa din tjänstanslutning. Ange önskad omfångsnivå, prenumeration, resursgrupp och anslutningsnamn.

    Screenshot of ARM service connection.

Steg 4: Skapa en pipeline

  1. Gå till Pipelines och välj sedan Ny pipeline.

  2. Utför stegen i guiden genom att först välja GitHub som plats för källkoden.

  3. Du kan omdirigeras till GitHub för att logga in. I så fall anger du dina GitHub-autentiseringsuppgifter.

  4. När du ser listan över lagringsplatser väljer du din lagringsplats.

  5. Du kan omdirigeras till GitHub för att installera Azure Pipelines-appen. I så fall väljer du Godkänn och installera.

  6. Välj startpipelinen. Du uppdaterar mallen för startpipelinen.

Steg 5: Skapa din YAML-pipeline för att skicka Azure Machine Learning-jobbet

Ta bort startpipelinen och ersätt den med följande YAML-kod. I den här pipelinen gör du följande:

  • Använd Python-versionsuppgiften för att konfigurera Python 3.8 och installera SDK-kraven.
  • Använd Bash-uppgiften för att köra bash-skript för Azure Machine Learning SDK och CLI.
  • Använd Azure CLI-uppgiften för att skicka ett Azure Machine Learning-jobb.

Välj följande flikar beroende på om du använder en Azure Resource Manager-tjänstanslutning eller en allmän tjänstanslutning. I YAML-pipelinen ersätter du värdet för variabler med dina resurser.

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"

Steg 6: Vänta tills Azure Machine Learning-jobbet har slutförts

I steg 5 lade du till ett jobb för att skicka ett Azure Machine Learning-jobb. I det här steget lägger du till ett annat jobb som väntar på att Azure Machine Learning-jobbet ska slutföras.

Om du använder en Azure Resource Manager-tjänstanslutning kan du använda tillägget "Machine Learning". Du kan söka i det här tillägget på Marketplace för Azure DevOps-tillägg eller gå direkt till tillägget. Installera tillägget "Machine Learning".

Viktigt!

Installera inte Machine Learning-tillägget (klassiskt) av misstag. Det är ett äldre tillägg som inte har samma funktioner.

Lägg till ett serverjobb i fönstret Pipeline-granskning. I stegdelen av jobbet väljer du Visa assistent och söker efter AzureML. Välj uppgiften Vänta i AzureML-jobb och fyll i informationen för jobbet.

Uppgiften har fyra indata: Service Connection, Azure Resource Group NameAzureML Workspace Name och AzureML Job Name. Fyll i dessa indata. Yaml-resultatet för dessa steg liknar följande exempel:

Kommentar

  • Azure Machine Learning-jobbets vänteaktivitet körs på ett serverjobb, som inte använder dyra agentpoolresurser och inte kräver några ytterligare avgifter. Serverjobb (anges av pool: server) körs på samma dator som din pipeline. Mer information finns i Serverjobb.
  • En Azure Machine Learning-jobbvänteuppgift kan bara vänta på ett jobb. Du måste konfigurera en separat uppgift för varje jobb som du vill vänta på.
  • Azure Machine Learning-jobbets väntande uppgift kan vänta i högst 2 dagar. Det här är en hård gräns som anges av 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)

Steg 7: Skicka pipeline och verifiera pipelinekörningen

Välj Spara och kör. Pipelinen väntar tills Azure Machine Learning-jobbet har slutförts och avslutar uppgiften under WaitForJobCompletion med samma status som Azure Machine Learning-jobbet. Till exempel: Azure Machine Learning-jobb Succeeded == Azure DevOps-uppgift under WaitForJobCompletion jobbet Succeeded Azure Machine Learning-jobb Failed == Azure DevOps-uppgift under WaitForJobCompletion jobbet Failed Azure Machine Learning-jobb Cancelled == Azure DevOps-uppgift under WaitForJobCompletion jobb Cancelled

Dricks

Du kan visa hela Azure Machine Learning-jobbet i Azure Machine Learning-studio.

Rensa resurser

Om du inte kommer att fortsätta att använda din pipeline tar du bort ditt Azure DevOps-projekt. Ta bort resursgruppen och Azure Machine Learning-instansen i Azure-portalen.