PipelineData 类
表示 Azure 机器学习管道中的中间数据。
管道中使用的数据可以通过一个步骤生成,并在另一个步骤中通过提供 PipelineData 对象作为一个步骤的输出以及一个或多个后续步骤的输入来使用。
请注意:如果要使用管道数据,请确保使用的目录已存在。
下面是一个可确保目录已存在的 Python 示例,其中假设你在一个管道步骤中有一个名为 output_folder 的输出端口,你想要将一些数据写入此文件夹中的相对路径。
import os
os.makedirs(args.output_folder, exist_ok=True)
f = open(args.output_folder + '/relative_path/file_name', 'w+')
PipelineData 使用 DataReference 基础,不再建议使用这种方法进行数据访问和传递,请改为使用 OutputFileDatasetConfig,可在此处找到示例:使用 OutputFileDatasetConfig 的管道。
初始化 PipelineData。
- 继承
-
builtins.objectPipelineData
构造函数
PipelineData(name, datastore=None, output_name=None, output_mode='mount', output_path_on_compute=None, output_overwrite=None, data_type=None, is_directory=None, pipeline_output_name=None, training_output=None)
参数
名称 | 说明 |
---|---|
name
必需
|
PipelineData 对象的名称,只能包含字母、数字和下划线。 PipelineData 名称用于标识步骤的输出。 管道运行完成后,可以将步骤名称与输出名称搭配使用来访问特定的输出。 名称在管道中的单个步骤内应该是唯一的。 |
datastore
|
PipelineData 将驻留的数据存储。 如果未指定,将使用默认数据存储。 默认值: None
|
output_name
|
输出的名称(如果未使用任何名称)。 只能包含字母、数字和下划线。 默认值: None
|
output_mode
|
指定生成步骤是使用“上传”还是“装载”方法来访问数据。 默认值: mount
|
output_path_on_compute
|
如果 默认值: None
|
output_overwrite
|
如果 默认值: None
|
data_type
|
可选。 数据类型可用于指定输出的预期类型,并详细说明使用步骤使用数据的方式。 可以是任何用户定义的字符串。 默认值: None
|
is_directory
|
指定数据是目录还是单个文件。 这仅在未提供 默认值: None
|
pipeline_output_name
|
如果提供了该参数,此输出将通过使用 默认值: None
|
training_output
|
定义训练结果的输出。 只有特定的训练需要此值,这会导致不同种类的输出,例如指标和模型。 例如,AutoMLStep 将生成指标和模型。 还可以定义用于获取最佳模型的特定训练迭代或指标。 对于 HyperDriveStep,你还可以定义要包括在输出中的特定模型文件。 默认值: None
|
name
必需
|
PipelineData 对象的名称,只能包含字母、数字和下划线。 PipelineData 名称用于标识步骤的输出。 管道运行完成后,可以将步骤名称与输出名称搭配使用来访问特定的输出。 名称在管道中的单个步骤内应该是唯一的。 |
datastore
必需
|
PipelineData 将驻留的数据存储。 如果未指定,将使用默认数据存储。 |
output_name
必需
|
输出的名称(如果未使用任何名称)。 只能包含字母、数字和下划线。 |
output_mode
必需
|
指定生成步骤是使用“上传”还是“装载”方法来访问数据。 |
output_path_on_compute
必需
|
如果 |
output_overwrite
必需
|
如果 |
data_type
必需
|
可选。 数据类型可用于指定输出的预期类型,并详细说明使用步骤使用数据的方式。 可以是任何用户定义的字符串。 |
is_directory
必需
|
指定数据是目录还是单个文件。 这仅在未提供 |
pipeline_output_name
必需
|
如果提供了该参数,此输出将通过使用 |
training_output
必需
|
定义训练结果的输出。 只有特定的训练需要此值,这会导致不同种类的输出,例如指标和模型。 例如,AutoMLStep 将生成指标和模型。 还可以定义用于获取最佳模型的特定训练迭代或指标。 对于 HyperDriveStep,还可以定义要包括在输出中的特定模型文件。 |
注解
PipelineData 表示在运行某个步骤时将生成的数据输出。 创建步骤来描述将由步骤生成的文件或目录时,请使用 PipelineData。 这些数据输出将添加到指定的数据存储,并且可以在以后检索和查看。
例如,下面的管道步骤将生成一个名为“model”的输出:
from azureml.pipeline.core import PipelineData
from azureml.pipeline.steps import PythonScriptStep
datastore = ws.get_default_datastore()
step_output = PipelineData("model", datastore=datastore)
step = PythonScriptStep(script_name="train.py",
arguments=["--model", step_output],
outputs=[step_output],
compute_target=aml_compute,
source_directory=source_directory)
在这种情况下,train.py 脚本会将其生成的模型写入通过 –model 自变量提供给脚本的位置。
构造管道来描述步骤依赖项时,也要用到 PipelineData 对象。 若要指定某个步骤需要另一个步骤的输出作为输入,请在这两个步骤的构造函数中使用 PipelineData 对象。
例如,管道训练步骤取决于管道处理步骤的 process_step_output 输出:
from azureml.pipeline.core import Pipeline, PipelineData
from azureml.pipeline.steps import PythonScriptStep
datastore = ws.get_default_datastore()
process_step_output = PipelineData("processed_data", datastore=datastore)
process_step = PythonScriptStep(script_name="process.py",
arguments=["--data_for_train", process_step_output],
outputs=[process_step_output],
compute_target=aml_compute,
source_directory=process_directory)
train_step = PythonScriptStep(script_name="train.py",
arguments=["--data_for_train", process_step_output],
inputs=[process_step_output],
compute_target=aml_compute,
source_directory=train_directory)
pipeline = Pipeline(workspace=ws, steps=[process_step, train_step])
这将创建具有两个步骤的管道。 首先将执行进程步骤,然后在该步骤完成后,将执行训练步骤。 Azure 机器学习会将进程步骤生成的输出提供给训练步骤。
有关使用 PipelineData 构造管道的更多示例,请参阅此页:https://aka.ms/pl-data-dep
对于支持的计算类型,还可以使用 PipelineData 来指定运行将生成和使用数据的方式。 有两个支持的方法:
装载(默认):输入或输出数据装载到计算节点上的本地存储,并且环境变量设置为指向此数据的路径 ($AZUREML_DATAREFERENCE_name)。 为方便起见,可以将 PipelineData 对象作为脚本的其中一个参数传入(例如,使用 PythonScriptStep 的
arguments
参数),该对象将解析为数据的路径。 对于输出,计算脚本应在此输出路径中创建文件或目录。 若要查看将管道对象作为参数传入时所使用的环境变量的值,请使用 get_env_variable_name 方法。上传:指定与脚本将生成的文件或目录名称对应的
output_path_on_compute
。 (在这种情况下不使用环境变量。)
方法
as_dataset |
将中间输出提升到数据集。 此数据集将在执行步骤后存在。 请注意,必须将输出提升为数据集,才能将后续输入作为数据集使用。 如果 as_dataset 未对输出调用,而仅对输入调用,则它将是 noop,而且输入不会作为数据集使用。 下面的代码示例演示了 as_dataset 的正确用法:
|
as_download |
将 PipelineData 作为下载使用。 |
as_input |
创建 InputPortBinding 并指定输入名称(但使用默认模式)。 |
as_mount |
将 PipelineData 作为装载使用。 |
create_input_binding |
创建输入绑定。 |
get_env_variable_name |
为此 PipelineData 返回环境变量的名称。 |
as_dataset
将中间输出提升到数据集。
此数据集将在执行步骤后存在。 请注意,必须将输出提升为数据集,才能将后续输入作为数据集使用。 如果 as_dataset 未对输出调用,而仅对输入调用,则它将是 noop,而且输入不会作为数据集使用。 下面的代码示例演示了 as_dataset 的正确用法:
# as_dataset is called here and is passed to both the output and input of the next step.
pipeline_data = PipelineData('output').as_dataset()
step1 = PythonScriptStep(..., outputs=[pipeline_data])
step2 = PythonScriptStep(..., inputs=[pipeline_data])
as_dataset()
返回
类型 | 说明 |
---|---|
作为数据集的中间输出。 |
as_download
将 PipelineData 作为下载使用。
as_download(input_name=None, path_on_compute=None, overwrite=None)
参数
名称 | 说明 |
---|---|
input_name
|
用于指定此输入的名称。 默认值: None
|
path_on_compute
|
要下载到的计算上的路径。 默认值: None
|
overwrite
|
用于指示是否覆盖现有数据。 默认值: None
|
返回
类型 | 说明 |
---|---|
以此 PipelineData 作为源的 InputPortBinding。 |
as_input
创建 InputPortBinding 并指定输入名称(但使用默认模式)。
as_input(input_name)
参数
名称 | 说明 |
---|---|
input_name
必需
|
用于指定此输入的名称。 |
返回
类型 | 说明 |
---|---|
以此 PipelineData 作为源的 InputPortBinding。 |
as_mount
将 PipelineData 作为装载使用。
as_mount(input_name=None)
参数
名称 | 说明 |
---|---|
input_name
|
用于指定此输入的名称。 默认值: None
|
返回
类型 | 说明 |
---|---|
以此 PipelineData 作为源的 InputPortBinding。 |
create_input_binding
创建输入绑定。
create_input_binding(input_name=None, mode=None, path_on_compute=None, overwrite=None)
参数
名称 | 说明 |
---|---|
input_name
|
输入的名称。 默认值: None
|
mode
|
用于访问 PipelineData 的模式(“装载”或“下载”)。 默认值: None
|
path_on_compute
|
对于“下载”模式,数据将驻留的计算的路径。 默认值: None
|
overwrite
|
对于“下载”模式,是否覆盖现有数据。 默认值: None
|
返回
类型 | 说明 |
---|---|
以此 PipelineData 作为源的 InputPortBinding。 |