Freigeben über


Verwalten von Eingaben und Ausgaben von Komponenten und Pipelines

Azure Machine Learning-Pipelines unterstützen Eingaben und Ausgaben sowohl auf Komponenten- als auch auf Pipelineebene. In diesem Artikel werden Ein- und -ausgaben von Pipelines und Komponenten sowie deren Verwaltung beschrieben.

Auf Komponentenebene definieren die Ein- und Ausgaben die Komponentenschnittstelle. Sie können die Ausgabe einer Komponente als Eingabe für eine andere Komponente in derselben übergeordneten Pipeline verwenden, sodass Daten oder Modelle zwischen Komponenten weitergegeben werden können. Diese Interkonnektivität stellt den Datenfluss innerhalb der Pipeline dar.

Auf Pipelineebene können Sie Ein- und Ausgaben verwenden, um Pipelineaufträge mit unterschiedlichen Dateneingaben oder Parametern wie learning_rate zu übermitteln. Ein- und Ausgaben sind besonders nützlich beim Aufrufen einer Pipeline über einen REST-Endpunkt. Sie können der Pipelineeingabe unterschiedliche Werte zuweisen oder auf die Ausgabe verschiedener Pipelineaufträge zugreifen. Weitere Informationen finden Sie unter Erstellen von Aufträgen und Eingabedaten für Batchendpunkte.

Eingabe- und Ausgabetypen

Die folgenden Typen werden sowohl als Ein- als auch Ausgaben von Komponenten oder Pipelines unterstützt:

  • Datentypen Weitere Informationen finden Sie unter Datentypen.

    • uri_file
    • uri_folder
    • mltable
  • Modelltypen.

    • mlflow_model
    • custom_model

Die folgenden primitiven Typen werden auch nur für Eingaben unterstützt:

  • Einfache Typen
    • string
    • number
    • integer
    • boolean

Die Ausgabe des primitiven Typs wird nicht unterstützt.

Beispieleingaben und -ausgaben

Diese Beispiele stammen aus der Pipeline NYC Taxi Data Regression im GitHub-Repository mit Azure Machine Learning-Beispielen.

  • Die Trainingskomponente verfügt über eine number-Eingabe namens test_split_ratio.
  • Die Vorbereitungskomponente verfügt über eine Ausgabe des Typs uri_folder. Der Quellcode der Komponente liest die CSV-Dateien aus dem Eingabeordner, verarbeitet die Dateien und schreibt die verarbeiteten CSV-Dateien in den Ausgabeordner.
  • Die Trainingskomponente verfügt über eine Ausgabe des Typs mlflow_model. Der Quellcode der Komponente speichert das trainierte Modell mithilfe der Methode mlflow.sklearn.save_model.

Serialisierung von Ausgaben

Bei der Verwendung von Daten- oder Modellausgaben werden die Ausgaben serialisiert und als Dateien an einem Speicherort gespeichert. In späteren Schritten kann während der Auftragsausführung auf die Dateien zugegriffen werden, indem dieser Speicherort eingebunden wird oder die Dateien in das Computedateisystem herunter- oder hochgeladen werden.

Der Quellcode der Komponente muss das Ausgabeobjekt, das in der Regel im Arbeitsspeicher gespeichert ist, in Dateien serialisieren. Beispielsweise können Sie einen Pandas-DataFrame als CSV-Datei serialisieren. Azure Machine Learning definiert keine standardisierten Methoden für die Objektserialisierung. Sie haben die Flexibilität, Ihre bevorzugten Methoden zum Serialisieren von Objekten in Dateien auszuwählen. In der nachgelagerten Komponente können Sie auswählen, wie diese Dateien deserialisiert und gelesen werden sollen.

Pfad für die Ein- und Ausgabe von Datentypen

Für die Ein- und Ausgabe von Datenressourcen müssen Sie einen Pfadparameter angeben, der auf den Speicherort der Daten verweist. Die folgende Tabelle zeigt anhand von Beispielen für path-Parameter die unterstützten Datenspeicherorte für Pipelineeingaben und -ausgaben in Azure Machine Learning.

Location Eingabe Ausgabe Beispiel
Ein Pfad auf Ihrem lokalen Computer ./home/<username>/data/my_data
Ein Pfad auf einem öffentlichen HTTP/S-Server https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv
Ein Pfad in Azure Storage * wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>
or
abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
Ein Pfad in einem Azure Machine Learning-Datenspeicher azureml://datastores/<data_store_name>/paths/<path>
Ein Pfad zu einer Datenressource azureml:my_data:<version>

