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
- Slutför skapa resurser för att komma igång med:
- Skapa en arbetsyta
- Skapa ett molnbaserat beräkningskluster som ska användas för att träna din modell
- Azure Machine Learning-tillägg för Azure Pipelines. Det här tillägget kan installeras från Visual Studio Marketplace på https://marketplace.visualstudio.com/items?itemName=ms-air-aiagility.azureml-v2.
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 Portal.
I Azure DevOps väljer du Projektinställningar och öppnar sidan Tjänstanslutningar .
Välj Skapa tjänstanslutning och välj Azure Resource Manager.
Välj standardautentiseringsmetod, Tjänstens huvudnamn (automatisk).
Skapa din tjänstanslutning. Ange önskad omfångsnivå, prenumeration, resursgrupp och anslutningsnamn.
Steg 4: Skapa en pipeline
Gå till Pipelines och välj sedan skapa pipeline.
Utför stegen i guiden genom att först välja GitHub som plats för källkoden.
Du kan omdirigeras till GitHub för att logga in. I så fall anger du dina GitHub-autentiseringsuppgifter.
När du ser listan över lagringsplatser väljer du din lagringsplats.
Du kan omdirigeras till GitHub för att installera Azure Pipelines-appen. I så fall väljer du Godkänn och installera.
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 Name
AzureML 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. I Azure Portal tar du bort resursgruppen och Azure Machine Learning-instansen.