Syntaxe YAML core CLI (v2)
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
Každá entita Azure Machine Learning má reprezentaci YAML s schématem. Novou entitu můžete vytvořit z konfiguračního souboru YAML s příponou nebo .yaml
příponou.yml
.
Tento článek obsahuje přehled základních konceptů syntaxe, se kterými se setkáte při konfiguraci těchto souborů YAML.
Odkazování na entitu Azure Machine Learning
Azure Machine Learning poskytuje referenční syntaxi (skládající se z zkráceného a dlouhého formátu) pro odkazování na existující entitu Azure Machine Learning při konfiguraci souboru YAML. Můžete například odkazovat na existující zaregistrované prostředí ve vašem pracovním prostoru, které se použije jako prostředí pro úlohu.
Odkazování na prostředek Služby Azure Machine Learning
Existují dvě možnosti pro odkazování na prostředek služby Azure Machine Learning (prostředí, modely, data a komponenty):
Odkazování na explicitní verzi prostředku:
- Syntaxe zkratky:
azureml:<asset_name>:<asset_version>
- Dlouhá syntaxe, která zahrnuje ID prostředku Azure Resource Manageru (ARM):
azureml:/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/environments/<environment-name>/versions/<environment-version>
- Syntaxe zkratky:
Odkaz na nejnovější verzi prostředku:
V některých scénářích můžete chtít odkazovat na nejnovější verzi prostředku, aniž byste museli explicitně vyhledat a zadat samotný řetězec skutečné verze. Nejnovější verze je definovaná jako nejnovější (označovaná také jako nejnovější) vytvořená verze prostředku pod daným názvem.
Nejnovější verzi můžete odkazovat pomocí následující syntaxe:
azureml:<asset_name>@latest
. Azure Machine Learning přeloží odkaz na explicitní verzi assetu v pracovním prostoru.
Odkaz na prostředek Azure Machine Learning
Pokud chcete odkazovat na prostředek Služby Azure Machine Learning (například výpočetní prostředky), můžete použít některou z následujících syntaxí:
- Syntaxe zkratky:
azureml:<resource_name>
- Syntaxe longhand, která zahrnuje ID prostředku ARM prostředku:
azureml:/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/computes/<compute-name>
Referenční identifikátor URI pro data služby Azure Machine Learning
Azure Machine Learning nabízí formát identifikátoru URI referenčního přehledu dat pro odkazování na data ve službě úložiště Azure. To se dá použít ve scénářích, ve kterých potřebujete zadat umístění cloudového úložiště v souboru YAML, například vytvoření modelu Azure Machine Learning ze souborů v úložišti nebo odkazování na data, která se mají předat jako vstup do úlohy.
Chcete-li použít tento formát identifikátoru URI dat, musí být služba úložiště, na kterou chcete odkazovat, nejprve zaregistrována jako úložiště dat ve vašem pracovním prostoru. Azure Machine Learning bude zpracovávat přístup k datům pomocí přihlašovacích údajů, které jste zadali při vytváření úložiště dat.
Formát se skládá z úložiště dat v aktuálním pracovním prostoru a cesty k úložišti dat k souboru nebo složce, na kterou chcete odkazovat:
azureml://datastores/<datastore-name>/paths/<path-on-datastore>/
Příklad:
azureml://datastores/workspaceblobstore/paths/example-data/
azureml://datastores/workspaceblobstore/paths/example-data/iris.csv
Kromě referenčního identifikátoru URI pro data služby Azure Machine Learning podporuje azure Machine Learning také následující protokoly URI přímého úložiště: https
, wasbs
, abfss
a , a také veřejné http
a https
adl
identifikátory URI.
Syntaxe výrazů pro konfiguraci úloh a komponent služby Azure Machine Learning
Soubory YAML úloh a komponent v2 umožňují použití výrazů k vytvoření vazby na kontexty pro různé scénáře. Základní případ použití používá výraz pro hodnotu, která nemusí být známa v době vytváření konfigurace, ale musí být vyřešena za běhu.
Pomocí následující syntaxe řekněte službě Azure Machine Learning, aby vyhodnotil výraz, a ne jako řetězec:
${{ <expression> }}
Podporované scénáře jsou popsané níže.
Parametrizace command
pomocí inputs
kontextu outputs
úlohy
Jako vstupy do úlohy můžete zadat hodnoty literálů, cesty identifikátorů URI a registrované datové prostředky služby Azure Machine Learning. Potom command
lze parametrizovat pomocí odkazů na tyto vstupy pomocí ${{inputs.<input_name>}}
syntaxe. Odkazy na literální vstupy se přeloží na literálovou hodnotu za běhu, zatímco odkazy na vstupy dat se přeloží na cestu ke stažení nebo cestu připojení (v závislosti na zadaném mode
nastavení).
Podobně lze na výstupy úlohy odkazovat také v sadě command
. Pro každý pojmenovaný výstup zadaný ve slovníku outputs
služba Azure Machine Learning vygeneruje výstupní umístění ve výchozím úložišti dat, do kterého můžete zapisovat soubory. Umístění výstupu pro každý pojmenovaný výstup je založeno na následující cestě templatized: <default-datastore>/azureml/<job-name>/<output_name>/
. Parametrizace command
pomocí ${{outputs.<output_name>}}
syntaxe přeloží odkaz na cestu vygenerovanou systémem, aby skript mohl zapisovat soubory do daného umístění z úlohy.
V následujícím příkladu pro soubor command
YAML úlohy příkazu je parametrizován se dvěma vstupy, literálovým vstupem a vstupem dat a jedním výstupem. Za běhu se ${{inputs.learning_rate}}
výraz přeloží na 0.01
a ${{inputs.iris}}
výraz se přeloží na cestu iris.csv
ke stažení souboru. ${{outputs.model_dir}}
přeloží se na cestu připojení systémem generovaného výstupního umístění odpovídající výstupu 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:
Parametrizace command
s search_space
kontextem úlohy uklidit
Tuto syntaxi výrazu použijete také při provádění ladění hyperparametrů prostřednictvím úlohy uklidit, protože skutečné hodnoty hyperparametrů nejsou během vytváření úloh známé. Když spustíte úlohu úklidu, Azure Machine Learning vybere hodnoty hyperparametrů pro každou zkušební verzi na základě hodnoty search_space
. Pokud chcete získat přístup k těmto hodnotám v trénovacím skriptu, musíte je předat pomocí argumentů příkazového řádku skriptu. Uděláte to tak, že použijete syntaxi ${{search_space.<hyperparameter>}}
v objektu trial.command
.
V následujícím příkladu pro soubor ${{search_space.learning_rate}}
YAML úlohy uklidit se hodnoty a ${{search_space.boosting}}
odkazy trial.command
přeloží na skutečné hodnoty hyperparametrů vybrané pro každou zkušební verzi při odeslání úlohy zkušební verze ke spuštění.
$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
Vazby vstupů a výstupů mezi kroky v úloze kanálu
Výrazy se také používají pro vazby vstupů a výstupů mezi kroky v úloze kanálu. Můžete například svázat vstup jedné úlohy (úlohy B) v kanálu s výstupem jiné úlohy (úloha A). Toto použití bude signalizovat tok závislostí v grafu kanálu Azure Machine Learning a úloha B se spustí po úloze A, protože výstup úlohy A se vyžaduje jako vstup pro úlohu B.
U souboru inputs
outputs
YAML úlohy kanálu se vyhodnocují oddíly každé podřízené úlohy v nadřazeným kontextu (úloha kanálu nejvyšší úrovně). Na command
druhé straně se přeloží na aktuální kontext (podřízenou úlohu).
Vstupy a výstupy v úloze kanálu lze svázat dvěma způsoby:
Vazba na vstupy nejvyšší úrovně a výstupy úlohy kanálu
Vstupy nebo výstupy podřízené úlohy (krok kanálu) můžete svázat se vstupy a výstupy nadřazené úlohy kanálu nejvyšší úrovně pomocí následující syntaxe: ${{parent.inputs.<input_name>}}
nebo ${{parent.outputs.<output_name>}}
. Tento odkaz se překládá na parent
kontext, a proto vstupy a výstupy nejvyšší úrovně.
V následujícím příkladu je vstup (raw_data
) prvního prep
kroku vázán na vstup kanálu nejvyšší úrovně prostřednictvím ${{parent.inputs.input_data}}
. Výstup (model_dir
) posledního train
kroku je vázán na výstup úlohy kanálu nejvyšší úrovně prostřednictvím ${{parent.outputs.trained_model}}
.
Vytvoření vazby na vstupy a výstupy jiné podřízené úlohy (krok)
Chcete-li svázat vstupy/výstupy jednoho kroku se vstupy/výstupy jiného kroku, použijte následující syntaxi: ${{parent.jobs.<step_name>.inputs.<input_name>}}
nebo ${{parent.jobs.<step_name>.outputs.<outputs_name>}}
. Tento odkaz se znovu přeloží na nadřazený kontext, takže výraz musí začínat parent.jobs.<step_name>
na .
V následujícím příkladu je vstup (training_data
) train
kroku vázán na výstup (clean_data
) prep
kroku přes ${{parent.jobs.prep.outputs.clean_data}}
. Připravená data z prep
kroku se použijí jako trénovací data pro train
tento krok.
Na druhou stranu se kontextové odkazy v rámci command
vlastností přeloží na aktuální kontext. Odkaz v prep
kroku command
se například ${{inputs.raw_data}}
přeloží na vstupy aktuálního kontextu, což je prep
podřízená úloha. Vyhledávání bude provedeno na prep.inputs
, takže vstup s názvem raw_data
musí být definován tam.
$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
Parametrizace command
pomocí inputs
a outputs
kontextů komponenty
command
Podobně jako u úlohy může být komponenta command
také parametrizována s odkazy na inputs
kontexty a outputs
kontexty. V tomto případě je odkaz na vstupy a výstupy komponenty. Když se komponenta spustí v úloze, Azure Machine Learning tyto odkazy přeloží na vstup modulu runtime úlohy a výstupní hodnoty zadané pro příslušné vstupy a výstupy komponent. Níže je příklad použití syntaxe kontextu pro specifikaci YAML komponenty příkazu.
$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}}
Definování volitelných vstupů v příkazovém řádku
Když je vstup nastavený jako optional = true
, musíte použít $[[]]
k přijetí příkazového řádku se vstupy. Příklad: $[[--input1 ${{inputs.input1}}]
. Příkazový řádek za běhu může mít různé vstupy.
- Pokud používáte jenom požadované
training_data
parametry amodel_output
parametry, bude příkazový řádek vypadat takto:
python train.py --training_data some_input_path --learning_rate 0.01 --learning_rate_schedule time-based --model_output some_output_path
Pokud není za běhu learning_rate
zadána žádná hodnota a learning_rate_schedule
použije výchozí hodnotu.
- Pokud všechny vstupy a výstupy poskytují hodnoty za běhu, bude příkazový řádek vypadat takto:
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
Výrazy výstupní cesty
Ve výstupní cestě úlohy je možné použít následující výrazy:
Důležité
Následující výrazy se přeloží na straně serveru , ne na straně klienta . U naplánovaných úloh, kde se liší čas vytvoření úlohy a čas odeslání úlohy, se výrazy přeloží při odeslání úlohy. Vzhledem k tomu, že se tyto výrazy přeloží na straně serveru, používají aktuální stav pracovního prostoru, nikoli stav pracovního prostoru při vytvoření naplánované úlohy. Pokud například po vytvoření naplánované úlohy změníte výchozí úložiště dat pracovního prostoru, výraz ${{default_datastore}}
se přeloží na nové výchozí úložiště dat, nikoli na výchozí úložiště dat při vytvoření naplánované úlohy.
Expression | Popis | Obor |
---|---|---|
${{default_datastore}} |
Pokud je nakonfigurované výchozí úložiště dat kanálu, přeloží se jako výchozí název úložiště dat kanálu. jinak se přeloží jako výchozí název úložiště dat pracovního prostoru. Výchozí úložiště dat kanálu lze řídit pomocí pipeline_job.settings.default_datastore . |
Funguje pro všechny úlohy. Úlohy kanálu mají konfigurovatelné výchozí úložiště dat kanálu. |
${{name}} |
Název úlohy. U kanálů se jedná o název úlohy kroku, nikoli název úlohy kanálu. | Funguje pro všechny úlohy |
${{output_name}} |
Název výstupu úlohy | Funguje pro všechny úlohy |
Pokud azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}
se například používá jako výstupní cesta, za běhu se přeloží jako cesta azureml://datastores/workspaceblobstore/paths/<job-name>/model_path
.