* Die direkte Verwendung von Azure Storage wird für die Eingabe nicht empfohlen, da möglicherweise eine zusätzliche Identitätskonfiguration zum Lesen der Daten erforderlich ist. Besser ist es, Azure Machine Learning-Datenspeicherpfade zu verwenden, die für die verschiedenen Typen von Pipelineaufträgen unterstützt werden.

Modus für die Ein- und Ausgabe von Datentypen

Für Eingaben und Ausgaben von Datentypen können Sie aus mehreren Download-, Upload- und Einbindungsmodi wählen, um zu definieren, wie das Computeziel auf Daten zugreift. Die folgende Tabelle zeigt die unterstützten Modi für verschiedene Arten von Ein- und Ausgaben:

type upload download ro_mount rw_mount direct eval_download eval_mount
uri_folder-Eingabe
uri_file-Eingabe
mltable-Eingabe
uri_folder-Ausgabe
uri_file-Ausgabe
mltable-Ausgabe

Derro_mount- oder rw_mount-Modus wird in den meisten Fällen empfohlen. Weitere Informationen finden Sie unter Modi.

Eingaben und Ausgaben in Pipelinegraphen

Auf der Seite des Pipelineauftrags in Azure Machine Learning Studio werden Ein- und -Ausgaben von Komponenten als kleine Kreise angezeigt. Diese werden als Eingabe-/Ausgabepunkte bezeichnet. Diese Punkte stellen den Datenfluss in der Pipeline dar. Die Ausgabe auf Pipelineebene wird zur einfachen Identifikation in lila Feldern angezeigt.

Der folgende Screenshot des Pipelinegraphen für NYC Taxi Data Regression zeigt zahlreiche Ein- und Ausgaben von Komponenten und Pipelines:

Screenshot: Hervorhebung der Eingabe-/Ausgabepunkte der Pipeline

Wenn Sie auf einen Eingabe-/Ausgabepunkt zeigen, wird der Typ angezeigt

Screenshot: Hervorhebung des Punkttyps, wenn der Mauszeiger über den Punkt bewegt wird

Im Pipelinegraphen werden keine Eingaben des primitiven Typs angezeigt. Diese Eingaben werden im Bereich Pipelineauftragsübersicht auf der Registerkarte Einstellungen für Eingaben auf Pipelineebene oder im Komponentenbereich für Eingaben auf Komponentenebene angezeigt. Sie können den Komponentenbereich durch Doppelklicken auf die Komponente im Graphen öffnen.

Screenshot: Hervorhebung des Einstellungsbereichs für die Auftragsübersicht.

Wenn Sie eine Pipeline im Studio-Designer bearbeiten, befinden sich Pipelineeingaben und -ausgaben im Bereich Pipelineschnittstelle. Ein- und -ausgaben von Komponenten befinden sich im Komponentenbereich.

Screenshot: Hervorhebung der Pipelineschnittstelle im Designer

Höherstufen von Komponenteneingaben und -ausgaben auf Pipelineebene

Durch Höherstufen der Eingabe/Ausgabe einer Komponente auf Pipelineebene können Sie die Eingabe/Ausgabe der Komponente beim Übermitteln eines Pipelineauftrags überschreiben. Diese Möglichkeit ist besonders nützlich beim Auslösen von Pipelines mithilfe von REST-Endpunkten.

Die folgenden Beispiele veranschaulichen das Höherstufen von Eingaben/Ausgaben auf Komponentenebene auf Eingaben/Ausgaben auf Pipelineebene.

Die folgende Pipeline stuft drei Eingaben und drei Ausgaben auf Pipelineebene höher. Bei pipeline_job_training_max_epocs handelt es sich z. B um eine Eingabe auf Pipelineebene, da sie im Abschnitt inputs auf Stammebene deklariert wird.

Unter train_job im Abschnitt jobs wird auf die Eingabe mit dem Namen max_epocs als ${{parent.inputs.pipeline_job_training_max_epocs}} verwiesen, d. h., dass die Eingabe max_epocs von train_job auf die Eingabe pipeline_job_training_max_epocs auf Pipelineebene verweist. Die Pipelineausgabe wird mithilfe desselben Schemas höhergestuft.

$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}}

Das vollständige Beispiel finden Sie unter train-score-eval-Pipeline mit registrierten Komponenten im Repository mit Azure Machine Learning-Beispielen.

Definieren optionaler Eingaben

Standardmäßig sind alle Eingaben erforderlich. Diese müssen über einen Standardwert verfügen, oder ihnen muss jedes Mal, wenn Sie einen Pipelineauftrag übermitteln, ein Wert zugewiesen werden. Sie können jedoch eine optionale Eingabe definieren.

Hinweis

Optionale Ausgaben werden nicht unterstützt.

Das Festlegen optionaler Eingaben kann in zwei Szenarien nützlich sein:

  • Wenn Sie eine optionale Daten- bzw. Modelltypeingabe definieren und dieser beim Übermitteln des Pipelineauftrags keinen Wert zuweisen, fehlt der Pipelinekomponente die Datenabhängigkeit. Wenn der Eingabepunkt der Komponente nicht mit einem Komponenten- oder Daten- bzw. Modellknoten verknüpft ist, ruft die Pipeline die Komponente direkt auf, anstatt auf eine vorherige Abhängigkeit zu warten.

  • Wenn Sie continue_on_step_failure = True für die Pipeline festlegen, node2 jedoch erforderliche Eingaben von node1 verwendet, wird node2 nicht ausgeführt, wenn bei node1 ein Fehler auftritt. Wenn die node1-Eingabe optional ist, wird node2 auch dann ausgeführt, wenn bei node1 ein Fehler auftritt. Im folgenden Graphen ist dieses Szenario dargestellt:

    Screenshot: Orchestrierungslogik optionaler Eingaben und Fortsetzung bei Fehlern.

Das folgende Codebeispiel zeigt, wie eine optionale Eingabe definiert wird. Beim Festlegen der Eingabe als optional = true müssen Sie $[[]] verwenden, um die Befehlszeileneingaben wie in den hervorgehobenen Zeilen des Beispiels gezeigt einzuschließen:

$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.5/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}}

Anpassen von Ausgabepfaden

Standardmäßig wird die Komponentenausgabe im Standarddatenspeicher ({default_datastore}), den Sie für die Pipeline festgelegt haben: azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}. Wenn er nicht angegeben wird, ist der Speicherort standardmäßig der Blobspeicher des Arbeitsbereichs.

Auftrag {name} wird zur Ausführungszeit des Auftrags aufgelöst, und {output_name} ist der Name, den Sie im YAML-Code der Komponente definiert haben. Sie können aber auch den Speicherort der Ausgabe anpassen, indem Sie einen Ausgabepfad definieren.

Die Datei pipeline.yml im Beispiel der train-score-eval-Pipeline mit registrierten Komponenten definiert eine Pipeline, die über drei Ausgaben auf Pipelineebene verfügt. Sie können mit folgendem Befehl die benutzerdefinierten Ausgabepfade für die pipeline_job_trained_model-Ausgabe festlegen.

# 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  

Herunterladen von Ausgaben

Sie können Ausgaben auf Pipeline- oder Komponentenebene herunterladen.

Herunterladen von Ausgaben auf Pipelineebene

Sie können alle Ausgaben eines Auftrags oder eine bestimmte Ausgabe herunterladen.

# 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 a specific output
az ml job download --output-name <OUTPUT_PORT_NAME> -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>

Herunterladen von Komponentenausgaben

Um die Ausgaben einer untergeordneten Komponente herunterzuladen, listen Sie zunächst alle untergeordneten Aufträge eines Pipelineauftrags auf, und verwenden Sie dann ähnlichen Code, um die Ausgaben herunterzuladen.

# 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 the desired child job name to download output
az ml job download --all -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>

Registrieren von Ausgaben als benannte Ressource

Sie können die Ausgabe einer Komponente oder Pipeline als benannte Ressource registrieren, indem Sie der Ausgabe name und version zuweisen. Die registrierte Ressource kann in Ihrem Arbeitsbereich über die Studio-Benutzeroberfläche, die CLI oder das SDK aufgelistet und in zukünftigen Aufträgen im Arbeitsbereich referenziert werden.

Registrieren der Ausgabe auf Pipelineebene

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

Registrieren einer Komponentenausgabe

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