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。
构造函数
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 名称,则输出的名称。 只能包含字母、数字和下划线。 默认值: None
|
output_mode
|
指定生成步骤是使用“upload”还是“mount”方法来访问数据。 默认值: 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
必需
|
如果使用了 None 名称,则输出的名称。 只能包含字母、数字和下划线。 |
output_mode
必需
|
指定生成步骤是使用“upload”还是“mount”方法来访问数据。 |
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 参数提供给脚本的位置。
在构造 Pipelines 以描述步骤依赖项时,还使用 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 ML 将向训练步骤提供过程步骤生成的输出。
有关使用 PipelineData 构造管道的更多示例,请参阅此页面: https://aka.ms/pl-data-dep
对于支持的计算类型,PipelineData 还可用于指定如何由运行生成和使用数据。 有两种受支持的方法:
装载(默认值):输入或输出数据装载到计算节点上的本地存储,并设置一个环境变量,该变量指向此数据的路径($AZUREML_DATAREFERENCE_name)。 为方便起见,可以将 PipelineData 对象作为参数之一传递给脚本,例如使用
arguments
参数 PythonScriptStep,该对象将解析为数据的路径。 对于输出,计算脚本应在此输出路径上创建文件或目录。 若要查看将 Pipeline 对象作为参数传入管道对象时使用的环境变量的值,请使用 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(“mount”或“download”)的模式。 默认值: None
|
path_on_compute
|
对于“下载”模式,数据将驻留在计算上的路径。 默认值: None
|
overwrite
|
对于“下载”模式,是否覆盖现有数据。 默认值: None
|
返回
类型 | 说明 |
---|---|
将此 PipelineData 用作源的 InputPortBinding。 |