Creare una pipeline

Completato

In Azure Machine Learning una pipeline è un flusso di lavoro delle attività di Machine Learning in cui ogni attività viene definita come componente.

I componenti possono essere organizzati in sequenza o in parallelo, consentendo di creare una logica di flusso sofisticata per eseguire l'orchestrazione delle operazioni di Machine Learning. Per raggiungere un obiettivo complessivo, ogni componente può essere eseguito in una destinazione di calcolo specifica, rendendo possibile combinare tipi diversi di elaborazione.

Una pipeline può essere gestita come un processo se si viene eseguita come un processo della pipeline. Ogni componente viene eseguito come un processo figlio come parte del processo complessivo della pipeline.

Costruire una pipeline

Una pipeline di Azure Machine Learning viene definita in un file YAML. Il file YAML include il nome del processo della pipeline, gli input, gli output e le impostazioni.

È possibile creare il file YAML oppure usare la funzione @pipeline() per creare il file YAML.

Ad esempio, se si vuole compilare una pipeline che prepara prima i dati e quindi esegue il training del modello, è possibile usare il codice seguente:

from azure.ai.ml.dsl import pipeline

@pipeline()
def pipeline_function_name(pipeline_job_input):
    prep_data = loaded_component_prep(input_data=pipeline_job_input)
    train_model = loaded_component_train(training_data=prep_data.outputs.output_data)

    return {
        "pipeline_job_transformed_data": prep_data.outputs.output_data,
        "pipeline_job_trained_model": train_model.outputs.model_output,
    }

Per passare un asset di dati registrato come input del processo della pipeline, è possibile chiamare la funzione creata con l'asset di dati come input:

from azure.ai.ml import Input
from azure.ai.ml.constants import AssetTypes

pipeline_job = pipeline_function_name(
    Input(type=AssetTypes.URI_FILE, 
    path="azureml:data:1"
))

La funzione @pipeline() compila una pipeline costituita da due passaggi sequenziali, rappresentati dai due componenti caricati.

Per comprendere la pipeline compilata nell'esempio, è possibile esaminarne i singoli passaggi:

  1. La pipeline viene compilata definendo la funzione pipeline_function_name.
  2. La funzione della pipeline prevede pipeline_job_input come input complessivo della pipeline.
  3. Il primo passaggio della pipeline richiede un valore per il parametro di input input_data. Il valore per l'input sarà il valore di pipeline_job_input.
  4. Il primo passaggio della pipeline viene definito dal componente caricato per prep_data.
  5. Il valore del output_data del primo passaggio della pipeline viene usato per l'input previsto training_data del secondo passaggio della pipeline.
  6. Il secondo passaggio della pipeline viene definito dal componente caricato per train_model e restituisce un modello sottoposto a training a model_output cui fa riferimento .
  7. Gli output della pipeline vengono definiti restituendo variabili dalla funzione della pipeline. Esistono due tipi di output:
    • pipeline_job_transformed_data con il valore di prep_data.outputs.output_data
    • pipeline_job_trained_model con il valore di train_model.outputs.model_output

Diagramma della struttura della pipeline che include tutti gli input e gli output.

Il risultato dell'esecuzione della funzione @pipeline() è un file YAML che è possibile rivedere stampando l'oggetto pipeline_job creato quando si chiama la funzione:

print(pipeline_job)

L'output verrà formattato come file YAML, che include la configurazione della pipeline e i relativi componenti. Alcuni parametri inclusi nel file YAML sono illustrati nell'esempio seguente.

display_name: pipeline_function_name
type: pipeline
inputs:
  pipeline_job_input:
    type: uri_file
    path: azureml:data:1
outputs:
  pipeline_job_transformed_data: null
  pipeline_job_trained_model: null
jobs:
  prep_data:
    type: command
    inputs:
      input_data:
        path: ${{parent.inputs.pipeline_job_input}}
    outputs:
      output_data: ${{parent.outputs.pipeline_job_transformed_data}}
  train_model:
    type: command
    inputs:
      input_data:
        path: ${{parent.outputs.pipeline_job_transformed_data}}
    outputs:
      output_model: ${{parent.outputs.pipeline_job_trained_model}}
tags: {}
properties: {}
settings: {}