Az összetevő és a folyamat bemeneteinek és kimeneteinek kezelése
Ebből a cikkből megtudhatja:
- Az összetevő és a folyamat bemeneteinek és kimeneteinek áttekintése
- Összetevők bemeneteinek/kimeneteinek előléptetése folyamatbemenetekre/kimenetekre
- Opcionális bemenetek definiálása
- Kimeneti elérési út testreszabása
- Kimenetek letöltése
- Kimenetek regisztrálása névvel ellátott objektumként
Bemenetek és kimenetek áttekintése
Az Azure Machine Tanulás-folyamatok mind az összetevő, mind a folyamat szintjén támogatják a bemeneteket és a kimeneteket.
Az összetevő szintjén a bemenetek és kimenetek határozzák meg az összetevő interfészét. Az egyik összetevő kimenete egy másik összetevő bemeneteként használható ugyanabban a szülőfolyamatban, lehetővé téve az adatok vagy modellek átadását az összetevők között. Ez az összekapcsoltság egy gráfot alkot, amely a folyamaton belüli adatfolyamot szemlélteti.
A folyamat szintjén a bemenetek és kimenetek hasznosak lehetnek a folyamatfeladatok különböző adatbemenetekkel vagy a betanítási logikát vezérlő paraméterekkel (például learning_rate
). Különösen hasznosak a folyamat REST-végponton keresztüli meghívásakor. Ezek a bemenetek és kimenetek lehetővé teszik, hogy különböző értékeket rendeljen a folyamat bemenetéhez, vagy hozzáférjen a folyamatfeladatok kimenetéhez a REST-végponton keresztül. További információ: Feladatok és bemeneti adatok létrehozása a Batch-végponthoz.
Bemenetek és kimenetek típusai
Az alábbi típusok támogatottak egy összetevő vagy folyamat kimeneteként.
Adattípusok. Az adattípusokról további információt az Azure Machine Tanulás adattípusaiban olvashat.
uri_file
uri_folder
mltable
Modelltípusok.
mlflow_model
custom_model
Az adatok vagy modellkimenetek lényegében szerializálják a kimeneteket, és fájlként mentik őket egy tárolóhelyen. A következő lépésekben ez a tárolási hely csatlakoztatható, letölthető vagy feltölthető a számítási cél fájlrendszerbe, így a következő lépés lehetővé teszi a fájlok elérését a feladat végrehajtása során.
Ehhez a folyamathoz az összetevő forráskódja szükséges, amely szerializálja a kívánt kimeneti objektumot – amely általában a memóriában van tárolva – fájlokká. Például szerializálhat egy pandas-adatkeretet CSV-fájlként. Vegye figyelembe, hogy az Azure Machine Tanulás nem határoz meg szabványosított metódusokat az objektumszerializáláshoz. Felhasználóként rugalmasan választhatja ki az objektumok fájlokba való szerializálásához előnyben részesített módszert. Ezt követően az alsóbb rétegbeli összetevőben egymástól függetlenül deszerializálhatja és elolvashatja ezeket a fájlokat. Íme néhány példa a hivatkozásra:
- Az nyc_taxi_data_regression példában az előkészítő összetevő típuskimenettel
uri_folder
rendelkezik. Az összetevő forráskódjában beolvassa a csv-fájlokat a bemeneti mappából, feldolgozza a fájlokat, és a feldolgozott CSV-fájlokat a kimeneti mappába írja. - A nyc_taxi_data_regression példában a betanított összetevő típuskimenettel
mlflow_model
rendelkezik. Az összetevő forráskódjában metódussalmlflow.sklearn.save_model
menti a betanított modellt.
A fenti adat- vagy modelltípusok mellett a folyamat- vagy összetevőbemenetek primitív típusokat is követhetnek.
string
number
integer
boolean
A nyc_taxi_data_regression példában a betanított összetevőnek van egy number
bemenete.test_split_ratio
Megjegyzés:
A primitív típusok kimenete nem támogatott.
Adatbemenetek/kimenetek elérési útja és módja
Az adategység bemenetéhez/kimenetéhez meg kell adnia egy paramétert path
, amely az adathelyre mutat. Ez a táblázat az Azure Machine Tanulás folyamat által támogatott különböző adathelyeket mutatja be, és példákat is mutat az elérésiút-paraméterekre:
Hely | Példák | Bevitel | Hozam |
---|---|---|---|
Elérési út a helyi számítógépen | ./home/username/data/my_data |
✓ | |
Elérési út egy nyilvános HTTP-kiszolgálón | https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv |
✓ | |
Elérési út az Azure Storage-ban | wasbs://<container_name>@<account_name>.blob.core.windows.net/<path> abfss://<file_system>@<account_name>.dfs.core.windows.net/<path> |
Nem javasolt, mert az adatok olvasásához szükség lehet további identitáskonfigurációra. | |
Elérési út egy Azure Machine Tanulás Datastore-on | azureml://datastores/<data_store_name>/paths/<path> |
✓ | ✓ |
Adategység elérési útja | azureml:<my_data>:<version> |
✓ | ✓ |
Megjegyzés:
A tárterületen történő bemenethez/kimenethez javasoljuk, hogy a közvetlen Azure Storage-elérési út helyett az Azure Machine Tanulás adattár elérési útját használja. Az adattár elérési útja a folyamat különböző feladattípusaiban támogatott.
Az adatbemenet/kimenet esetében különböző módok közül választhat (letöltés, csatlakoztatás vagy feltöltés), így meghatározhatja, hogyan férnek hozzá az adatok a számítási célhoz. Ez a táblázat a különböző típus-/mód-/bemeneti/kimeneti kombinációk lehetséges módjait mutatja be.
Típus | Bemenet/kimenet | upload |
download |
ro_mount |
rw_mount |
direct |
eval_download |
eval_mount |
---|---|---|---|---|---|---|---|---|
uri_folder |
Bevitel | ✓ | ✓ | ✓ | ||||
uri_file |
Bevitel | ✓ | ✓ | ✓ | ||||
mltable |
Bevitel | ✓ | ✓ | ✓ | ✓ | ✓ | ||
uri_folder |
Kimenet | ✓ | ✓ | |||||
uri_file |
Kimenet | ✓ | ✓ | |||||
mltable |
Kimenet | ✓ | ✓ | ✓ |
Megjegyzés:
A legtöbb esetben javasoljuk a használatot ro_mount
vagy rw_mount
a módot. Ha többet szeretne megtudni a módról, tekintse meg az adategység-módokat.
Vizuális ábrázolás az Azure Machine Tanulás Studióban
Az alábbi képernyőképek bemutatják, hogyan jelennek meg a bemenetek és kimenetek egy folyamatfeladatban az Azure Machine Tanulás Studióban. Ez a névvel ellátott nyc-taxi-data-regression
feladat az azureml-példában található.
A studio folyamatfeladat oldalán egy összetevő adat-/modelltípus-bemenetei/kimenete kis körként jelenik meg a megfelelő összetevőben, az úgynevezett Bemeneti/Kimeneti portban. Ezek a portok egy folyamat adatfolyamát képviselik.
A folyamatszintű kimenet lila mezőként jelenik meg az egyszerű azonosítás érdekében.
Amikor az egérmutatót egy bemeneti/kimeneti portra viszi, megjelenik a típus.
A primitív típusú bemenetek nem jelennek meg a gráfon. A folyamat feladatáttekintő paneljének Gépház lapján (folyamatszintű bemenetek esetén) vagy az összetevő panelen (az összetevőszintű bemenetek esetében) található. Az alábbi képernyőképen egy folyamatfeladat Gépház lapja látható, amely a Feladat áttekintése hivatkozásra kattintva nyitható meg.
Ha ellenőrizni szeretné egy összetevő bemeneteit, kattintson duplán az összetevőre az összetevő paneljének megnyitásához.
Hasonlóképpen, amikor egy folyamatot szerkeszt a tervezőben, a folyamat bemenetei és kimenetei a Pipeline interface panelen, az összetevő bemenetei és kimenetei pedig az összetevő paneljén találhatók (az összetevőre duplán kattintva aktiválható).
Összetevők bemeneteinek és kimeneteinek előléptetése folyamatszintre
Egy összetevő bemenetének/kimenetének folyamatszintre történő előléptetésével felülírhatja az összetevő bemenetét/kimenetét egy folyamatfeladat elküldésekor. Akkor is hasznos, ha REST-végponttal szeretné aktiválni a folyamatot.
Az alábbiakban példákat láthat az összetevők bemeneteinek/kimeneteinek folyamatszintű bemenetekre/kimenetekre való előléptetésére.
$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}}
A teljes példa a regisztrált összetevőkkel rendelkező train-score-eval folyamatban található. Ez a folyamat három bemenetet és három kimenetet támogat folyamatszintre. Vegyük pipeline_job_training_max_epocs
példaként. A gyökérszint szakaszában deklarálva inputs
van, ami azt jelenti, hogy a folyamatszintű bemenete. A szakasz alatt jobs -> train_job
a névvel ellátott max_epocs
bemenetre hivatkozik ${{parent.inputs.pipeline_job_training_max_epocs}}
a rendszer, amely azt jelzi, hogy a train_job
bemenet max_epocs
a folyamatszintű bemenetre pipeline_job_training_max_epocs
hivatkozik. Hasonlóképpen előléptetheti a folyamat kimenetét ugyanazzal a sémával.
Studio
A tervező szerzői oldalán előléptetheti az összetevők bemenetét a folyamatszintű bemenetre. Lépjen az összetevő beállítási paneljére duplán az összetevőre kattintva –> keresse meg az előléptetni kívánt bemenetet –> Válassza ki a jobb oldali három elemet –> Válassza a Hozzáadás a folyamat bemenetéhez lehetőséget.
Nem kötelező bemenet
Alapértelmezés szerint minden bemenetre szükség van, és minden folyamatfeladat elküldésekor hozzá kell rendelni egy értéket (vagy egy alapértelmezett értéket). Lehetnek azonban olyan példányok, ahol opcionális bemenetekre van szükség. Ilyen esetekben rugalmasan nem rendelhet értéket a bemenethez egy folyamatfeladat elküldésekor.
Az opcionális bemenet két forgatókönyvben lehet hasznos:
Ha opcionális adat-/modelltípus-bemenettel rendelkezik, és nem rendel hozzá értéket a folyamatfeladat elküldésekor, a folyamat egy olyan összetevője lesz, amely nem rendelkezik korábbi adatfüggőséggel. Más szóval a bemeneti port nincs egyetlen összetevőhöz vagy adat-/modellcsomóponthoz sem csatolva. Ez azt eredményezi, hogy a folyamatszolgáltatás közvetlenül meghívja ezt az összetevőt ahelyett, hogy az előző függőségre vár.
Az alábbi képernyőképen látható a második forgatókönyv egyértelmű példája. Ha beállítja
continue_on_step_failure = True
a folyamatot, és van egy második csomópontja (csomópont2), amely az első csomópont (csomópont1) kimenetét használja opcionális bemenetként, a csomópont2 akkor is végrehajtásra kerül, ha a csomópont1 sikertelen. Ha azonban a node2 a csomópont1 szükséges bemenetét használja, a csomópont1 sikertelen működése esetén nem lesz végrehajtva.
Az alábbiakban példákat láthat az opcionális bemenetek definiálására.
$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.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}}
Ha a bemenet be optional = true
van állítva, a parancssort bemenetekkel kell $[[]]
használnia. Lásd a kiemelt sort a fenti példában.
Megjegyzés:
Az opcionális kimenet nem támogatott.
A folyamatdiagramon az adat-/modelltípus opcionális bemeneteit pontozott kör jelöli. A primitív típusú opcionális bemenetek a Gépház lapon találhatók. A kötelező bemenetekkel ellentétben az opcionális bemenetek nem rendelkeznek csillagkal a mellettük, ami azt jelzi, hogy nem kötelezőek.
A kimeneti elérési út testreszabása
Alapértelmezés szerint egy összetevő kimenete a következő helyen azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}
lesz tárolva: . A {default_datastore}
folyamat alapértelmezett adattár-ügyfélkészlete. Ha nem állítja be a munkaterület blobtárolóját. Ez {name}
a feladat neve, amely a feladat végrehajtásakor lesz feloldva. A {output_name}
YAML összetevőben definiált kimeneti név az ügyfél.
A kimenet elérési útjának meghatározásával azonban testre is szabhatja, hogy hol tárolja a kimenetet. Az alábbiakban példákat láthat:
A pipeline.yaml
folyamat három folyamatszintű kimenettel rendelkezik. A teljes YAML megtalálható a train-score-eval folyamatban regisztrált összetevők példájával.
A következő paranccsal egyéni kimeneti elérési utat állíthat be a pipeline_job_trained_model
kimenethez.
# 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
A kimenet letöltése
Az alábbi példát követve letöltheti egy összetevő kimenetét vagy folyamatkimenetét.
Folyamatszintű kimenet letöltése
# 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>
Gyermekfeladat kimenetének letöltése
Ha le kell töltenie egy gyermekfeladat kimenetét (egy összetevő kimenetét, amely nem lép elő folyamatszintre), először listáznia kell egy folyamatfeladat összes gyermekfeladat-entitását, majd hasonló kóddal töltse le a kimenetet.
# 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>
Kimenet regisztrálása névvel ellátott objektumként
Egy összetevő vagy folyamat kimenetét névvel ellátott objektumként regisztrálhatja a kimenet hozzárendelésével és version
a kimenethez való hozzárendelésselname
. A regisztrált objektum a munkaterületen a studio UI/CLI/SDK használatával listázható, és a jövőbeli feladatokban is hivatkozhat gombra.
Folyamat kimenetének regisztrálása
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
Gyermekfeladat kimenetének regisztrálása
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
További lépések
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: