Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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).
- Addestramento di modelli di Machine Learning con scalabilità orizzontale e verticale 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 descrive come creare una pipeline di Azure che compila un modello di Machine Learning e la distribuisce in Azure Machine Learning.
Questa esercitazione usa Azure Machine Learning Python SDK v2 e interfaccia della riga di comando di Azure l'estensione ML v2.
Prerequisiti
- Completare il tutorial Creare risorse per iniziare:
- Creare un'area di lavoro.
- Creare un cluster di calcolo basato sul cloud da usare per il training del modello.
- Python 3.10 o versione successiva installata per l'esecuzione di script Azure ML SDK v2 in locale.
- Installare l'estensione Azure Machine Learning per Azure Pipelines. È possibile installare questa estensione dal marketplace Visual Studio.
Passaggio 1: Ottenere il codice
Crea un fork del seguente repository da GitHub:
https://github.com/azure/azureml-examples
Passaggio 2: Creare un progetto
Accedere a Azure. Cercare e selezionare organizzazioni Azure DevOps. Selezionare Visualizza le organizzazioni. Selezionare l'organizzazione da usare.
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 Project nell'angolo superiore destro del dashboard.
Passaggio 3: Creare una connessione al servizio
È possibile usare una connessione al servizio esistente.
È necessaria una connessione Azure Resource Manager per l'autenticazione con il portale di Azure.
In Azure DevOps selezionare Project settings e quindi selezionare Service connections.
Selezionare Crea connessione al servizio, selezionare Azure Resource Manager e quindi selezionare Next.
Usare i valori predefiniti per Tipo di identità e Credenziali.
Crea 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
Passare a Pipeline e quindi selezionare Crea pipeline.
Selezionare GitHub come percorso del codice sorgente.
È possibile che si venga reindirizzati a GitHub per accedere. In caso affermativo, immettere le credenziali GitHub.
Quando vedi l'elenco dei repository, seleziona il tuo repository.
Potresti essere reindirizzato a GitHub per installare l'app Azure Pipelines. In caso affermativo, selezionare Approva e installa.
Selezionare la pipeline di avvio. Aggiorni il modello di pipeline di avvio.
Passaggio 5: Creare una pipeline YAML per sottoporre un job di Azure Machine Learning
Eliminare la pipeline iniziale e sostituirla con il codice YAML seguente. In questa pipeline:
- Usare l'attività della versione Python per configurare Python 3.10 e installare i requisiti del componente SDK.
- Usare l'attività Bash per eseguire script bash per Azure Machine Learning SDK e l'interfaccia della riga di comando.
- Usare l'attività dell'interfaccia della riga di comando di Azure per inviare un processo di Azure Machine Learning.
Selezionare una delle schede seguenti, a seconda che si usi una connessione al servizio Azure Resource Manager o una connessione di servizio generica. Nella pipeline YAML sostituire i valori delle variabili con valori corrispondenti alle 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.10
inputs:
versionSpec: '>=3.10'
- 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.
Importante
Entrambi i meccanismi di attesa in questo passaggio (l'attività AzureMLJobWaitTask@1 nella scheda Azure Resource Manager e la registrazione webhook InvokeRESTAPI@1 nella scheda Generica) dipendono dall'invio di una notifica RunTerminated da parte di Azure Machine Learning ad Azure DevOps al termine del processo. Questo percorso di notifica è attualmente in fase di indagine e potrebbe non essere completato come previsto, causando il timeout del processo del server WaitFor* anziché riflettere lo stato del processo di Azure Machine Learning. Se si verifica questo comportamento, eseguire il polling dello stato del processo da un processo dell'agente usando az ml job show --query status finché non viene restituito uno stato terminale (Completed, Failed o Canceled), quindi uscire dall'attività con uno stato corrispondente.
- Utilizza una connessione al servizio Azure Resource Manager
- Uso di una connessione a un servizio generico
Se si usa una connessione al servizio Resource Manager, è possibile usare l'estensione Machine Learning. È possibile cercare questa estensione nella pagina Azure DevOps Extensions Marketplace oppure passare direttamente alla pagina extension. Installare l'estensione Machine Learning.
Importante
Non installare l'estensione Machine Learning (classica). Si tratta di un'estensione meno recente che non fornisce la stessa funzionalità.
Nella finestra di revisione della pipeline, aggiungere un'attività server. Nella parte dei passaggi del processo selezionare Mostra assistente e quindi cercare AzureML. Selezionare l'attività Attesa processo AzureML, quindi fornire le informazioni per il processo.
L'attività ha quattro input: Service Connection, Azure Resource Group Name, AzureML Workspace Name e AzureML Job Name. Fornire questi input. Il codice YAML risultante per questi passaggi è simile all'esempio seguente:
Nota
- L'attività di attesa di un processo di Azure Machine Learning viene eseguita su un processo server, che non usa risorse costose del pool di agenti e non comporta 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 processi di Azure Machine Learning può attendere un solo processo. È necessario configurare un'attività separata per ogni processo per cui si vuole attendere.
- L'attività di attesa del processo di Azure Machine Learning può attendere per un massimo di due giorni. Questo limite è un limite rigido impostato dalle pipeline Azure DevOps.
- job: WaitForAzureMLJobCompletion
displayName: Wait for AzureML Job Completion
pool: server
timeoutInMinutes: 0
dependsOn: SubmitAzureMLJob
variables:
# Save the name of the azureMl job submitted in the previous step to a variable. It will be used as an input 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 verificarne l'esecuzione
Selezionare Salva ed esegui. Quando il meccanismo di attesa nel passaggio 6 funziona come progettato, la pipeline attende il completamento del processo Azure Machine Learning e termina l'attività in WaitForJobCompletion con lo stesso stato del processo Azure Machine Learning. Per esempio:
Processo di Azure Machine Learning
Succeeded== Attività Azure DevOps nel processoWaitForJobCompletionSucceededProcesso di Azure Machine Learning
Failed== Attività Azure DevOps nel processoWaitForJobCompletionFailedProcesso di Azure Machine Learning
Cancelled== Attività Azure DevOps nel processoWaitForJobCompletionCancelled
Nota
A causa del problema evidenziato nel passaggio 6, il job WaitFor* potrebbe andare in timeout anziché riflettere lo stato del job di Azure Machine Learning. Usare studio di Azure Machine Learning per confermare il risultato effettivo del processo fino al ripristino del percorso di notifica.
Suggerimento
È possibile visualizzare il processo di Azure Machine Learning completo in studio di Azure Machine Learning.
Pulire le risorse
Se non si prevede di continuare a usare la pipeline, eliminare il progetto Azure DevOps. Nel portale di Azure, elimina il gruppo di risorse e l'istanza di Azure Machine Learning.