我开始使用Azure机器学习服务。它具有一项名为Pipeline的功能,目前我正在尝试使用。但是,还有很多事情在文档和示例中还不清楚,我正在努力完全理解这个概念。
答案 0 :(得分:4)
安德斯(Anders)有一个很好的答案,但我将在#1上作一些扩展。在您看到的批处理评分示例中,假设是已经有一个经过训练的模型,该模型可能来自另一个管道,或者对于笔记本而言,这是一个完全不在管道中构建的预先训练的模型
但是,在同一管道中同时运行训练和预测是有效的用例。使用allow_reuse
参数并将其设置为True
,这会将步骤输出缓存在管道中,以防止不必要的重新运行。
以模型训练步骤为例,并考虑该步骤的以下输入:
如果您设置allow_reuse=True
,并且您的训练脚本,输入数据和其他步骤参数与管道上次运行的时间相同,则它将不会重新运行该步骤,它将使用从管道中缓存的输出。上次管道运行。但是,假设您的数据输入已更改,则该步骤将重新运行。
通常,管道是相当模块化的,您可以按照自己认为合适的方式构建它们。您可以维护用于培训和评分的单独管道,也可以将所有内容捆绑在一个管道中,但要利用自动缓存。
答案 1 :(得分:3)
Azure ML管道的最佳实践应运而生,因此我可以向您提供一些建议,但是如果其他人以不同意见深深地回应,我会感到惊讶。 Azure ML产品组也在以惊人的速度改进和扩展该产品,因此我完全相信事情会随着时间的推移而发生变化(变得更好)。 This article很好地解释了ML管道
如何在下一步中获得模型?
在开发过程中,建议您不要注册模型,并且评分步骤会通过PipelineData
作为腌制文件接收模型。
在生产中,计分步骤应使用先前注册的模型。
我们的团队使用的PythonScriptStep
带有脚本参数,该参数允许从上游步骤传递模型或从注册表中获取模型。下面的屏幕快照显示了使用名为PipelineData
的{{1}}的批次得分步骤,其中包含来自best_run_data
的最佳模型(保存为model.pkl
)。
我们的HyperDriveStep
的定义具有布尔参数batch_score_step
,该布尔参数确定是使用最近训练的模型,还是使用模型注册表。我们使用函数get_model_path()
来遍历脚本arg。以上的Here are some code snippets。
哪些部分应作为流水线步骤实现,哪些部分不应该?
您对数据所做的所有转换(删节,特征化,训练,评分)都应在'--use_model_registry'
内进行。输入和输出应为PipelineStep
。
Azure ML工件应为:
-使用PipelineData
在管道控制平面中创建,并且
-注册:
-临时运行,而不是每次运行都运行,或
-当您需要在管道之间传递工件时。
通过这种方式,PipelineData
是直接连接管道步骤的胶水,而不是通过PipelineData
和.register()
间接连接
.download()
最终只是临时目录,在运行步骤来创建和注册工件之前,它们也可用作占位符。
PipelineData
是Dataset
的抽象,因为它们使事情更容易传递给PipelineData
和AutoMLStep
以及HyperDriveStep
这是否意味着“预测部分”与“训练部分”是同一管道的一部分,还是应该为此单独设置2条单独的管道?
您的管道架构取决于是否:
如果您需要实时评分,则应该deploy your model。如果批量计分,可以。您可以拥有: