Utilizzare Azure Pipelines con Azure Machine Learning
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
È possibile usare una pipeline Azure DevOps per automatizzare il ciclo di vita di Machine Learning. Alcune delle operazioni che è possibile automatizzare sono:
- Preparazione dei dati (estrazione, trasformazione, operazioni di caricamento)
- Training di modelli di Machine Learning con scale-out e scale-up su richiesta
- Distribuzione di modelli di Machine Learning come servizi Web pubblici o privati
- Monitoraggio dei modelli di Machine Learning distribuiti (ad esempio per l'analisi delle prestazioni o della deriva dei dati)
Questo articolo illustra come creare una pipeline di Azure che compila e distribuisce un modello di Machine Learning in Azure Machine Learning.
Questa esercitazione usa Azure Machine Learning Python SDK v2 e l'estensione Azure CLI ML v2.
Prerequisiti
- Completare Creare risorse per iniziare per:
- Creare un'area di lavoro
- Creare un cluster di calcolo basato sul cloud da usare per il training del modello
- Estensione di Azure Machine Learning per Azure Pipelines. Questa estensione può essere installata dal marketplace di Visual Studio all'indirizzo https://marketplace.visualstudio.com/items?itemName=ms-air-aiagility.azureml-v2.
Passaggio 1: Ottenere il codice
Creare una copia tramite fork del repository seguente in GitHub:
https://github.com/azure/azureml-examples
Passaggio 2: Accedere ad Azure Pipelines
Accedere ad Azure Pipelines. Dopo l'accesso, il browser passa a https://dev.azure.com/my-organization-name
e visualizza il dashboard di Azure DevOps.
All'interno dell'organizzazione selezionata creare un progetto. Se non sono presenti progetti nell'organizzazione, viene visualizzata la schermata Crea un progetto per iniziare. In caso contrario, selezionare il pulsante Nuovo progetto nell'angolo superiore destro del dashboard.
Passaggio 3: Creare una connessione al servizio
È possibile usare una connessione al servizio esistente.
È necessaria una connessione di Azure Resource Manager per l'autenticazione con il portale di Azure.
In Azure DevOps selezionare Impostazioni progetto e aprire la pagina Connessioni servizio.
Scegliere Crea connessione al servizio e selezionare Azure Resource Manager.
Selezionare il metodo di autenticazione predefinito, l'entità servizio (automatica).
Creare la connessione al servizio. Impostare il livello di ambito preferito, la sottoscrizione, il gruppo di risorse e il nome della connessione.
Passaggio 4: Creare una pipeline
Andare a Pipeline e selezionare Crea pipeline.
Eseguire i passaggi della procedura guidata selezionando prima di tutto GitHub come posizione del codice sorgente.
Si potrebbe essere reindirizzati a GitHub per l'accesso. In questo caso, immettere le credenziali di GitHub.
Quando si vede l’elenco dei repository, selezionarne uno.
È possibile che si venga reindirizzati a GitHub per installare l'app Azure Pipelines. In tal caso, selezionare Approva e installa.
Selezionare la pipeline di base. Si aggiornerà il modello di pipeline di base.
Passaggio 5: Compilare la pipeline YAML per inviare il processo di Azure Machine Learning
Eliminare la pipeline di base e sostituirla con il codice YAML seguente. In questa pipeline:
- Usare l'attività versione Python per configurare Python 3.8 e installare i requisiti dell'SDK.
- Usare l'attività Bash per eseguire script bash per CLI e SDK Azure Machine Learning.
- Usare l'attività dell'interfaccia della riga di comando di Azure per inviare un processo di Azure Machine Learning.
Selezionare le schede seguenti a seconda che si usi una connessione al servizio Azure Resource Manager o una connessione al servizio generico. Nella pipeline YAML sostituire il valore delle variabili con le risorse.
- Utilizzo della connessione al servizio Azure Resource Manager
- Utilizzo della connessione al servizio generico
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"
Passaggio 6: Attendere il completamento del processo di Azure Machine Learning
Nel passaggio 5 è stato aggiunto un processo per inviare un processo di Azure Machine Learning. In questo passaggio si aggiunge un altro processo che attende il completamento del processo di Azure Machine Learning.
- Utilizzo della connessione al servizio Azure Resource Manager
- Utilizzo della connessione al servizio generico
Se si usa una connessione al servizio Azure Resource Manager, è possibile usare l'estensione "Machine Learning". È possibile cercare questa estensione in Marketplace estensioni Azure DevOps o passare direttamente all'estensione. Installare l'estensione “Machine Learning”.
Importante
Non installare l'estensione Machine Learning (classico) per errore. Si tratta di un'estensione meno recente che non fornisce le stesse funzionalità.
Nella finestra Verifica pipeline aggiungere un processo server. Nella parte dei passaggi del processo selezionare Mostra assistente e cercare AzureML. Selezionare l'attività Attesa processo AzureML e immettere le informazioni per il processo.
L'attività ha quattro input: Service Connection
, Azure Resource Group Name
AzureML Workspace Name
e AzureML Job Name
. Compilare questi input. Lo YAML risultante per questi passaggi è simile all'esempio seguente:
Nota
- L'attività di attesa del processo di Azure Machine Learning viene eseguita in un processo del server, che non usa risorse costose del pool di agenti e non richiede costi aggiuntivi. I processi server (indicati da
pool: server
) vengono eseguiti nello stesso computer della pipeline. Per altre informazioni, vedere Processi del server. - Un'attività di attesa del processo di Azure Machine Learning può attendere un solo processo. Sarà necessario configurare un'attività separata per ogni processo che si vuole attendere.
- L'attività di attesa del processo di Azure Machine Learning può attendere un massimo di 2 giorni. Si tratta di un limite rigido impostato dalle pipeline di Azure DevOps.
- 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)
Passaggio 7: Inviare la pipeline e verificare l'esecuzione della pipeline
Seleziona Salva ed Esegui. La pipeline attenderà il completamento del processo di Azure Machine Learning e terminerà l'attività in WaitForJobCompletion
con lo stesso stato del processo di Azure Machine Learning. Ad esempio: processo di Azure Machine Learning Succeeded
== Attività Azure DevOps in WaitForJobCompletion
processo Succeeded
processo di Azure Machine Learning Failed
== Attività di Azure DevOps in WaitForJobCompletion
processo Failed
processo di Azure Machine Learning Cancelled
== Attività Azure DevOps in WaitForJobCompletion
processo Cancelled
Suggerimento
È possibile visualizzare il processo completo di Azure Machine Learning in studio di Azure Machine Learning.
Pulire le risorse
Se non si intende continuare a usare la pipeline, eliminare il progetto Azure DevOps. Nel portale di Azure eliminare il gruppo di risorse e l'istanza di Azure Machine Learning.