Обычно используются компоненты конвейера для разработки сложных конвейеров машинного обучения. Можно сгруппировать несколько шагов в компонент конвейера, который используется в качестве одного шага для выполнения таких задач, как предварительная обработка данных или обучение модели.
В этой статье показано, как вложить несколько шагов в компоненты, используемые для создания сложных заданий конвейера Машинное обучение Azure. Вы можете разрабатывать и тестировать эти компоненты с несколькими шагами, что помогает поделиться работой и улучшить совместную работу с участниками команды.
Используя компоненты конвейера с несколькими шагами, вы можете сосредоточиться на разработке подзадач и легко интегрировать их со всем заданием конвейера. Компонент конвейера имеет четко определенный входной и выходной интерфейс, поэтому пользователям компонента многоэтапного конвейера не нужно знать сведения о реализации компонента.
Оба компонента конвейера и задания конвейера содержат группы шагов или компонентов, но определение компонента конвейера отличается от определения задания конвейера следующим образом:
Компоненты конвейера определяют только интерфейсы входных и выходных данных. В компоненте конвейера вы явно задаете типы входных и выходных данных, но не назначаете им напрямую значения.
Компоненты конвейера не имеют параметров среды выполнения, поэтому вы не можете жестко закодировать вычислительный узел или узел данных в компоненте конвейера. Вместо этого необходимо повысить уровень этих узлов в качестве входных данных на уровне конвейера и назначить значения во время выполнения.
Такие параметры уровня конвейера, как default_datastore и default_compute параметры среды выполнения, которые не являются частью определений компонентов конвейера.
Установите Azure CLI и расширение ml. Дополнительные сведения см. в разделе Установка, настройка и использование CLI (версия 2). Расширение ml автоматически устанавливает при первом запуске az ml команды.
Создание заданий конвейера с помощью компонентов конвейера
Можно определить несколько шагов в качестве компонента конвейера, а затем использовать многоэтапный компонент, как и любой другой компонент для создания задания конвейера.
Пример компонента определяет задание конвейера с тремя узлами. Два узла в примере задания конвейера используют локально определенные компоненты trainиscoreeval. Следующий код определяет компонент конвейера:
YAML
$schema:https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.jsontype:pipelinename:train_pipeline_componentdisplay_name:train_pipeline_componentdescription:Dummytrain-score-evalpipelinecomponentwithlocalcomponentsinputs: 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:stringoutputs: trained_model: type:uri_folder evaluation_report: type:uri_folderjobs: 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}}
Вы можете определить компонент конвейера с помощью функции Python, которая аналогична определению задания конвейера с помощью функции. Вы также можете повысить уровень вычислений некоторых шагов, используемых в качестве входных данных для компонента конвейера.
@pipeline()deftrain_pipeline_component(
training_input: Input,
test_input: Input,
training_learning_rate: float,
train_compute: str,
training_max_epochs: int = 20,
learning_rate_schedule: str = "time-based",
):"""E2E dummy train-score-eval pipeline with components defined via yaml."""# Call component obj as function: apply given inputs & parameters to create a node in pipeline
train_with_sample_data = train_model(
training_data=training_input,
max_epochs=training_max_epochs,
learning_rate=training_learning_rate,
learning_rate_schedule=learning_rate_schedule,
)
train_with_sample_data.compute = train_compute
score_with_sample_data = score_data(
model_input=train_with_sample_data.outputs.model_output, test_data=test_input
)
score_with_sample_data.outputs.score_output.mode = "upload"
eval_with_sample_data = eval_model(
scoring_result=score_with_sample_data.outputs.score_output
)
# Return: pipeline outputsreturn {
"trained_model": train_with_sample_data.outputs.model_output,
"evaluation_report": eval_with_sample_data.outputs.eval_output,
}
Чтобы получить доступ к компонентам в Студия машинного обучения Azure, необходимо зарегистрировать компоненты. Чтобы зарегистрировать компоненты конвейера, выполните инструкции по регистрации компонента в рабочей области. После этого можно просмотреть и использовать компоненты на странице списка ресурсов и компонентов студии.
Вы ссылаетесь на компоненты конвейера в качестве дочерних заданий в задании конвейера так же, как и на другие типы компонентов. Можно указать параметры среды выполнения, такие как default_datastore и default_compute на уровне задания конвейера.
Необходимо повысить уровень всех параметров, которые необходимо изменить во время выполнения в качестве входных данных задания конвейера. В противном случае они жестко закодируются в компоненте конвейера. Повышение определения вычислений в входные данные уровня конвейера поддерживает разнородные конвейеры, которые могут использовать различные целевые объекты вычислений в различных шагах.
Чтобы отправить задание конвейера, измените cpu-clusterdefault_compute его перед выполнением az ml job create -f pipeline.yml команды.
YAML
$schema:https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.jsondisplay_name:pipeline_with_pipeline_componentexperiment_name:pipeline_with_pipeline_componentdescription:Selectbestmodeltrainedwithdifferentlearningratetype:pipelineinputs: 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-clusteroutputs: pipeline_job_best_model: mode:upload pipeline_job_best_result: mode:uploadsettings: default_datastore:azureml:workspaceblobstore default_compute:azureml:cpu-cluster continue_on_step_failure:falsejobs: 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 для регистрации компонентов конвейера.
Компонент конвейера можно использовать как шаг, как и другие компоненты в задании конвейера.
Python
# Construct pipeline@pipelinedefpipeline_with_pipeline_component(
training_input,
test_input,
compute_train_node,
training_learning_rate1=0.1,
training_learning_rate2=0.01,
):# Create two training pipeline component with different learning rate# Use anonymous pipeline function for step1
train_and_evaluate_model1 = train_pipeline_component(
training_input=training_input,
test_input=test_input,
training_learning_rate=training_learning_rate1,
train_compute=compute_train_node,
)
# Use registered pipeline function for step2
train_and_evaluate_model2 = registered_pipeline_component(
training_input=training_input,
test_input=test_input,
training_learning_rate=training_learning_rate2,
train_compute=compute_train_node,
)
compare2_models = compare2(
model1=train_and_evaluate_model1.outputs.trained_model,
eval_result1=train_and_evaluate_model1.outputs.evaluation_report,
model2=train_and_evaluate_model2.outputs.trained_model,
eval_result2=train_and_evaluate_model2.outputs.evaluation_report,
)
# Return: pipeline outputsreturn {
"best_model": compare2_models.outputs.best_model,
"best_result": compare2_models.outputs.best_result,
}
pipeline_job = pipeline_with_pipeline_component(
training_input=Input(type="uri_folder", path="./data/"),
test_input=Input(type="uri_folder", path="./data/"),
compute_train_node="cpu-cluster",
)
# set pipeline level compute
pipeline_job.settings.default_compute = "cpu-cluster"
Примечание
Чтобы предоставить общий доступ к компонентам или повторно использовать их в рабочей области, необходимо зарегистрировать компоненты. Можно использовать ml_client.components.create_or_update для регистрации компонентов конвейера.
После регистрации компонента конвейера можно перетащить компонент на холст конструктора студии и использовать пользовательский интерфейс для создания задания конвейера. Подробные инструкции см. в статье "Создание конвейеров с помощью зарегистрированных компонентов".
После отправки задания конвейера можно перейти на страницу сведений о задании конвейера, чтобы изменить состояние компонента конвейера. Вы также можете выполнить детализацию до дочерних компонентов в компоненте конвейера для отладки компонентов.
Узнайте, как создавать и использовать компоненты для создания конвейера в Машинном обучении Azure. Запуск и планирование конвейеров машинного обучения Azure для автоматизации рабочих процессов машинного обучения.
Управление приемом и подготовкой данных, обучением моделей и развертыванием, а также мониторингом решений машинного обучения с помощью Python, Машинное обучение Azure и MLflow.