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 l'apprendimento automatico: 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 seguire la procedura descritta nell'articolo Creare risorse per iniziare.
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. Connettersi 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, occorrono i parametri identificatore, ovvero una sottoscrizione, un gruppo di risorse e un nome dell’area di lavoro. Questi dettagli verranno usati in MLClient dallo spazio dei nomi azure.ai.ml per 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 i 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 definire 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 i segnaposto $SUBSCRIPTION_ID, $RESOURCE_GROUP, $LOCATION e $WORKSPACE. Sostituire i segnaposto con i valori desiderati come segue:
$SUBSCRIPTION_ID: ID sottoscrizione di Azure.
$RESOURCE_GROUP: il gruppo di risorse di Azure che contiene l'area di lavoro.
$LOCATION: l'area di Azure in cui si trova l'area di lavoro.
$WORKSPACE: il nome dell'area di lavoro di Azure Machine Learning.
$COMPUTE_NAME: il nome del cluster di elaborazione di Azure Machine Learning.
REST amministrativo richiede un token di autenticazione dell'entità servizio. È possibile recuperare un token con il seguente comando. Il token viene archiviato nella variabile di ambiente $TOKEN:
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 adattarla a 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 le salva in variabili in modo da poterle usare in un secondo momento:
Un cluster di elaborazione 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 lo script Python main.py situato in ./sdk/python/jobs/single-step/lightgbm/iris/src/. Il comando verrà eseguito inviandolo come job ad 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 sono stati configurati:
code: percorso in cui si trova il codice per l’esecuzione del comando
command: comando che deve essere eseguito
environment : ambiente necessario per eseguire lo script del training. In questo esempio viene usato un ambiente curato o pronto fornito da Azure Machine Learning e denominato AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Viene usata la versione più recente di questo ambiente usando la direttiva @latest. È anche possibile usare ambienti personalizzati specificando un'immagine Docker di base assieme a un yaml Conda.
inputs : dizionario di input con coppie nome-valore per il comando. La chiave è un nome per l'input nel contesto del processo e il valore è il valore di input. Agli input viene fatto riferimento in command usando l'espressione ${{inputs.<input_name>}}. Per usare file o cartelle come input, è possibile usare la classe Input. Per altre informazioni, vedere Espressioni SDK e dell'interfaccia della riga di comando v2.
Quando si invia il processo, viene restituito un URL allo stato del processo in studio di Azure Machine Learning. Usare l'interfaccia utente di Studio per visualizzare lo stato di avanzamento del processo. È anche possibile usare returned_job.status per verificare lo stato corrente del processo.
Il comando az ml job create 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 l’esecuzione del comando
command: comando che deve essere eseguito
inputs : dizionario di input con coppie nome-valore per il comando. La chiave è un nome per l'input nel contesto del processo e il valore è il valore di input. Agli input viene fatto riferimento in command usando l'espressione ${{inputs.<input_name>}}. Per altre informazioni, vedere Espressioni SDK e dell'interfaccia della riga di comando v2.
environment : ambiente necessario per eseguire lo script del training. In questo esempio viene usato un ambiente curato o pronto fornito da Azure Machine Learning e denominato AzureML-sklearn-0.24-ubuntu18.04-py37-cpu. Viene usata la versione più recente di questo ambiente usando la direttiva @latest. È anche possibile usare ambienti personalizzati specificando un'immagine Docker di base assieme a un yaml Conda.
Per inviare il processo, usare il comando seguente. L'ID di esecuzione (nome) del processo di training viene archiviato nella variabile $run_id:
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 parametro --web apre l'interfaccia utente Web dello 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 nel 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 sono 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 variabile $TRAIN_CODE:
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 e denominato AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Il comando seguente recupera un elenco delle versioni dell'ambiente, ordinate dalla più recente alla meno recente. jq viene usato per recuperare l'ID della versione più recente ([0]), che viene quindi archiviata nella variabile $ENVIRONMENT.
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 elaborazione. Il percorso di output del processo verrà archiviato nella variabile $JOB_OUTPUT:
Suggerimento
Il nome del processo deve essere univoco. In questo esempio, viene usato uuidgen per generare un valore univoco per il nome.
Nota
Per usare il calcolo serverless, eliminare la riga \"computeId\": in questo codice.
La proprietà name 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 variabile $run_id) 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 variabile $run_id) 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: