Freigeben über


Verwenden von mehrstufigen Pipelinekomponenten in Pipelineaufträgen

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

Für die Entwicklung komplexer Pipelines für maschinelles Lernen werden üblicherweise Pipelinekomponenten verwendet. Sie können mehrere Schritte in einer Pipelinekomponente gruppieren, die Sie als einzelnen Schritt zum Ausführen von Aufgaben wie Datenvorverarbeitung oder Modelltraining verwenden.

In diesem Artikel erfahren Sie, wie Sie mehrere Schritte in Komponenten schachteln, mit denen Sie komplexer Azure Machine Learning-Pipelineaufträge erstellen. Sie können diese mehrstufigen Komponenten eigenständig entwickeln und testen. Dies erleichtert Ihnen die Freigabe Ihrer Arbeit und die Zusammenarbeit mit Teammitgliedern.

Durch Verwendung von mehrstufigen Pipelinekomponenten können Sie sich auf die Entwicklung von Teilaufgaben konzentrieren und diese ganz einfach in den gesamten Pipelineauftrag integrieren. Eine Pipelinekomponente verfügt über eine klar definierte Schnittstelle für Ein- und Ausgaben. Benutzer der mehrstufigen Pipelinekomponente müssen also die Implementierungsdetails der Komponente nicht kennen.

Sowohl Pipelinekomponenten als auch -aufträge enthalten Gruppen von Schritten oder Komponenten, doch das Definieren einer Pipelinekomponente unterscheidet sich folgendermaßen vom Definieren eines Pipelineauftrags:

  • Pipelinekomponenten definieren nur die Schnittstellen von Ein- und Ausgaben. In einer Pipelinekomponente legen Sie die Ein- und Ausgabetypen explizit fest, weisen ihnen jedoch nicht direkt Werte zu.
  • Pipelinekomponenten haben keine Laufzeiteinstellungen, Sie können also keine Compute- oder Datenknoten in der Pipelinekomponente hartcodieren. Stattdessen müssen Sie diese Knoten zu Eingaben auf Pipelineebene höherstufen und ihnen während der Laufzeit Werte zuweisen.
  • Einstellungen auf Pipelineebene wie default_datastore und default_compute sind auch Laufzeiteinstellungen, die nicht zu Definitionen von Pipelinekomponenten gehören.

Voraussetzungen

  • Richten Sie einen Azure Machine Learning-Arbeitsbereich ein. Weitere Informationen finden Sie unter Erstellen eines Arbeitsbereichs.
  • Machen Sie sich mit den Konzepten von Azure Machine Learning-Pipelines und -Komponenten sowie mit der Verwendung von Komponenten in Azure Machine Learning-Pipelines vertraut.

Erstellen von Pipelineaufträgen mit Pipelinekomponenten

Sie können mehrere Schritte als Pipelinekomponente definieren und dann die mehrstufige Komponente wie jede andere Komponente verwenden, um einen Pipelineauftrag zu erstellen.

Definieren von Pipelinekomponenten

Sie können eine Pipelinekomponente mithilfe mehrerer Komponenten erstellen, ähnlich wie Sie Pipelineaufträge mit Komponenten erstellen.

Das folgende Beispiel stammt aus der Beispielpipeline pipeline_with_train_eval_pipeline_component im GitHub-Repository mit Azure Machine Learning-Beispielen.

Die Beispielkomponente definiert einen Pipelineauftrag mit drei Knoten. Die beiden Knoten im Beispielpipelineauftrag verwenden jeweils die lokal definierten Komponenten train, score und eval. Im folgenden Code wird die Pipelinekomponente definiert:

$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
type: pipeline

name: train_pipeline_component
display_name: train_pipeline_component
description: Dummy train-score-eval pipeline component with local components

inputs:
  training_data: 
    type: uri_folder  # default/path is not supported for data type
  test_data: 
    type: uri_folder  # default/path is not supported for data type
  training_max_epochs:
    type: integer
  training_learning_rate: 
    type: number
  learning_rate_schedule:
    type: string
    default: 'time-based'
  train_node_compute: # example to show how to promote compute as input
    type: string

outputs: 
  trained_model:
    type: uri_folder
  evaluation_report:
    type: uri_folder

jobs:
  train_job:
    type: command
    component: ./train/train.yml
    inputs:
      training_data: ${{parent.inputs.training_data}}
      max_epochs: ${{parent.inputs.training_max_epochs}}
      learning_rate: ${{parent.inputs.training_learning_rate}}
      learning_rate_schedule: ${{parent.inputs.learning_rate_schedule}}
      
    outputs:
      model_output: ${{parent.outputs.trained_model}}
    compute: ${{parent.inputs.train_node_compute}}
  
  score_job:
    type: command
    component: ./score/score.yml
    inputs:
      model_input: ${{parent.jobs.train_job.outputs.model_output}}
      test_data: ${{parent.inputs.test_data}}
    outputs:
      score_output: 
        mode: upload

  evaluate_job:
    type: command
    component: ./eval/eval.yml
    inputs:
      scoring_result: ${{parent.jobs.score_job.outputs.score_output}}
    outputs:
      eval_output: ${{parent.outputs.evaluation_report}}

Verwenden von Komponenten in Pipelines

Sie verweisen auf Pipelinekomponenten als untergeordnete Aufträge in einem Pipelineauftrag genauso wie auf andere Komponententypen. Sie können Laufzeiteinstellungen wie default_datastore und default_compute auf der Ebene des Pipelineauftrags vornehmen.

Sie müssen alle Parameter, die Sie während der Laufzeit ändern möchten, als Pipelineauftragseingaben höherstufen. Andernfalls sind diese in der Pipelinekomponente hartcodiert. Durch Höherstufen der Computedefinition auf eine Eingabe auf Pipelineebene werden heterogene Pipelines unterstützt, die unterschiedliche Computeziele in verschiedenen Schritten verwenden können.

Um den Pipelineauftrag zu übermitteln, bearbeiten Sie cpu-cluster im Abschnitt default_compute, bevor Sie den Befehl az ml job create -f pipeline.yml ausführen.

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json

display_name: pipeline_with_pipeline_component
experiment_name: pipeline_with_pipeline_component
description: Select best model trained with different learning rate
type: pipeline

inputs:
  pipeline_job_training_data: 
    type: uri_folder
    path: ./data
  pipeline_job_test_data: 
    type: uri_folder
    path: ./data
  pipeline_job_training_learning_rate1: 0.1
  pipeline_job_training_learning_rate2: 0.01
  compute_train_node: cpu-cluster
  compute_compare_node: cpu-cluster

outputs: 
  pipeline_job_best_model:
    mode: upload
  pipeline_job_best_result:
    mode: upload

settings:
  default_datastore: azureml:workspaceblobstore
  default_compute: azureml:cpu-cluster
  continue_on_step_failure: false

jobs:
  train_and_evaluate_model1:
    type: pipeline
    component: ./components/train_pipeline_component.yml
    inputs:
      training_data: ${{parent.inputs.pipeline_job_training_data}}
      test_data: ${{parent.inputs.pipeline_job_test_data}}
      training_max_epochs: 20
      training_learning_rate: ${{parent.inputs.pipeline_job_training_learning_rate1}}
      train_node_compute: ${{parent.inputs.compute_train_node}}

  train_and_evaluate_model2:
    type: pipeline
    component: ./components/train_pipeline_component.yml
    inputs:
      training_data: ${{parent.inputs.pipeline_job_training_data}}
      test_data: ${{parent.inputs.pipeline_job_test_data}}
      training_max_epochs: 20
      training_learning_rate: ${{parent.inputs.pipeline_job_training_learning_rate2}}
      train_node_compute: ${{parent.inputs.compute_train_node}}

  compare:
    type: command
    component: ./components/compare2/compare2.yml
    compute: ${{parent.inputs.compute_compare_node}} # example to show how to promote compute as pipeline level inputs
    inputs:
      model1: ${{parent.jobs.train_and_evaluate_model1.outputs.trained_model}}
      eval_result1: ${{parent.jobs.train_and_evaluate_model1.outputs.evaluation_report}}
      model2: ${{parent.jobs.train_and_evaluate_model2.outputs.trained_model}}
      eval_result2: ${{parent.jobs.train_and_evaluate_model2.outputs.evaluation_report}}
    outputs: 
      best_model: ${{parent.outputs.pipeline_job_best_model}}
      best_result: ${{parent.outputs.pipeline_job_best_result}}

Hinweis

Um Komponenten auftragsübergreifend im Arbeitsbereich freizugeben oder wiederzuverwenden, müssen Sie die Komponenten registrieren. Sie können Pipelinekomponenten mithilfe von az ml component create registrieren.

Weitere Beispiele und Informationen zu Azure CLI-Pipelinekomponenten finden Sie im Repository mit Azure Machine Learning-Beispielen unter pipelines-with-components.