Прочитать на английском

Поделиться через


Использование компонентов многоэтапного конвейера в заданиях конвейера

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)

Обычно используются компоненты конвейера для разработки сложных конвейеров машинного обучения. Можно сгруппировать несколько шагов в компонент конвейера, который используется в качестве одного шага для выполнения таких задач, как предварительная обработка данных или обучение модели.

В этой статье показано, как вложить несколько шагов в компоненты, используемые для создания сложных заданий конвейера Машинное обучение Azure. Вы можете разрабатывать и тестировать эти компоненты с несколькими шагами, что помогает поделиться работой и улучшить совместную работу с участниками команды.

Используя компоненты конвейера с несколькими шагами, вы можете сосредоточиться на разработке подзадач и легко интегрировать их со всем заданием конвейера. Компонент конвейера имеет четко определенный входной и выходной интерфейс, поэтому пользователям компонента многоэтапного конвейера не нужно знать сведения о реализации компонента.

Оба компонента конвейера и задания конвейера содержат группы шагов или компонентов, но определение компонента конвейера отличается от определения задания конвейера следующим образом:

  • Компоненты конвейера определяют только интерфейсы входных и выходных данных. В компоненте конвейера вы явно задаете типы входных и выходных данных, но не назначаете им напрямую значения.
  • Компоненты конвейера не имеют параметров среды выполнения, поэтому вы не можете жестко закодировать вычислительный узел или узел данных в компоненте конвейера. Вместо этого необходимо повысить уровень этих узлов в качестве входных данных на уровне конвейера и назначить значения во время выполнения.
  • Такие параметры уровня конвейера, как default_datastore и default_compute параметры среды выполнения, которые не являются частью определений компонентов конвейера.

Необходимые компоненты

Создание заданий конвейера с помощью компонентов конвейера

Можно определить несколько шагов в качестве компонента конвейера, а затем использовать многоэтапный компонент, как и любой другой компонент для создания задания конвейера.

Определение компонентов конвейера

Для создания компонента конвейера можно использовать несколько компонентов, аналогичных созданию заданий конвейера с компонентами.

Следующий пример приводится из конвейера pipeline_with_train_eval_pipeline_component в репозитории Машинное обучение Azure GitHub.

Пример компонента определяет задание конвейера с тремя узлами. Два узла в примере задания конвейера используют локально определенные компоненты trainиscoreeval. Следующий код определяет компонент конвейера:

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

Использование компонентов в конвейерах

Вы ссылаетесь на компоненты конвейера в качестве дочерних заданий в задании конвейера так же, как и на другие типы компонентов. Можно указать параметры среды выполнения, такие как default_datastore и default_compute на уровне задания конвейера.

Необходимо повысить уровень всех параметров, которые необходимо изменить во время выполнения в качестве входных данных задания конвейера. В противном случае они жестко закодируются в компоненте конвейера. Повышение определения вычислений в входные данные уровня конвейера поддерживает разнородные конвейеры, которые могут использовать различные целевые объекты вычислений в различных шагах.

Чтобы отправить задание конвейера, измените cpu-cluster default_compute его перед выполнением az ml job create -f pipeline.yml команды.

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

Примечание

Чтобы предоставить общий доступ к компонентам или повторно использовать их в рабочей области, необходимо зарегистрировать компоненты. Можно использовать az ml component create для регистрации компонентов конвейера.

Другие примеры и сведения, связанные с компонентом конвейера Azure CLI, можно найти в репозитории Машинное обучение Azure примеров конвейеров и компонентов.