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

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.

  1. In Azure DevOps selezionare Impostazioni progetto e aprire la pagina Connessioni servizio.

  2. Scegliere Crea connessione al servizio e selezionare Azure Resource Manager.

  3. Selezionare il metodo di autenticazione predefinito, l'entità servizio (automatica).

  4. Creare la connessione al servizio. Impostare il livello di ambito preferito, la sottoscrizione, il gruppo di risorse e il nome della connessione.

    Screenshot della connessione al servizio ARM.

Passaggio 4: Creare una pipeline

  1. Andare a Pipeline e selezionare Crea pipeline.

  2. Eseguire i passaggi della procedura guidata selezionando prima di tutto GitHub come posizione del codice sorgente.

  3. Si potrebbe essere reindirizzati a GitHub per l'accesso. In questo caso, immettere le credenziali di GitHub.

  4. Quando si vede l’elenco dei repository, selezionarne uno.

  5. È possibile che si venga reindirizzati a GitHub per installare l'app Azure Pipelines. In tal caso, selezionare Approva e installa.

  6. 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.

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.

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.