如何从 PythonScriptStep 访问输出文件夹?
How to acces output folder from a PythonScriptStep?
我是 azure-ml
的新手,我的任务是为几个管道步骤进行一些集成测试。我准备了一些输入测试数据和一些预期的输出数据,我将它们存储在 'test_datastore'
上。下面的示例代码是我想要做的事情的简化版本:
ws = Workspace.from_config('blabla/config.json')
ds = Datastore.get(ws, datastore_name='test_datastore')
main_ref = DataReference(datastore=ds,
data_reference_name='main_ref'
)
data_ref = DataReference(datastore=ds,
data_reference_name='main_ref',
path_on_datastore='/data'
)
data_prep_step = PythonScriptStep(
name='data_prep',
script_name='pipeline_steps/data_prep.py',
source_directory='/.',
arguments=['--main_path', main_ref,
'--data_ref_folder', data_ref
],
inputs=[main_ref, data_ref],
outputs=[data_ref],
runconfig=arbitrary_run_config,
allow_reuse=False
)
我愿意:
- 我的
data_prep_step
到 运行,
- 让它在我的
data_ref
) 的路径上存储一些数据,并且
- 之后我想在管道外访问这些存储的数据
但是,我在文档中找不到有用的函数。任何指导将不胜感激。
这里有两个重要的想法 -- 让我们从主要的开始。
主要提问
With an Azure ML Pipeline, how can I access the output data of a PythonScriptStep
outside of the context of the pipeline?
简答
考虑使用 OutputFileDatasetConfig
(docs example),而不是 DataReference
。
对于你上面的例子,我只是改变你的最后两个定义。
data_ref = OutputFileDatasetConfig(
name='data_ref',
destination=(ds, '/data')
).as_upload()
data_prep_step = PythonScriptStep(
name='data_prep',
script_name='pipeline_steps/data_prep.py',
source_directory='/.',
arguments=[
'--main_path', main_ref,
'--data_ref_folder', data_ref
],
inputs=[main_ref, data_ref],
outputs=[data_ref],
runconfig=arbitrary_run_config,
allow_reuse=False
)
一些笔记:
- 务必查看
DataPath
的工作原理。乍一看可能很棘手。
- 如果您不希望以后的 运行 覆盖第一个 运行 的数据,请在 `.as_upload() 方法中设置
overwrite=False
。
更多上下文
PipelineData
曾经是在流水线步骤之间临时传递数据的实际对象。这个想法是为了让它更容易:
- 将步骤拼接在一起
- 如果需要在管道 运行s 之后获取数据 (
datastore/azureml/{run_id}/data_ref
)
缺点是您无法控制管道保存的位置。如果你想要的数据不仅仅是作为在步骤之间传递的接力棒,你可以有一个 DataTransferStep
在 PythonScriptStep
完成后随心所欲地降落 PipelineData
。
这个缺点是 OutputFileDatasetConfig
的动机
辅助提问
how might I programmatically test the functionality of my Azure ML pipeline?
恕我直言,谈论数据管道测试的人还不够多。
数据管道测试分为三个方面:
- 单元测试(步骤中的代码有效?
- 集成测试(代码在提交到 Azure ML 服务时有效)
- 数据预期测试(出来的数据符合我的预期)
对于 #1,我认为它应该在管道之外完成,也许作为辅助函数包的一部分
对于 #2,为什么不只查看整个管道是否完成,我想通过这种方式获得更多信息。这就是我们 运行 我们 CI.
的方式
#3 是最多汁的,我们在我们的管道中使用 Great Expectations (GE) Python 库来做到这一点。 GE 社区将这些称为“期望测试”。对我来说,在 Azure ML 管道中包含期望测试有两种选择:
- 在
PythonScriptStep
本身内,即
- 运行 无论你有什么代码
- 在写出之前用GE测试输出;或者,
- 对于每个功能
PythonScriptStep
,挂起下游 PythonScriptStep
关闭它,您 运行 您对输出数据的期望。
我们的团队做了#1,但是这两种策略都应该有效。这种方法的优点在于,您可以 运行 通过 运行 管道(这也使集成测试变得容易)来测试您的期望。
我是 azure-ml
的新手,我的任务是为几个管道步骤进行一些集成测试。我准备了一些输入测试数据和一些预期的输出数据,我将它们存储在 'test_datastore'
上。下面的示例代码是我想要做的事情的简化版本:
ws = Workspace.from_config('blabla/config.json')
ds = Datastore.get(ws, datastore_name='test_datastore')
main_ref = DataReference(datastore=ds,
data_reference_name='main_ref'
)
data_ref = DataReference(datastore=ds,
data_reference_name='main_ref',
path_on_datastore='/data'
)
data_prep_step = PythonScriptStep(
name='data_prep',
script_name='pipeline_steps/data_prep.py',
source_directory='/.',
arguments=['--main_path', main_ref,
'--data_ref_folder', data_ref
],
inputs=[main_ref, data_ref],
outputs=[data_ref],
runconfig=arbitrary_run_config,
allow_reuse=False
)
我愿意:
- 我的
data_prep_step
到 运行, - 让它在我的
data_ref
) 的路径上存储一些数据,并且 - 之后我想在管道外访问这些存储的数据
但是,我在文档中找不到有用的函数。任何指导将不胜感激。
这里有两个重要的想法 -- 让我们从主要的开始。
主要提问
With an Azure ML Pipeline, how can I access the output data of a
PythonScriptStep
outside of the context of the pipeline?
简答
考虑使用 OutputFileDatasetConfig
(docs example),而不是 DataReference
。
对于你上面的例子,我只是改变你的最后两个定义。
data_ref = OutputFileDatasetConfig(
name='data_ref',
destination=(ds, '/data')
).as_upload()
data_prep_step = PythonScriptStep(
name='data_prep',
script_name='pipeline_steps/data_prep.py',
source_directory='/.',
arguments=[
'--main_path', main_ref,
'--data_ref_folder', data_ref
],
inputs=[main_ref, data_ref],
outputs=[data_ref],
runconfig=arbitrary_run_config,
allow_reuse=False
)
一些笔记:
- 务必查看
DataPath
的工作原理。乍一看可能很棘手。 - 如果您不希望以后的 运行 覆盖第一个 运行 的数据,请在 `.as_upload() 方法中设置
overwrite=False
。
更多上下文
PipelineData
曾经是在流水线步骤之间临时传递数据的实际对象。这个想法是为了让它更容易:
- 将步骤拼接在一起
- 如果需要在管道 运行s 之后获取数据 (
datastore/azureml/{run_id}/data_ref
)
缺点是您无法控制管道保存的位置。如果你想要的数据不仅仅是作为在步骤之间传递的接力棒,你可以有一个 DataTransferStep
在 PythonScriptStep
完成后随心所欲地降落 PipelineData
。
这个缺点是 OutputFileDatasetConfig
辅助提问
how might I programmatically test the functionality of my Azure ML pipeline?
恕我直言,谈论数据管道测试的人还不够多。
数据管道测试分为三个方面:
- 单元测试(步骤中的代码有效?
- 集成测试(代码在提交到 Azure ML 服务时有效)
- 数据预期测试(出来的数据符合我的预期)
对于 #1,我认为它应该在管道之外完成,也许作为辅助函数包的一部分 对于 #2,为什么不只查看整个管道是否完成,我想通过这种方式获得更多信息。这就是我们 运行 我们 CI.
的方式#3 是最多汁的,我们在我们的管道中使用 Great Expectations (GE) Python 库来做到这一点。 GE 社区将这些称为“期望测试”。对我来说,在 Azure ML 管道中包含期望测试有两种选择:
- 在
PythonScriptStep
本身内,即- 运行 无论你有什么代码
- 在写出之前用GE测试输出;或者,
- 对于每个功能
PythonScriptStep
,挂起下游PythonScriptStep
关闭它,您 运行 您对输出数据的期望。
我们的团队做了#1,但是这两种策略都应该有效。这种方法的优点在于,您可以 运行 通过 运行 管道(这也使集成测试变得容易)来测试您的期望。