CLI-kärnsyntax (v2) YAML
GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)
Varje Azure Machine Learning-entitet har en schematiserad YAML-representation. Du kan skapa en ny entitet från en YAML-konfigurationsfil med ett .yml
eller .yaml
ett tillägg.
Den här artikeln innehåller en översikt över grundläggande syntaxbegrepp som du kommer att stöta på när du konfigurerar dessa YAML-filer.
Referera till en Azure Machine Learning-entitet
Azure Machine Learning innehåller en referenssyntax (bestående av ett kortfattat och långt format) för att referera till en befintlig Azure Machine Learning-entitet när du konfigurerar en YAML-fil. Du kan till exempel referera till en befintlig registrerad miljö på din arbetsyta som ska användas som miljö för ett jobb.
Referera till en Azure Machine Learning-tillgång
Det finns två alternativ för att referera till en Azure Machine Learning-tillgång (miljöer, modeller, data och komponenter):
Referera till en explicit version av en tillgång:
- Kortfattad syntax:
azureml:<asset_name>:<asset_version>
- Longhand-syntax, som innehåller resurs-ID:t för Azure Resource Manager (ARM) för tillgången:
azureml:/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/environments/<environment-name>/versions/<environment-version>
- Kortfattad syntax:
Referera till den senaste versionen av en tillgång:
I vissa scenarier kanske du vill referera till den senaste versionen av en tillgång utan att uttryckligen behöva leta upp och ange själva versionssträngen. Den senaste versionen definieras som den senaste (kallas även senast) skapade versionen av en tillgång under ett givet namn.
Du kan referera till den senaste versionen med hjälp av följande syntax:
azureml:<asset_name>@latest
. Azure Machine Learning löser referensen till en explicit tillgångsversion på arbetsytan.
Referera till en Azure Machine Learning-resurs
Om du vill referera till en Azure Machine Learning-resurs (till exempel beräkning) kan du använda någon av följande syntaxer:
- Kortfattad syntax:
azureml:<resource_name>
- Longhand-syntax, som innehåller resursens ARM-resurs-ID:
azureml:/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/computes/<compute-name>
Referens-URI för Azure Machine Learning-data
Azure Machine Learning erbjuder ett URI-format för bekvämlighetsdatareferenser som pekar på data i en Azure-lagringstjänst. Detta kan användas för scenarier där du behöver ange en molnlagringsplats i YAML-filen, till exempel att skapa en Azure Machine Learning-modell från filer i lagring eller peka på data för att skicka som indata till ett jobb.
Om du vill använda det här data-URI-formatet måste den lagringstjänst som du vill referera till först registreras som ett datalager på din arbetsyta. Azure Machine Learning hanterar dataåtkomsten med de autentiseringsuppgifter som du angav när du skapade datalager.
Formatet består av ett datalager i den aktuella arbetsytan och sökvägen i datalagringen till den fil eller mapp som du vill peka på:
azureml://datastores/<datastore-name>/paths/<path-on-datastore>/
Till exempel:
azureml://datastores/workspaceblobstore/paths/example-data/
azureml://datastores/workspaceblobstore/paths/example-data/iris.csv
Utöver referens-URI för Azure Machine Learning-data stöder Azure Machine Learning även följande URI-protokoll för direkt lagring: https
, wasbs
, abfss
och adl
samt offentliga http
och https
URI:er.
Uttryckssyntax för att konfigurera Azure Machine Learning-jobb och -komponenter
v2-jobb- och komponent-YAML-filer tillåter användning av uttryck för att binda till kontexter för olika scenarier. Det viktiga användningsfallet är att använda ett uttryck för ett värde som kanske inte är känt vid tidpunkten för redigeringen av konfigurationen, men som måste lösas vid körning.
Använd följande syntax för att instruera Azure Machine Learning att utvärdera ett uttryck i stället för att behandla det som en sträng:
${{ <expression> }}
De scenarier som stöds beskrivs nedan.
Parametrisera command
med inputs
kontexterna och outputs
för ett jobb
Du kan ange literalvärden, URI-sökvägar och registrerade Azure Machine Learning-datatillgångar som indata till ett jobb. command
Kan sedan parametriseras med referenser till dessa indata med hjälp av syntaxen${{inputs.<input_name>}}
. Referenser till literalindata matchas med literalvärdet vid körning, medan referenser till dataindata matchas till nedladdningssökvägen eller monteringssökvägen (beroende på angiven mode
).
På samma sätt kan utdata till jobbet också refereras till i command
. För varje namngivet outputs
utdata som anges i ordlistan systemgenereras en utdataplats i standarddataarkivet där du kan skriva filer till. Utdataplatsen för varje namngiven utdata baseras på följande templaterade sökväg: <default-datastore>/azureml/<job-name>/<output_name>/
. Om du parameteriserar command
med syntaxen ${{outputs.<output_name>}}
matchas referensen till den systemgenererade sökvägen, så att skriptet kan skriva filer till den platsen från jobbet.
I exemplet nedan för en YAML-fil command
för kommandojobbet parametriseras den med två indata, en literalindata och en datainmatning och en utdata. Vid körningen matchas ${{inputs.learning_rate}}
uttrycket till 0.01
, och ${{inputs.iris}}
uttrycket matchas till filens nedladdningssökväg iris.csv
. ${{outputs.model_dir}}
matchar monteringssökvägen för den systemgenererade utdataplatsen som motsvarar model_dir
utdata.
$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:
Parameterisera command
med kontexten för search_space
ett svepjobb
Du kommer också att använda den här uttryckssyntaxen när du utför hyperparameterjustering via ett svepjobb, eftersom de faktiska värdena för hyperparametrar inte är kända under jobbredigeringstiden. När du kör ett svepjobb väljer Azure Machine Learning hyperparametervärden för varje utvärderingsversion baserat på search_space
. För att få åtkomst till dessa värden i träningsskriptet måste du skicka in dem via skriptets kommandoradsargument. Om du vill göra det använder du syntaxen ${{search_space.<hyperparameter>}}
trial.command
i .
I exemplet nedan för en YAML-fil för svepjobb matchas referenserna ${{search_space.learning_rate}}
och ${{search_space.boosting}}
i trial.command
till de faktiska hyperparametervärden som valts för varje utvärderingsversion när utvärderingsjobbet skickas för körning.
$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
Binda indata och utdata mellan steg i ett pipelinejobb
Uttryck används också för att binda indata och utdata mellan steg i ett pipelinejobb. Du kan till exempel binda indata för ett jobb (jobb B) i en pipeline till utdata från ett annat jobb (jobb A). Den här användningen signalerar till Azure Machine Learning beroendeflödet i pipelinediagrammet och jobb B körs efter jobb A, eftersom utdata från jobb A krävs som indata för jobb B.
För en YAML-fil för pipelinejobb utvärderas avsnitten inputs
och outputs
i varje underordnat jobb i den överordnade kontexten (pipelinejobbet på den översta nivån). Å command
andra sidan matchas den aktuella kontexten (det underordnade jobbet).
Det finns två sätt att binda indata och utdata i ett pipelinejobb:
Binda till toppnivåindata och utdata för pipelinejobbet
Du kan binda indata eller utdata för ett underordnat jobb (ett pipelinesteg) till indata/utdata för det överordnade pipelinejobbet på den översta nivån med hjälp av följande syntax: ${{parent.inputs.<input_name>}}
eller ${{parent.outputs.<output_name>}}
. Den här referensen matchar kontexten parent
, därav indata/utdata på den översta nivån.
I exemplet nedan är indata (raw_data
) för det första prep
steget bundna till pipelineindata på den översta nivån via ${{parent.inputs.input_data}}
. Utdata (model_dir
) för det sista train
steget är bundna till pipelinejobbet på den översta nivån via ${{parent.outputs.trained_model}}
.
Binda till indata och utdata för ett annat underordnat jobb (steg)
Om du vill binda indata/utdata från ett steg till indata/utdata i ett annat steg använder du följande syntax: ${{parent.jobs.<step_name>.inputs.<input_name>}}
eller ${{parent.jobs.<step_name>.outputs.<outputs_name>}}
. Återigen matchar den här referensen den överordnade kontexten, så uttrycket måste börja med parent.jobs.<step_name>
.
I exemplet nedan är indata () för train
steget bundna till utdata (clean_data
) för prep
steget via ${{parent.jobs.prep.outputs.clean_data}}
.training_data
Förberedda data från prep
steget används som träningsdata för train
steget.
Å andra sidan matchas kontextreferenserna i egenskaperna med den aktuella kontexten command
. Referensen ${{inputs.raw_data}}
prep
i steget command
matchar till exempel indata för den aktuella kontexten, som är det prep
underordnade jobbet. Sökningen görs på prep.inputs
, så en indata med namnet raw_data
måste definieras där.
$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
Parametrisera command
med kontexten inputs
och outputs
för en komponent
På samma sätt som command
för ett jobb command
kan för en komponent också parametriseras med referenser till kontexterna inputs
och outputs
. I det här fallet är referensen till komponentens indata och utdata. När komponenten körs i ett jobb löser Azure Machine Learning dessa referenser till de indata- och utdatavärden för jobbkörning som angetts för respektive komponentindata och utdata. Nedan visas ett exempel på hur du använder kontextsyntaxen för en YAML-specifikation för kommandokomponenten.
$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}}
Definiera valfria indata på kommandoraden
När indata anges som optional = true
måste du använda $[[]]
för att omfamna kommandoraden med indata. Till exempel $[[--input1 ${{inputs.input1}}]
. Kommandoraden vid körning kan ha olika indata.
- Om du bara använder de obligatoriska
training_data
parametrarna ochmodel_output
parametrarna ser kommandoraden ut så här:
python train.py --training_data some_input_path --learning_rate 0.01 --learning_rate_schedule time-based --model_output some_output_path
Om inget värde anges vid körning learning_rate
och learning_rate_schedule
använder standardvärdet.
- Om alla indata/utdata ger värden under körningen ser kommandoraden ut så här:
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
Utdatasökvägsuttryck
Följande uttryck kan användas i utdatasökvägen för jobbet:
Viktigt!
Följande uttryck matchas på serversidan , inte på klientsidan . För schemalagda jobb där jobbskapandetidenoch tiden för jobböverföring är olika löses uttrycken när jobbet skickas. Eftersom dessa uttryck matchas på serversidan använder de arbetsytans aktuella tillstånd, inte arbetsytans tillstånd när det schemalagda jobbet skapades. Om du till exempel ändrar standarddatalagringen för arbetsytan när du har skapat ett schemalagt jobb matchas uttrycket ${{default_datastore}}
till det nya standarddataarkivet, inte standarddatalagringen när det schemalagda jobbet skapades.
Uttryck | beskrivning | Definitionsområde |
---|---|---|
${{default_datastore}} |
Om standarddatalager för pipelinen har konfigurerats matchas det som standardnamn för pipelinedatalager. annars matchas som standardnamn för arbetsytans datalager. Standarddatalager för pipeline kan styras med hjälp av pipeline_job.settings.default_datastore . |
Fungerar för alla jobb. Pipelinejobb har ett konfigurerbart standarddatalager för pipeline. |
${{name}} |
Jobbnamnet. För pipelines är det stegets jobbnamn, inte namnet på pipelinejobbet. | Fungerar för alla jobb |
${{output_name}} |
Jobbets utdatanamn | Fungerar för alla jobb |
Om azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}
den till exempel används som utdatasökväg löses den vid körning som en sökväg till azureml://datastores/workspaceblobstore/paths/<job-name>/model_path
.