Använda Azure Pipelines med Azure Mašinsko učenje

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 Mašinsko učenje.

I den här självstudien används Azure Mašinsko učenje 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 Projektinställningar och öppnar sidan Tjänstanslutningar .

  2. Välj Skapa 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.

    Skärmbild av ARM-tjänstanslutning.

Steg 4: Skapa en pipeline

  1. Gå till Pipelines och välj sedan skapa 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 Mašinsko učenje-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 Mašinsko učenje SDK och CLI.
  • Använd Azure CLI-uppgiften för att skicka ett Azure Mašinsko učenje-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 Mašinsko učenje jobbet har slutförts

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

Om du använder en Azure Resource Manager-tjänstanslutning kan du använda tillägget "Mašinsko učenje". 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 "Mašinsko učenje".

Viktigt!

Installera inte tillägget Mašinsko učenje (klassisk) 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 Mašinsko učenje jobbvä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-Mašinsko učenje jobbvänteaktivitet 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 Mašinsko učenje jobbvänteaktivitet 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 Mašinsko učenje-jobbet har slutförts och avslutar aktiviteten under WaitForJobCompletion med samma status som Azure Mašinsko učenje-jobbet. Till exempel: Azure Mašinsko učenje-jobb Succeeded == Azure DevOps-uppgift under WaitForJobCompletion jobbet Succeeded Azure Mašinsko učenje jobb Failed == Azure DevOps-uppgift under WaitForJobCompletion jobbet Failed Azure Mašinsko učenje jobb Cancelled == Azure DevOps-uppgift under WaitForJobCompletion jobbCancelled

Dricks

Du kan visa hela Azure Mašinsko učenje-jobbet i Azure Mašinsko učenje 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 Mašinsko učenje-instansen i Azure-portalen.