Syntaxe YAML core CLI (v2)

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

Každá entita Azure Machine Učení má reprezentaci YAML ve schématu. 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 Učení

Azure Machine Učení 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 Učení 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 azure Machine Učení

Existují dvě možnosti pro odkazování na prostředek azure Machine Učení (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>
    
  • 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 Učení přeloží odkaz na explicitní verzi prostředku v pracovním prostoru.

Odkaz na prostředek Azure Machine Učení

Pokud chcete odkazovat na prostředek Azure Machine Učení (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>

Identifikátor URI referenčních informací ke službě Azure Machine Učení

Azure Machine Učení nabízí formát identifikátoru URI pro přehlednost dat, který odkazuje 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 Učení 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 Učení 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ě identifikátoru URI odkazu na data Učení azure machine Učení podporuje také následující přímé protokoly URI úložiště: https, wasbs, abfssa , a adltaké veřejné http a https identifikátory URI.

Syntaxe výrazů pro konfiguraci úloh a komponent azure Machine Učení

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 Azure Machine Učení, aby výraz vyhodnotil, a nechoďte s ním jako s řetězcem:

${{ <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 zaregistrované datové prostředky Azure Machine Učení. 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 azure Machine Učení 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.01a ${{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 uklidení, azure machine Učení vybere hodnoty hyperparametrů pro každou zkušební verzi na search_spacezákladě hodnoty . 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 azure machine Učení tok závislostí grafu kanálu a úloha B se spustí po úloze A, protože výstup úlohy A se vyžaduje jako vstup pro úlohu B.

U souboru inputsoutputs YAML úlohy kanálu se vyhodnocují oddíly každé podřízené úlohy v nadřazeným kontextu (úloha kanálu nejvyšší úrovně). Na commanddruhé 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ž je komponenta spuštěná v úloze, azure machine Učení tyto odkazy přeloží na vstupní a výstupní hodnoty modulu runtime úlohy 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
version: 9
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.0/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 a model_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.

Další kroky