首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从PythonScriptStep访问输出文件夹?

如何从PythonScriptStep访问输出文件夹?
EN

Stack Overflow用户
提问于 2021-03-24 16:25:38
回答 1查看 1.4K关注 0票数 1

我是azure-ml新手,我的任务是为几个管道步骤进行一些集成测试。我准备了一些输入测试数据和一些预期的输出数据,并将它们存储在'test_datastore'上。下面的示例代码是我想要做的事情的简化版本:

代码语言:javascript
复制
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路径上存储了一些数据)
  • 然后,我想在管道之外访问这些存储的数据。

但是,我在文档中找不到有用的函数。如有任何指导,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-24 22:47:56

这里有两个大的想法--让我们从主要的一个开始。

主问

使用Azure管道,如何在管道上下文之外访问PythonScriptStep的输出数据?

简短回答

考虑使用OutputFileDatasetConfig (文档 示例)而不是DataReference

对于上面的例子,我只需要更改最后两个定义。

代码语言:javascript
复制
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()方法中设置`.as_upload。

更多语境

PipelineData曾经是在管道步骤之间短暂传递数据的事实上的对象。这样做的目的是使下列事项变得容易:

  1. 针法
  2. 如果需要,在管道运行后获取数据(datastore/azureml/{run_id}/data_ref)

缺点是,您无法控制管道的保存位置。如果您想要的数据不仅仅是在各个步骤之间传递的接力棒,那么在DataTransferStep完成PipelineData之后,您可以让它在任何地方登陆PythonScriptStep

这一缺点正是驱动OutputFileDatasetConfig的原因。

辅助问句

如何以编程方式测试Azure ML管道的功能?

没有足够的人谈论数据管道测试,IMHO。

有三个领域的数据管道测试:

  1. 单元测试(步骤中的代码有效吗?)
  2. 集成测试(代码在提交到Azure ML服务时工作)
  3. 数据期望测试(来自数据的数据符合我的期望)

对于#1,我认为应该在管道之外完成,也许作为#2的助手函数包的一部分,为什么不只是看看整个管道是否完成了,我认为这样可以获得更多的信息。我们就是这么运作我们的线人的。

#3是最简单的,我们在管道中使用远大期望(GE)库来实现这一点。通用电气社区称这些为“预期测试”。对我来说,在Azure ML管道中包含期望值测试有两个选项:

  1. PythonScriptStep本身内,即
    1. 运行您拥有的任何代码
    2. 在写出输出之前先用通用电气进行测试;或

  2. 对于每个功能性PythonScriptStep,都要挂起一个下游PythonScriptStep,在其中您可以根据输出数据运行您的期望。

我们的团队做第一,但这两种策略都应该有效。这种方法的好处在于,您只需运行管道就可以运行预期测试(这也使集成测试变得更容易)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66785273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档