Azure Machine Learning offre diversi modi per inviare processi di training di Machine Learning. In questo articolo si apprenderà come inviare processi usando i metodi seguenti:
Estensione dell'interfaccia della riga di comando di Azure per Machine Learning: l'estensione ml , detta anche interfaccia della riga di comando v2.
Python SDK v2 per Azure Machine Learning.
API REST: API su cui si basano l'interfaccia della riga di comando e l'SDK.
Un'area di lavoro di Azure Machine Learning. Se non è disponibile, è possibile usare la procedura descritta nell'articolo Creare risorse per iniziare .
Per usare le informazioni sull'SDK, installare Azure Machine Learning SDK v2 per Python.
Per usare le informazioni sull'interfaccia della riga di comando , installare l'interfaccia della riga di comando di Azure e l'estensione per Machine Learning.
Per usare le informazioni sull'API REST, sono necessari gli elementi seguenti:
Un'entità servizio nell'area di lavoro. le richieste REST Amministrazione istrative usano l'autenticazione dell'entità servizio.
Token di autenticazione dell'entità servizio. Seguire la procedura descritta in Recuperare un token di autenticazione dell'entità servizio per recuperare questo token.
In PowerShell curl è un alias per Invoke-WebRequest e curl -d "key=val" -X POST uri diventa Invoke-WebRequest -Body "key=val" -Method POST -Uri uri.
Anche se è possibile chiamare l'API REST da PowerShell, gli esempi in questo articolo presuppongono l'uso di Bash.
Utilità jq per l'elaborazione di JSON. Questa utilità viene usata per estrarre valori dai documenti JSON restituiti dalle chiamate API REST.
Clonare il repository di esempi
I frammenti di codice in questo articolo sono basati su esempi nel repository GitHub degli esempi di Azure Machine Learning. Per clonare il repository nell'ambiente di sviluppo, usare il comando seguente:
Usare --depth 1 per clonare solo il commit più recente nel repository, riducendo il tempo necessario per completare l'operazione.
Processo di esempio
Gli esempi in questo articolo usano il set di dati dei fiori iris per eseguire il training di un modello MLFlow.
Eseguire il training nel cloud
Quando si esegue il training nel cloud, è necessario connettersi all'area di lavoro di Azure Machine Learning e selezionare una risorsa di calcolo che verrà usata per eseguire il processo di training.
1. Connessione all'area di lavoro
Suggerimento
Usare le schede seguenti per selezionare il metodo da usare per eseguire il training di un modello. Se si seleziona una scheda, tutte le schede di questo articolo verranno automaticamente visualizzate nella stessa scheda. È possibile selezionare un'altra scheda in qualsiasi momento.
Per connettersi all'area di lavoro, sono necessari parametri di identificatore, ovvero una sottoscrizione, un gruppo di risorse e un nome dell'area di lavoro. Questi dettagli verranno usati nello MLClient spazio dei nomi per azure.ai.ml ottenere un handle per l'area di lavoro di Azure Machine Learning necessaria. Per eseguire l'autenticazione, usare l'autenticazione di Azure predefinita. Per altre informazioni su come configurare le credenziali e connettersi a un'area di lavoro, vedere questo esempio .
#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'
#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
Quando si usa l'interfaccia della riga di comando di Azure, sono necessari parametri di identificatore, ovvero una sottoscrizione, un gruppo di risorse e un nome dell'area di lavoro. Sebbene sia possibile specificare questi parametri per ogni comando, è anche possibile impostare le impostazioni predefinite che verranno usate per tutti i comandi. Usare i comandi seguenti per impostare i valori predefiniti. Sostituire <subscription ID>, <Azure Machine Learning workspace name>e <resource group> con i valori per la configurazione:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Gli esempi di API REST in questo articolo usano $SUBSCRIPTION_IDsegnaposto , $RESOURCE_GROUP$LOCATION, e $WORKSPACE . Sostituire i segnaposto con i propri valori come indicato di seguito:
$SUBSCRIPTION_ID: ID sottoscrizione di Azure.
$RESOURCE_GROUP: gruppo di risorse di Azure che contiene l'area di lavoro.
$LOCATION: area di Azure in cui si trova l'area di lavoro.
$WORKSPACE: nome dell'area di lavoro di Azure Machine Learning.
$COMPUTE_NAME: nome del cluster di calcolo di Azure Machine Learning.
Amministrazione istrative REST richiede un token di autenticazione dell'entità servizio. È possibile recuperare un token con il comando seguente. Il token viene archiviato nella $TOKEN variabile di ambiente:
Il provider di servizi usa l'argomento api-version per garantire la compatibilità. L'argomento api-version varia da servizio a servizio. Impostare la versione dell'API come variabile per supportare le versioni future:
API_VERSION="2022-05-01"
Quando si esegue il training usando l'API REST, i dati e gli script di training devono essere caricati in un account di archiviazione a cui l'area di lavoro può accedere. L'esempio seguente ottiene le informazioni di archiviazione per l'area di lavoro e la salva in variabili in modo da poterla usare in un secondo momento:
Un cluster di calcolo di Azure Machine Learning è una risorsa di calcolo completamente gestita che può essere usata per eseguire il processo di training. Negli esempi seguenti viene creato un cluster di calcolo denominato cpu-compute .
Mentre viene restituita una risposta dopo alcuni secondi, ciò indica solo che la richiesta di creazione è stata accettata. Il completamento della creazione del cluster può richiedere alcuni minuti.
Per eseguire questo script, si userà un oggetto command che esegue main.py script Python disponibile in ./sdk/python/jobs/single-step/lightgbm/iris/src/. Il comando verrà eseguito inviandolo come a job Azure Machine Learning.
Nota
Per usare il calcolo serverless, eliminare compute="cpu-cluster" in questo codice.
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url
Negli esempi precedenti è stato configurato:
code - percorso in cui si trova il codice per eseguire il comando
command - comando che deve essere eseguito
environment : l'ambiente necessario per eseguire lo script di training. In questo esempio viene usato un ambiente curato o pronto fornito da Azure Machine Learning denominato AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Per usare la @latest direttiva viene usata la versione più recente di questo ambiente. È anche possibile usare ambienti personalizzati specificando un'immagine Docker di base e specificando un yaml conda al suo posto.
inputs : dizionario di input che usano coppie nome-valore al comando. La chiave è un nome per l'input all'interno del contesto del processo e il valore è il valore di input. Viene fatto riferimento agli input nell'oggetto command utilizzando l'espressione ${{inputs.<input_name>}} . Per usare file o cartelle come input, è possibile usare la Input classe . Per altre informazioni, vedere Espressioni SDK e dell'interfaccia della riga di comando v2.
Per altre informazioni, vedere la documentazione di riferimento.
Quando si invia il processo, viene restituito un URL allo stato del processo nel studio di Azure Machine Learning. Usare l'interfaccia utente di Studio per visualizzare lo stato del processo. È anche possibile usare returned_job.status per controllare lo stato corrente del processo.
Il az ml job create comando usato in questo esempio richiede un file di definizione del processo YAML. Il contenuto del file usato in questo esempio è:
Nota
Per usare il calcolo serverless, eliminare compute: azureml:cpu-cluster" in questo codice.
code - percorso in cui si trova il codice per eseguire il comando
command - comando che deve essere eseguito
inputs : dizionario di input che usano coppie nome-valore al comando. La chiave è un nome per l'input all'interno del contesto del processo e il valore è il valore di input. Viene fatto riferimento agli input nell'oggetto command utilizzando l'espressione ${{inputs.<input_name>}} . Per altre informazioni, vedere Espressioni SDK e dell'interfaccia della riga di comando v2.
environment : l'ambiente necessario per eseguire lo script di training. In questo esempio viene usato un ambiente curato o pronto fornito da Azure Machine Learning denominato AzureML-sklearn-0.24-ubuntu18.04-py37-cpu. Per usare la @latest direttiva viene usata la versione più recente di questo ambiente. È anche possibile usare ambienti personalizzati specificando un'immagine Docker di base e specificando un yaml conda al suo posto.
Per inviare il processo, usare il comando seguente. L'ID di esecuzione (nome) del processo di training viene archiviato nella $run_id variabile :
run_id=$(az ml job create -f jobs/single-step/scikit-learn/iris/job.yml --query name -o tsv)
È possibile usare l'ID esecuzione archiviato per restituire informazioni sul processo. Il --web parametro apre l'interfaccia utente Web studio di Azure Machine Learning in cui è possibile esaminare i dettagli del processo:
az ml job show -n $run_id --web
Come parte dell'invio di processi, gli script di training e i dati devono essere caricati in un percorso di archiviazione cloud a cui l'area di lavoro di Azure Machine Learning può accedere.
Usare il comando seguente dell'interfaccia della riga di comando di Azure per caricare lo script di training. Il comando specifica la directory che contiene i file necessari per il training, non un singolo file. Se invece si vuole usare REST per caricare i dati, vedere il riferimento Put Blob :
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/scikit-learn/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
Creare un riferimento con controllo delle versioni ai dati di training. In questo esempio i dati sono già presenti nel cloud e si trovano in https://azuremlexamples.blob.core.windows.net/datasets/iris.csv. Per altre informazioni sul riferimento ai dati, vedere Dati in Azure Machine Learning:
Registrare un riferimento con controllo delle versioni allo script di training da usare con un processo. In questo esempio il percorso dello script è l'account di archiviazione predefinito e il contenitore caricati nel passaggio 1. L'ID del codice di training con controllo delle versioni viene restituito e archiviato nella $TRAIN_CODE variabile :
Creare l'ambiente che verrà usato dal cluster per eseguire lo script di training. In questo esempio viene usato un ambiente curato o pronto fornito da Azure Machine Learning denominato AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Il comando seguente recupera un elenco delle versioni dell'ambiente, con il più recente nella parte superiore della raccolta. jq viene usato per recuperare l'ID della versione più recente ([0]), che viene quindi archiviata nella $ENVIRONMENT variabile .
Infine, inviare il processo. L'esempio seguente illustra come inviare il processo, fare riferimento all'ID del codice di training, all'ID ambiente, all'URL per i dati di input e all'ID del cluster di calcolo. Il percorso di output del processo verrà archiviato nella $JOB_OUTPUT variabile :
Suggerimento
Il nome del processo deve essere univoco. In questo esempio viene uuidgen usato per generare un valore univoco per il nome.
Nota
Per usare il calcolo serverless, eliminare la \"computeId\": riga in questo codice.
La name proprietà restituita dal processo di training viene utilizzata come parte del percorso del modello.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
run_model = Model(
path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
name="run-model-example",
description="Model created from run.",
type=AssetTypes.MLFLOW_MODEL
)
ml_client.models.create_or_update(run_model)
Suggerimento
Il nome (archiviato nella $run_id variabile) viene usato come parte del percorso del modello.
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
Suggerimento
Il nome (archiviato nella $run_id variabile) viene usato come parte del percorso del modello.
Per altre informazioni sui comandi dell'interfaccia della riga di comando di Azure, sulle classi Python SDK o sulle API REST usate in questo articolo, vedere la documentazione di riferimento seguente: