Megosztás a következőn keresztül:


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.

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ípuskimenetteluri_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ódussal mlflow.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-regressionfeladat 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.

Screenshot highlighting the pipeline input and output port.

Amikor az egérmutatót egy bemeneti/kimeneti portra viszi, megjelenik a típus.

Screenshot highlighting the port type when hovering the mouse.

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.

Screenshot highlighting the job overview setting panel.

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ó).

Screenshot highlighting the pipeline interface in designer.

Ö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_jobbemenet max_epocs a folyamatszintű bemenetre pipeline_job_training_max_epocshivatkozik. 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.

Screenshot highlighting how to promote to pipeline input in designer.

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.

    Screenshot to show the orchestration logic of optional input and continue on failure.

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 = truevan á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.

Screenshot highlighting the optional input.

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_modelkimenethez.

# 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