Sintassi YAML principale dell'interfaccia della riga di comando (v2)
SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Ogni entità di Azure Machine Learning ha una rappresentazione YAML schematizzata. È possibile creare una nuova entità da un file di configurazione YAML con un'estensione .yml
o .yaml
.
Questo articolo offre una panoramica dei concetti di sintassi di base che verranno riscontrati durante la configurazione di questi file YAML.
Riferimento a un'entità di Azure Machine Learning
Azure Machine Learning fornisce una sintassi di riferimento (costituita da un formato abbreviato e longhand) per fare riferimento a un'entità di Azure Machine Learning esistente durante la configurazione di un file YAML. Ad esempio, è possibile fare riferimento a un ambiente registrato esistente nell'area di lavoro da usare come ambiente per un processo.
Riferimento a un asset di Azure Machine Learning
Sono disponibili due opzioni per fare riferimento a un asset di Azure Machine Learning (ambienti, modelli, dati e componenti):
Fare riferimento a una versione esplicita di un asset:
- Sintassi abbreviata:
azureml:<asset_name>:<asset_version>
- Sintassi longhand, che include l'ID risorsa di Azure Resource Manager (ARM) dell'asset:
azureml:/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/environments/<environment-name>/versions/<environment-version>
- Sintassi abbreviata:
Fare riferimento alla versione più recente di un asset:
In alcuni scenari è possibile fare riferimento alla versione più recente di un asset senza dover cercare in modo esplicito e specificare la stringa di versione effettiva stessa. La versione più recente è definita come la versione più recente (nota anche come più recente) creata di un asset con un determinato nome.
È possibile fare riferimento alla versione più recente usando la sintassi seguente:
azureml:<asset_name>@latest
. Azure Machine Learning risolverà il riferimento a una versione esplicita dell'asset nell'area di lavoro.
Fare riferimento a una risorsa di Azure Machine Learning
Per fare riferimento a una risorsa di Azure Machine Learning, ad esempio calcolo, è possibile usare una delle sintassi seguenti:
- Sintassi abbreviata:
azureml:<resource_name>
- Sintassi longhand, che include l'ID risorsa ARM della risorsa:
azureml:/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/computes/<compute-name>
URI di riferimento ai dati di Azure Machine Learning
Azure Machine Learning offre un formato URI di riferimento ai dati pratico per puntare ai dati in un servizio di archiviazione di Azure. Può essere usato per gli scenari in cui è necessario specificare un percorso di archiviazione cloud nel file YAML, ad esempio la creazione di un modello di Azure Machine Learning da file nell'archiviazione o il puntamento ai dati da passare come input a un processo.
Per usare questo formato URI dati, il servizio di archiviazione a cui si vuole fare riferimento deve prima essere registrato come archivio dati nell'area di lavoro. Azure Machine Learning gestirà l'accesso ai dati usando le credenziali specificate durante la creazione dell'archivio dati.
Il formato è costituito da un archivio dati nell'area di lavoro corrente e dal percorso dell'archivio dati al file o alla cartella a cui si vuole puntare:
azureml://datastores/<datastore-name>/paths/<path-on-datastore>/
Ad esempio:
azureml://datastores/workspaceblobstore/paths/example-data/
azureml://datastores/workspaceblobstore/paths/example-data/iris.csv
Oltre all'URI di riferimento ai dati di Azure Machine Learning, Azure Machine Learning supporta anche i protocolli URI di archiviazione diretta seguenti: , , e adl
, nonché URI pubblici http
e https
. abfss
wasbs
https
Sintassi delle espressioni per la configurazione di processi e componenti di Azure Machine Learning
I file YAML del processo e del componente v2 consentono l'uso di espressioni da associare ai contesti per scenari diversi. Il caso d'uso essenziale usa un'espressione per un valore che potrebbe non essere noto al momento della creazione della configurazione, ma deve essere risolto in fase di esecuzione.
Usare la sintassi seguente per indicare ad Azure Machine Learning di valutare un'espressione anziché considerarla come stringa:
${{ <expression> }}
Di seguito sono descritti gli scenari supportati.
Parametrizzazione di command
con i inputs
contesti e outputs
di un processo
È possibile specificare valori letterali, percorsi URI e asset di dati registrati di Azure Machine Learning come input per un processo. Può command
quindi essere parametrizzato con riferimenti a tali input usando la ${{inputs.<input_name>}}
sintassi . I riferimenti agli input letterali verranno risolti nel valore letterale in fase di esecuzione, mentre i riferimenti agli input di dati verranno risolti nel percorso di download o nel percorso di montaggio (a seconda dell'oggetto mode
specificato).
Analogamente, è anche possibile fare riferimento agli output al processo in command
. Per ogni output denominato specificato nel outputs
dizionario, Azure Machine Learning genererà un percorso di output nell'archivio dati predefinito in cui è possibile scrivere file. Il percorso di output per ogni output denominato si basa sul percorso templatizzato seguente: <default-datastore>/azureml/<job-name>/<output_name>/
. La parametrizzazione di command
con la ${{outputs.<output_name>}}
sintassi risolverà il riferimento al percorso generato dal sistema, in modo che lo script possa scrivere file in tale posizione dal processo.
Nell'esempio seguente per un file YAML del processo di comando, command
viene parametrizzato con due input, un input letterale e un input di dati e un output. In fase di esecuzione, l'espressione ${{inputs.learning_rate}}
verrà risolta in 0.01
e l'espressione ${{inputs.iris}}
verrà risolta nel percorso di download del iris.csv
file. ${{outputs.model_dir}}
verrà risolto nel percorso di montaggio del percorso di output generato dal sistema corrispondente all'output model_dir
.
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: ./src
command: python train.py --lr ${{inputs.learning_rate}} --training-data ${{inputs.iris}} --model-dir ${{outputs.model_dir}}
environment: azureml:AzureML-Minimal@latest
compute: azureml:cpu-cluster
inputs:
learning_rate: 0.01
iris:
type: uri_file
path: https://azuremlexamples.blob.core.windows.net/datasets/iris.csv
mode: download
outputs:
model_dir:
Parametrizzazione di command
con il search_space
contesto di un processo sweep
Questa sintassi di espressione verrà usata anche quando si esegue l'ottimizzazione degli iperparametri tramite un processo sweep, poiché i valori effettivi degli iperparametri non sono noti durante il tempo di creazione del processo. Quando si esegue un processo sweep, Azure Machine Learning selezionerà i valori degli iperparametri per ogni versione di valutazione in base a search_space
. Per accedere a tali valori nello script di training, è necessario passarli tramite gli argomenti della riga di comando dello script. A tale scopo, usare la ${{search_space.<hyperparameter>}}
sintassi in trial.command
.
Nell'esempio seguente per un file YAML del processo sweep, i ${{search_space.learning_rate}}
riferimenti e ${{search_space.boosting}}
in trial.command
risolveranno i valori degli iperparametri effettivi selezionati per ogni versione di valutazione quando il processo di valutazione viene inviato per l'esecuzione.
$schema: https://azuremlschemas.azureedge.net/latest/sweepJob.schema.json
type: sweep
sampling_algorithm:
type: random
search_space:
learning_rate:
type: uniform
min_value: 0.01
max_value: 0.9
boosting:
type: choice
values: ["gbdt", "dart"]
objective:
goal: minimize
primary_metric: test-multi_logloss
trial:
code: ./src
command: >-
python train.py
--training-data ${{inputs.iris}}
--lr ${{search_space.learning_rate}}
--boosting ${{search_space.boosting}}
environment: azureml:AzureML-Minimal@latest
inputs:
iris:
type: uri_file
path: https://azuremlexamples.blob.core.windows.net/datasets/iris.csv
mode: download
compute: azureml:cpu-cluster
Associazione di input e output tra i passaggi in un processo della pipeline
Le espressioni vengono usate anche per l'associazione di input e output tra i passaggi in un processo della pipeline. Ad esempio, è possibile associare l'input di un processo (processo B) in una pipeline all'output di un altro processo (processo A). Questo utilizzo segnalerà ad Azure Machine Learning il flusso di dipendenza del grafico della pipeline e il processo B verrà eseguito dopo il processo A, perché l'output del processo A è necessario come input per il processo B.
Per un file YAML del processo della pipeline, le inputs
sezioni e outputs
di ogni processo figlio vengono valutate all'interno del contesto padre (processo della pipeline di primo livello). L'oggetto command
, invece, verrà risolto nel contesto corrente (il processo figlio).
Esistono due modi per associare input e output in un processo della pipeline:
Eseguire il binding agli input e agli output di primo livello del processo della pipeline
È possibile associare gli input o gli output di un processo figlio (un passaggio della pipeline) agli input/output del processo della pipeline padre di primo livello usando la sintassi seguente: ${{parent.inputs.<input_name>}}
o ${{parent.outputs.<output_name>}}
. Questo riferimento viene risolto nel parent
contesto, quindi gli input/output di primo livello.
Nell'esempio seguente, l'input (raw_data
) del primo prep
passaggio è associato all'input della pipeline di primo livello tramite ${{parent.inputs.input_data}}
. L'output (model_dir
) del passaggio finale train
è associato all'output del processo della pipeline di primo livello tramite ${{parent.outputs.trained_model}}
.
Eseguire il binding agli input e agli output di un altro processo figlio (passaggio)
Per associare gli input/output di un passaggio agli input/output di un altro passaggio, usare la sintassi seguente: ${{parent.jobs.<step_name>.inputs.<input_name>}}
o ${{parent.jobs.<step_name>.outputs.<outputs_name>}}
. Anche in questo caso, questo riferimento viene risolto nel contesto padre, quindi l'espressione deve iniziare con parent.jobs.<step_name>
.
Nell'esempio seguente l'input (training_data
) del train
passaggio viene associato all'output (clean_data
) del prep
passaggio tramite ${{parent.jobs.prep.outputs.clean_data}}
. I dati preparati del prep
passaggio verranno usati come dati di training per il train
passaggio.
D'altra parte, i riferimenti di contesto all'interno delle command
proprietà verranno risolti nel contesto corrente. Ad esempio, il ${{inputs.raw_data}}
riferimento nel prep
passaggio command
verrà risolto negli input del contesto corrente, ovvero il prep
processo figlio. La ricerca verrà eseguita in prep.inputs
, quindi è necessario definire un input denominato raw_data
in tale posizione.
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
inputs:
input_data:
type: uri_folder
path: https://azuremlexamples.blob.core.windows.net/datasets/cifar10/
outputs:
trained_model:
jobs:
prep:
type: command
inputs:
raw_data: ${{parent.inputs.input_data}}
outputs:
clean_data:
code: src/prep
environment: azureml:AzureML-Minimal@latest
command: >-
python prep.py
--raw-data ${{inputs.raw_data}}
--prep-data ${{outputs.clean_data}}
compute: azureml:cpu-cluster
train:
type: command
inputs:
training_data: ${{parent.jobs.prep.outputs.clean_data}}
num_epochs: 1000
outputs:
model_dir: ${{parent.outputs.trained_model}}
code: src/train
environment: azureml:AzureML-Minimal@latest
command: >-
python train.py
--epochs ${{inputs.num_epochs}}
--training-data ${{inputs.training_data}}
--model-output ${{outputs.model_dir}}
compute: azureml:gpu-cluster
Parametrizzazione di command
con i inputs
contesti e outputs
di un componente
Analogamente a per un processo, l'oggetto command
command
per un componente può anche essere parametrizzato con riferimenti ai inputs
contesti e outputs
. In questo caso, il riferimento è agli input e agli output del componente. Quando il componente viene eseguito in un processo, Azure Machine Learning risolverà tali riferimenti ai valori di input e output del runtime del processo specificati per i rispettivi input e output dei componenti. Di seguito è riportato un esempio di utilizzo della sintassi di contesto per una specifica YAML del componente di comando.
$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
name: train_data_component_cli
display_name: train_data
description: A example train component
tags:
author: azureml-sdk-team
type: command
inputs:
training_data:
type: uri_folder
max_epocs:
type: integer
optional: true
learning_rate:
type: number
default: 0.01
optional: true
learning_rate_schedule:
type: string
default: time-based
optional: true
outputs:
model_output:
type: uri_folder
code: ./train_src
environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
command: >-
python train.py
--training_data ${{inputs.training_data}}
$[[--max_epocs ${{inputs.max_epocs}}]]
$[[--learning_rate ${{inputs.learning_rate}}]]
$[[--learning_rate_schedule ${{inputs.learning_rate_schedule}}]]
--model_output ${{outputs.model_output}}
Definire input facoltativi nella riga di comando
Quando l'input viene impostato come optional = true
, è necessario usare $[[]]
per adottare la riga di comando con gli input. Ad esempio, $[[--input1 ${{inputs.input1}}]
. La riga di comando in fase di esecuzione può avere input diversi.
- Se si usano solo i parametri e
model_output
obbligatoritraining_data
, la riga di comando sarà simile alla seguente:
python train.py --training_data some_input_path --learning_rate 0.01 --learning_rate_schedule time-based --model_output some_output_path
Se non viene specificato alcun valore in fase di esecuzione learning_rate
e learning_rate_schedule
userà il valore predefinito.
- Se tutti gli input/output forniscono valori durante il runtime, la riga di comando sarà simile alla seguente:
python train.py --training_data some_input_path --max_epocs 10 --learning_rate 0.01 --learning_rate_schedule time-based --model_output some_output_path
Espressioni di percorso di output
Le espressioni seguenti possono essere usate nel percorso di output del processo:
Importante
Le espressioni seguenti vengono risolte sul lato server, non sul lato client. Per i processi pianificati in cui l'ora di creazione del processo e l'ora di invio del processo sono diverse, le espressioni vengono risolte quando viene inviato il processo. Poiché queste espressioni vengono risolte sul lato server, usano lo stato corrente dell'area di lavoro, non lo stato dell'area di lavoro al momento della creazione del processo pianificato. Ad esempio, se si modifica l'archivio dati predefinito dell'area di lavoro dopo aver creato un processo pianificato, l'espressione ${{default_datastore}}
viene risolta nel nuovo archivio dati predefinito, non nell'archivio dati predefinito al momento della creazione del processo pianificato.
Expression | Descrizione | Scope |
---|---|---|
${{default_datastore}} |
Se l'archivio dati predefinito della pipeline è configurato, viene risolto come nome predefinito dell'archivio dati della pipeline; in caso contrario, viene risolto come nome predefinito dell'archivio dati dell'area di lavoro. L'archivio dati predefinito della pipeline può essere controllato tramite pipeline_job.settings.default_datastore . |
Funziona per tutti i processi. I processi della pipeline hanno un archivio dati predefinito della pipeline configurabile. |
${{name}} |
Nome processo. Per le pipeline, si tratta del nome del processo del passaggio, non del nome del processo della pipeline. | Funziona per tutti i processi |
${{output_name}} |
Nome dell'output del processo | Funziona per tutti i processi |
Ad esempio, se azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}
viene usato come percorso di output, in fase di esecuzione viene risolto come percorso di azureml://datastores/workspaceblobstore/paths/<job-name>/model_path
.