Управление входными и выходными данными компонента и конвейера
В этой статье раскрываются следующие темы.
- Обзор входных и выходных данных в компоненте и конвейере
- Повышение уровня входных и выходных данных компонентов для конвейера входных и выходных данных
- Определение необязательных входных данных
- Настройка пути вывода
- Скачивание выходных данных
- Регистрация выходных данных в качестве именованного ресурса
Обзор входных и выходных данных
Машинное обучение Azure конвейеры поддерживают входные и выходные данные как на уровне компонента, так и на уровне конвейера.
На уровне компонента входные и выходные данные определяют интерфейс компонента. Выходные данные одного компонента можно использовать в качестве входных данных для другого компонента в одном родительском конвейере, что позволяет передавать данные или модели между компонентами. Эта взаимосоединение формирует граф, иллюстрируя поток данных в конвейере.
На уровне конвейера входные и выходные данные полезны для отправки заданий конвейера с различными входными данными или параметрами, которые управляют логикой обучения (например learning_rate
). Они особенно полезны при вызове конвейера через конечную точку REST. Эти входные и выходные данные позволяют назначать различные значения входным данным конвейера или получать доступ к выходным данным заданий конвейера через конечную точку REST. Дополнительные сведения см. в статье "Создание заданий и входных данных" для конечной точки пакетной службы.
Типы входных и выходных данных
Следующие типы поддерживаются как выходные данные компонента или конвейера.
типы данных; Проверьте типы данных в Машинное обучение Azure, чтобы узнать больше о типах данных.
uri_file
uri_folder
mltable
Типы моделей.
mlflow_model
custom_model
Использование выходных данных или моделей по сути сериализует выходные данные и сохраняет их в виде файлов в расположении хранилища. В последующих шагах это расположение хранилища можно подключить, скачать или отправить в целевую файловую систему вычислений, что позволяет следующему шагу получить доступ к файлам во время выполнения задания.
Для этого процесса требуется исходный код компонента, сериализующий нужный выходной объект ( обычно хранящийся в памяти) в файлы. Например, можно сериализовать кадр данных Pandas в виде CSV-файла. Обратите внимание, что Машинное обучение Azure не определяет стандартные методы для сериализации объектов. В качестве пользователя вы можете выбрать предпочтительный метод сериализации объектов в файлы. После этого в нижнем компоненте можно независимо десериализировать и читать эти файлы. Ниже приведены несколько примеров для справки:
- В примере nyc_taxi_data_regression компонент подготовки имеет выходные
uri_folder
данные типа. В исходном коде компонента он считывает CSV-файлы из входной папки, обрабатывает файлы и записывает обработанные CSV-файлы в выходную папку. - В nyc_taxi_data_regression примере компонент обучения имеет выходные
mlflow_model
данные типа. В исходном коде компонента он сохраняет обученную модель с помощьюmlflow.sklearn.save_model
метода.
Помимо указанных выше типов данных или моделей, входные данные конвейера или компонента также могут быть следующими примитивными типами .
string
number
integer
boolean
В nyc_taxi_data_regression примере компонент обучения имеет входные number
данныеtest_split_ratio
.
Примечание.
Выходные данные примитивных типов не поддерживаются.
Путь и режим для входных и выходных данных
Для входных и выходных данных ресурса данных необходимо указать параметр, указывающий path
на расположение данных. В этой таблице показаны различные расположения данных, поддерживаемые конвейером Машинное обучение Azure, а также примеры параметров пути:
Местонахождение | Примеры | Входные данные | Выходные данные |
---|---|---|---|
Путь к локальному компьютеру | ./home/username/data/my_data |
✓ | |
Путь к общедоступному HTTP(S)-серверу | https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv |
✓ | |
Путь к службе хранилища Azure | wasbs://<container_name>@<account_name>.blob.core.windows.net/<path> abfss://<file_system>@<account_name>.dfs.core.windows.net/<path> |
Не рекомендуется, так как для чтения данных может потребоваться дополнительная конфигурация удостоверений. | |
Путь к хранилищу данных Машинное обучение Azure | azureml://datastores/<data_store_name>/paths/<path> |
✓ | ✓ |
Путь к ресурсу данных | azureml:<my_data>:<version> |
✓ | ✓ |
Примечание.
Для входных и выходных данных в хранилище мы настоятельно рекомендуем использовать путь к хранилищу Машинное обучение Azure вместо прямого служба хранилища Azure пути. Путь к хранилищу данных поддерживается в различных типах заданий в конвейере.
Для ввода и вывода данных можно выбрать различные режимы (скачивание, подключение или отправка), чтобы определить способ доступа к данным в целевом объекте вычислений. В этой таблице показаны возможные режимы для различных сочетаний типов,ввода и вывода.
Тип | Ввод-вывод | upload |
download |
ro_mount |
rw_mount |
direct |
eval_download |
eval_mount |
---|---|---|---|---|---|---|---|---|
uri_folder |
Входные данные | ✓ | ✓ | ✓ | ||||
uri_file |
Входные данные | ✓ | ✓ | ✓ | ||||
mltable |
Входные данные | ✓ | ✓ | ✓ | ✓ | ✓ | ||
uri_folder |
Выходные данные | ✓ | ✓ | |||||
uri_file |
Выходные данные | ✓ | ✓ | |||||
mltable |
Выходные данные | ✓ | ✓ | ✓ |
Примечание.
В большинстве случаев рекомендуется использовать ro_mount
или rw_mount
режим. Дополнительные сведения о режиме см. в режимах ресурса данных.
Визуальное представление в Студия машинного обучения Azure
На следующих снимках экрана приведен пример отображения входных и выходных данных в задании конвейера в Студия машинного обучения Azure. Это конкретное задание с именем nyc-taxi-data-regression
можно найти в azureml-example.
На странице задания конвейера студии входные и выходные данные компонента типа данных/модели отображаются в виде небольшого круга в соответствующем компоненте, известном как порт ввода и вывода. Эти порты представляют поток данных в конвейере.
Выходные данные уровня конвейера отображаются в виде фиолетового поля для простой идентификации.
При наведении указателя мыши на порт ввода и вывода отображается тип.
Входные данные примитивных типов не отображаются на графе. Его можно найти на вкладке Параметры панели обзора задания конвейера (для входных данных уровня конвейера) или на панели компонентов (для входных данных на уровне компонента). На снимка экрана показана вкладка Параметры задания конвейера, которую можно открыть, выбрав ссылку "Обзор задания".
Если вы хотите проверка входные данные для компонента, дважды щелкните компонент, чтобы открыть панель компонентов.
Аналогичным образом при редактировании конвейера в конструкторе можно найти входные и выходные данные конвейера на панели интерфейса конвейера, а также входные и выходные данные компонента на панели компонента (триггер, дважды щелкнув компонент).
Повышение уровня входных и выходных данных компонентов на уровне конвейера
Повышение входных и выходных данных компонента на уровне конвейера позволяет перезаписать входные и выходные данные компонента при отправке задания конвейера. Кроме того, полезно активировать конвейер с помощью конечной точки REST.
Ниже приведены примеры для повышения входных и выходных данных компонентов до входных и выходных данных на уровне конвейера.
$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}}
Полный пример можно найти в конвейере train-score-eval с зарегистрированными компонентами. Этот конвейер обеспечивает три входных и три выходных данных на уровне конвейера. Давайте рассмотрим pipeline_job_training_max_epocs
как пример. Он объявлен в разделе inputs
на корневом уровне, что означает входные данные на уровне конвейера. В jobs -> train_job
разделе указано max_epocs
${{parent.inputs.pipeline_job_training_max_epocs}}
имя входных данных, которое указывает train_job
, что входные ссылки на входные max_epocs
pipeline_job_training_max_epocs
данные уровня конвейера. Аналогичным образом можно повысить выходные данные конвейера с помощью той же схемы.
Студия
Входные данные компонента можно повысить до входных данных на уровне конвейера на странице разработки конструктора. Перейдите на панель параметров компонента, дважды щелкнув компонент .> Найдите входные данные, которые вы хотите повысить.> Выберите три точки справа .> Выберите "Добавить в входные данные конвейера".
Необязательные входные данные
По умолчанию все входные данные являются обязательными и должны быть назначены значение (или значение по умолчанию) при каждом отправке задания конвейера. Однако могут быть экземпляры, в которых требуются необязательные входные данные. В таких случаях у вас есть гибкость, чтобы не назначать входные данные при отправке задания конвейера.
Необязательные входные данные могут быть полезны в следующих двух сценариях:
Если у вас есть необязательные входные данные или тип модели и не назначаете ему значение при отправке задания конвейера, в конвейере будет компонент, который не имеет предыдущей зависимости данных. Другими словами, входной порт не связан с каким-либо компонентом или узлом модели или данными. Это приводит к тому, что служба конвейера напрямую вызывает этот компонент, а не ожидает готовности предыдущей зависимости.
Снимок экрана ниже содержит четкий пример второго сценария. Если для конвейера установлен
continue_on_step_failure = True
второй узел (node2), который использует выходные данные первого узла (node1) в качестве необязательных входных данных, node2 по-прежнему будет выполняться, даже если узел1 завершается ошибкой. Однако если узел 2 использует необходимые входные данные из node1, он не будет выполнен, если узел1 завершается ошибкой.
Ниже приведены примеры определения необязательных входных данных.
$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
version: 9
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}}
Если входные данные заданы как optional = true
, необходимо использовать для $[[]]
применения командной строки с входными данными. См. выделенные строки в приведенном выше примере.
Примечание.
Необязательные выходные данные не поддерживаются.
В графе конвейера необязательные входные данные типа Data/Model представлены точками круга. Необязательные входные данные примитивных типов можно найти на вкладке Параметры. В отличие от обязательных входных данных, необязательные входные данные не имеют звездочки рядом с ними, что означает, что они не являются обязательными.
Настройка выходного пути
По умолчанию выходные данные компонента будут храниться в azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}
. Клиент {default_datastore}
хранилища данных по умолчанию настроен для конвейера. Если не задано хранилище BLOB-объектов рабочей области. Это {name}
имя задания, которое будет разрешено во время выполнения задания. Это {output_name}
имя выходных данных, определенное в компоненте YAML.
Но вы также можете настроить место хранения выходных данных, определив путь к выходным данным. Ниже приведен пример:
Определяет pipeline.yaml
конвейер с тремя выходными данными уровня конвейера. Полный YAML можно найти в конвейере train-score-eval с примером зарегистрированных компонентов.
Для задания пользовательского пути вывода для выходных pipeline_job_trained_model
данных можно использовать следующую команду.
# 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
Скачивание выходных данных
Вы можете скачать выходные данные компонента или выходные данные конвейера ниже.
Скачивание выходных данных уровня конвейера
# 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>
Скачивание выходных данных дочернего задания
Когда необходимо скачать выходные данные дочернего задания (выходные данные компонента, которые не способствуют уровню конвейера), сначала следует перечислить все дочерние сущности задания конвейера, а затем использовать аналогичный код для скачивания выходных данных.
# 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>
Регистрация выходных данных в качестве именованного ресурса
Вы можете зарегистрировать выходные данные компонента или конвейера в качестве именованного ресурса, назначив name
и version
выходные данные. Зарегистрированный ресурс может быть указан в рабочей области с помощью пользовательского интерфейса студии или интерфейса командной строки или пакета SDK, а также ссылаться на ваши будущие задания.
Регистрация выходных данных конвейера
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
Регистрация выходных данных дочернего задания
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