Správa vstupů a výstupů komponent a kanálu
V tomto článku se dozvíte:
- Přehled vstupů a výstupů v komponentách a kanálech
- Jak zvýšit úroveň vstupů a výstupů komponent na vstupy a výstupy kanálu
- Jak definovat volitelné vstupy
- Jak přizpůsobit cestu výstupu
- Stažení výstupů
- Postup registrace výstupů jako pojmenovaného prostředku
Přehled vstupů a výstupů
Kanály Azure Machine Učení podporují vstupy a výstupy na úrovni komponent i kanálů.
Na úrovni komponenty definují vstupy a výstupy rozhraní komponenty. Výstup jedné komponenty lze použít jako vstup pro jinou komponentu ve stejném nadřazeném kanálu, což umožňuje předávání dat nebo modelů mezi komponentami. Toto propojení tvoří graf, který znázorňuje tok dat v rámci kanálu.
Na úrovni kanálu jsou vstupy a výstupy užitečné pro odesílání úloh kanálu s různými datovými vstupy nebo parametry, které řídí logiku trénování (například learning_rate
). Jsou zvlášť užitečné při vyvolání kanálu prostřednictvím koncového bodu REST. Tyto vstupy a výstupy umožňují přiřadit ke vstupu kanálu různé hodnoty nebo přistupovat k výstupu úloh kanálu prostřednictvím koncového bodu REST. Další informace najdete v tématu Vytváření úloh a vstupních dat pro koncový bod batch.
Typy vstupů a výstupů
Následující typy jsou podporovány jako výstupy komponenty nebo kanálu.
Datové typy. Další informace o datových typech najdete ve službě Azure Machine Učení.
uri_file
uri_folder
mltable
Typy modelů.
mlflow_model
custom_model
Použití výstupu dat nebo modelu v podstatě serializuje výstupy a uloží je jako soubory do umístění úložiště. V dalších krocích je možné toto umístění úložiště připojit, stáhnout nebo nahrát do cílového systému souborů výpočetního objektu a povolit dalšímu kroku přístup k souborům během provádění úlohy.
Tento proces vyžaduje, aby zdrojový kód komponenty serializoval požadovaný výstupní objekt – obvykle uložený v paměti – do souborů. Můžete například serializovat datový rámec pandas jako soubor CSV. Všimněte si, že Azure Machine Učení nedefinuje žádné standardizované metody pro serializaci objektů. Jako uživatel máte možnost zvolit preferovanou metodu serializace objektů do souborů. Potom můžete v podřízené komponentě nezávisle deserializovat a číst tyto soubory. Tady je několik příkladů pro referenci:
- V nyc_taxi_data_regression příkladu má
uri_folder
komponenta prep výstup typu. Ve zdrojovém kódu komponenty načte soubory CSV ze vstupní složky, zpracuje soubory a zapisuje zpracované soubory CSV do výstupní složky. - V nyc_taxi_data_regression příkladu má
mlflow_model
komponenta train výstup typu. Ve zdrojovém kódu komponenty uloží trénovaný model pomocímlflow.sklearn.save_model
metody.
Kromě výše uvedených typů dat nebo modelů mohou vstupy kanálů nebo komponent být také následující primitivní typy.
string
number
integer
boolean
V nyc_taxi_data_regression příkladu má number
komponenta trénu vstup s názvem test_split_ratio
.
Poznámka:
Výstup primitivních typů není podporován.
Cesta a režim pro vstupy a výstupy dat
Pro vstup a výstup datového assetu je nutné zadat path
parametr, který odkazuje na umístění dat. Tato tabulka ukazuje různá umístění dat, která kanál Azure Machine Učení podporuje, a také ukazuje příklady parametrů cesty:
Umístění | Příklady | Vstup | Výstup |
---|---|---|---|
Cesta na místním počítači | ./home/username/data/my_data |
✓ | |
Cesta na veřejném serveru HTTP | https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv |
✓ | |
Cesta ve službě Azure Storage | wasbs://<container_name>@<account_name>.blob.core.windows.net/<path> abfss://<file_system>@<account_name>.dfs.core.windows.net/<path> |
Nenavrhuje se, protože ke čtení dat může potřebovat další konfiguraci identity. | |
Cesta na počítači Azure Učení datastore | azureml://datastores/<data_store_name>/paths/<path> |
✓ | ✓ |
Cesta k datovému assetu | azureml:<my_data>:<version> |
✓ | ✓ |
Poznámka:
Pro vstup a výstup v úložišti důrazně doporučujeme místo přímé cesty ke službě Azure Storage použít cestu úložiště dat azure machine Učení. Cesta k úložišti dat se podporuje napříč různými typy úloh v kanálu.
Pro vstup a výstup dat si můžete vybrat z různých režimů (stažení, připojení nebo nahrání) a definovat, jak se k datům přistupuje v cílovém výpočetním objektu. Tato tabulka ukazuje možné režimy pro různé kombinace typů,režimů/vstupu/výstupu.
Typ | Vstup a výstup | upload |
download |
ro_mount |
rw_mount |
direct |
eval_download |
eval_mount |
---|---|---|---|---|---|---|---|---|
uri_folder |
Vstup | ✓ | ✓ | ✓ | ||||
uri_file |
Vstup | ✓ | ✓ | ✓ | ||||
mltable |
Vstup | ✓ | ✓ | ✓ | ✓ | ✓ | ||
uri_folder |
Výstup | ✓ | ✓ | |||||
uri_file |
Výstup | ✓ | ✓ | |||||
mltable |
Výstup | ✓ | ✓ | ✓ |
Poznámka:
Ve většině případů doporučujeme použít ro_mount
nebo rw_mount
režim. Další informace o režimu najdete v režimech datových assetů.
Vizuální reprezentace v studio Azure Machine Learning
Následující snímky obrazovky poskytují příklad zobrazení vstupů a výstupů v úloze kanálu v studio Azure Machine Learning. Tuto konkrétní úlohu s názvem nyc-taxi-data-regression
najdete v příkladu azureml.
Na stránce úlohy kanálu studia se vstupy a výstupy typu dat/modelu komponenty zobrazují jako malý kruh v odpovídající komponentě, označované jako vstupní/výstupní port. Tyto porty představují tok dat v kanálu.
Výstup na úrovni kanálu se zobrazí jako fialové pole pro snadnou identifikaci.
Při najetí myší na vstupní/výstupní port se zobrazí typ.
Vstupy primitivního typu se v grafu nezobrazí. Najdete ho na kartě Nastavení panelu přehledu úloh kanálu (pro vstupy na úrovni kanálu) nebo na panelu komponent (pro vstupy na úrovni komponenty). Následující snímek obrazovky ukazuje kartu Nastavení úlohy kanálu, kterou můžete otevřít výběrem odkazu Přehled úlohy.
Pokud chcete zkontrolovat vstupy pro komponentu, poklikejte na komponentu a otevřete panel komponent.
Podobně při úpravě kanálu v návrháři můžete najít vstupy a výstupy kanálu na panelu rozhraní kanálu a vstupy komponent&výstupy na panelu komponenty (trigger poklikáním na komponentu).
Jak zvýšit úroveň vstupů komponent a výstupů na úroveň kanálu
Zvýšení úrovně vstupu a výstupu komponenty na úroveň kanálu umožňuje při odesílání úlohy kanálu přepsat vstup a výstup komponenty. Je také užitečné, pokud chcete kanál aktivovat pomocí koncového bodu REST.
Následují příklady pro zvýšení úrovně vstupů a výstupů komponent na vstupy a výstupy na úrovni kanálu.
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: 1b_e2e_registered_components
description: E2E dummy train-score-eval pipeline with registered components
inputs:
pipeline_job_training_max_epocs: 20
pipeline_job_training_learning_rate: 1.8
pipeline_job_learning_rate_schedule: 'time-based'
outputs:
pipeline_job_trained_model:
mode: upload
pipeline_job_scored_data:
mode: upload
pipeline_job_evaluation_report:
mode: upload
settings:
default_compute: azureml:cpu-cluster
jobs:
train_job:
type: command
component: azureml:my_train@latest
inputs:
training_data:
type: uri_folder
path: ./data
max_epocs: ${{parent.inputs.pipeline_job_training_max_epocs}}
learning_rate: ${{parent.inputs.pipeline_job_training_learning_rate}}
learning_rate_schedule: ${{parent.inputs.pipeline_job_learning_rate_schedule}}
outputs:
model_output: ${{parent.outputs.pipeline_job_trained_model}}
services:
my_vscode:
type: vs_code
my_jupyter_lab:
type: jupyter_lab
my_tensorboard:
type: tensor_board
log_dir: "outputs/tblogs"
# my_ssh:
# type: tensor_board
# ssh_public_keys: <paste the entire pub key content>
# nodes: all # Use the `nodes` property to pick which node you want to enable interactive services on. If `nodes` are not selected, by default, interactive applications are only enabled on the head node.
score_job:
type: command
component: azureml:my_score@latest
inputs:
model_input: ${{parent.jobs.train_job.outputs.model_output}}
test_data:
type: uri_folder
path: ./data
outputs:
score_output: ${{parent.outputs.pipeline_job_scored_data}}
evaluate_job:
type: command
component: azureml:my_eval@latest
inputs:
scoring_result: ${{parent.jobs.score_job.outputs.score_output}}
outputs:
eval_output: ${{parent.outputs.pipeline_job_evaluation_report}}
Úplný příklad najdete v kanálu train-score-eval s registrovanými komponentami. Tento kanál podporuje tři vstupy a tři výstupy na úroveň kanálu. Podívejme se pipeline_job_training_max_epocs
na příklad. Deklaruje se v inputs
části na kořenové úrovni, což znamená vstup na úrovni kanálu. V jobs -> train_job
oddílu se na vstup pojmenovaný max_epocs
odkazuje jako ${{parent.inputs.pipeline_job_training_max_epocs}}
, který označuje train_job
vstup max_epocs
's odkazy na vstup pipeline_job_training_max_epocs
na úrovni kanálu . Podobně můžete zvýšit úroveň výstupu kanálu pomocí stejného schématu.
Studio
Vstup komponenty můžete zvýšit na vstup na úrovni kanálu na stránce pro vytváření návrháře. Poklikáním na komponentu přejděte na panel nastavení komponenty –> najděte vstup, který chcete zvýšit , vyberte> tři tečky vpravo –> Vyberte přidat ke vstupu kanálu.
Volitelný vstup
Ve výchozím nastavení jsou všechny vstupy povinné a musí být přiřazeny hodnotě (nebo výchozí hodnotě) při každém odeslání úlohy kanálu. Mohou však existovat instance, ve kterých potřebujete volitelné vstupy. V takových případech máte při odesílání úlohy kanálu flexibilitu nepřiřazovat hodnotu vstupu.
Volitelný vstup může být užitečný v následujících dvou scénářích:
Pokud máte volitelný vstup typu dat nebo modelu a při odesílání úlohy kanálu nepřiřazujete hodnotu, v kanálu bude komponenta, která neobsahuje předchozí závislost dat. Jinými slovy, vstupní port není propojený s žádnou komponentou ani datovým nebo modelovým uzlem. To způsobí, že služba kanálu vyvolá tuto komponentu přímo, a nečeká na to, až bude předchozí závislost připravená.
Následující snímek obrazovky ukazuje jasný příklad druhého scénáře. Pokud nastavíte
continue_on_step_failure = True
kanál a máte druhý uzel (uzel2), který jako volitelný vstup používá výstup z prvního uzlu (node1), uzel2 se přesto spustí i v případě, že uzel1 selže. Pokud však uzel2 používá požadovaný vstup z uzlu1, nebude spuštěn, pokud uzel1 selže.
Tady jsou příklady, jak definovat volitelný vstup.
$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}}
Když je vstup nastavený jako optional = true
, musíte použít $[[]]
k přijetí příkazového řádku se vstupy. Viz zvýrazněný řádek ve výše uvedeném příkladu.
Poznámka:
Nepovinný výstup není podporován.
V grafu kanálu jsou volitelné vstupy typu Data/Model reprezentovány tečkovaným kruhem. Volitelné vstupy primitivních typů se dají nacházet na kartě Nastavení. Na rozdíl od požadovaných vstupů nemají volitelné vstupy vedle nich hvězdičku, což znamená, že nejsou povinné.
Přizpůsobení výstupní cesty
Ve výchozím nastavení se výstup komponenty uloží do azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}
složky . Výchozí {default_datastore}
sada zákazníků úložiště dat pro kanál. Pokud není nastavené úložiště objektů blob pracovního prostoru. Jedná se {name}
o název úlohy, který se přeloží v době provádění úlohy. Jedná se {output_name}
o zákazníka s názvem výstupu definovaným v YAML komponenty.
Můžete ale také přizpůsobit umístění pro uložení výstupu definováním cesty výstupu. Následuje příklad:
Definuje pipeline.yaml
kanál, který má tři výstupy na úrovni kanálu. Úplný YAML najdete v kanálu train-score-eval s příkladem registrovaných komponent.
K nastavení vlastní výstupní cesty pro pipeline_job_trained_model
výstup můžete použít následující příkaz.
# define the custom output path using datastore uri
# add relative path to your blob container after "azureml://datastores/<datastore_name>/paths"
output_path="azureml://datastores/{datastore_name}/paths/{relative_path_of_container}"
# create job and define path using --outputs.<outputname>
az ml job create -f ./pipeline.yml --set outputs.pipeline_job_trained_model.path=$output_path
Stažení výstupu
Výstup komponenty nebo výstup kanálu si můžete stáhnout podle následujícího příkladu.
Stažení výstupu na úrovni kanálu
# Download all the outputs of the job
az ml job download --all -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>
# Download specific output
az ml job download --output-name <OUTPUT_PORT_NAME> -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>
Stažení výstupu podřízené úlohy
Pokud potřebujete stáhnout výstup podřízené úlohy (výstup komponenty, který není propagovaný na úroveň kanálu), měli byste nejprve zobrazit seznam všech podřízených entit úlohy kanálu a pak použít podobný kód ke stažení výstupu.
# List all child jobs in the job and print job details in table format
az ml job list --parent-job-name <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID> -o table
# Select needed child job name to download output
az ml job download --all -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>
Postup registrace výstupu jako pojmenovaného prostředku
Výstup komponenty nebo kanálu můžete zaregistrovat jako pojmenovaný prostředek přiřazením name
a version
výstupem. Registrovaný prostředek může být v pracovním prostoru vypisován prostřednictvím uživatelského rozhraní studia, rozhraní příkazového řádku nebo sady SDK a také odkazovat v budoucích úlohách.
Registrace výstupu kanálu
display_name: register_pipeline_output
type: pipeline
jobs:
node:
type: command
inputs:
component_in_path:
type: uri_file
path: https://dprepdata.blob.core.windows.net/demo/Titanic.csv
component: ../components/helloworld_component.yml
outputs:
component_out_path: ${{parent.outputs.component_out_path}}
outputs:
component_out_path:
type: mltable
name: pipeline_output # Define name and version to register pipeline output
version: '1'
settings:
default_compute: azureml:cpu-cluster
Registrace výstupu podřízené úlohy
display_name: register_node_output
type: pipeline
jobs:
node:
type: command
component: ../components/helloworld_component.yml
inputs:
component_in_path:
type: uri_file
path: 'https://dprepdata.blob.core.windows.net/demo/Titanic.csv'
outputs:
component_out_path:
type: uri_folder
name: 'node_output' # Define name and version to register a child job's output
version: '1'
settings:
default_compute: azureml:cpu-cluster