我是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路径上存储了一些数据)但是,我在文档中找不到有用的函数。如有任何指导,将不胜感激。
发布于 2021-03-24 22:47:56
这里有两个大的想法--让我们从主要的一个开始。
主问
使用Azure管道,如何在管道上下文之外访问
PythonScriptStep的输出数据?
简短回答
考虑使用OutputFileDatasetConfig (文档 示例)而不是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的工作方式。乍一看可能很棘手。更多语境
PipelineData曾经是在管道步骤之间短暂传递数据的事实上的对象。这样做的目的是使下列事项变得容易:
datastore/azureml/{run_id}/data_ref)缺点是,您无法控制管道的保存位置。如果您想要的数据不仅仅是在各个步骤之间传递的接力棒,那么在DataTransferStep完成PipelineData之后,您可以让它在任何地方登陆PythonScriptStep。
这一缺点正是驱动OutputFileDatasetConfig的原因。
辅助问句
如何以编程方式测试Azure ML管道的功能?
没有足够的人谈论数据管道测试,IMHO。
有三个领域的数据管道测试:
对于#1,我认为应该在管道之外完成,也许作为#2的助手函数包的一部分,为什么不只是看看整个管道是否完成了,我认为这样可以获得更多的信息。我们就是这么运作我们的线人的。
#3是最简单的,我们在管道中使用远大期望(GE)库来实现这一点。通用电气社区称这些为“预期测试”。对我来说,在Azure ML管道中包含期望值测试有两个选项:
PythonScriptStep本身内,即PythonScriptStep,都要挂起一个下游PythonScriptStep,在其中您可以根据输出数据运行您的期望。我们的团队做第一,但这两种策略都应该有效。这种方法的好处在于,您只需运行管道就可以运行预期测试(这也使集成测试变得更容易)。
https://stackoverflow.com/questions/66785273
复制相似问题