Azure机器学习管道的最佳做法

时间:2020-04-23 16:16:00

标签: machine-learning pipeline azure-machine-learning-service

我开始使用Azure机器学习服务。它具有一项名为Pipeline的功能,目前我正在尝试使用。但是,还有很多事情在文档和示例中还不清楚,我正在努力完全理解这个概念。

  1. 当我查看“批处理评分”示例时,它是作为流水线步骤实现的。这就提出了一个问题:这是否意味着“预测部分”与“训练部分”是同一管道的一部分,还是应该为此单独设置2条单独的管道?创建一个将两个步骤结合在一起的管道对于我来说似乎很奇怪,因为您不想每次将某些内容更改为训练部分时都运行预测部分(反之亦然)。
  2. 哪些部分应作为流水线步骤实施,哪些部分不应该?是否应该将创建数据存储区和数据集作为一个步骤来实现?应该注册模型吗?
  3. 在任何地方都没有显示的是如何处理模型注册表。我在训练步骤中创建模型,然后将其作为pickle文件写入输出文件夹。那呢下一步如何获取模型?我应该将其作为PipelineData对象传递吗? train.py本身应该负责注册经过训练的模型吗?

2 个答案:

答案 0 :(得分:4)

安德斯(Anders)有一个很好的答案,但我将在#1上作一些扩展。在您看到的批处理评分示例中,假设是已经有一个经过训练的模型,该模型可能来自另一个管道,或者对于笔记本而言,这是一个完全不在管道中构建的预先训练的模型

但是,在同一管道中同时运行训练和预测是有效的用例。使用allow_reuse参数并将其设置为True,这会将步骤输出缓存在管道中,以防止不必要的重新运行。

以模型训练步骤为例,并考虑该步骤的以下输入:

  • 培训脚本
  • 输入数据
  • 其他步骤参数

如果您设置allow_reuse=True,并且您的训练脚本,输入数据和其他步骤参数与管道上次运行的时间相同,则它将不会重新运行该步骤,它将使用从管道中缓存的输出。上次管道运行。但是,假设您的数据输入已更改,则该步骤将重新运行。

通常,管道是相当模块化的,您可以按照自己认为合适的方式构建它们。您可以维护用于培训和评分的单独管道,也可以将所有内容捆绑在一个管道中,但要利用自动缓存。

答案 1 :(得分:3)

Azure ML管道的最佳实践应运而生,因此我可以向您提供一些建议,但是如果其他人以不同意见深深地回应,我会感到惊讶。 Azure ML产品组也在以惊人的速度改进和扩展该产品,因此我完全相信事情会随着时间的推移而发生变化(变得更好)。 This article很好地解释了ML管道

3将模型传递到下游步骤

如何在下一步中获得模型?

在开发过程中,建议您不要注册模型,并且评分步骤会通过PipelineData作为腌制文件接收模型。

在生产中,计分步骤应使用先前注册的模型。

我们的团队使用的PythonScriptStep带有脚本参数,该参数允许从上游步骤传递模型或从注册表中获取模型。下面的屏幕快照显示了使用名为PipelineData的{​​{1}}的批次得分步骤,其中包含来自best_run_data的最佳模型(保存为model.pkl)。

enter image description here

我们的HyperDriveStep的定义具有布尔参数batch_score_step,该布尔参数确定是使用最近训练的模型,还是使用模型注册表。我们使用函数get_model_path()来遍历脚本arg。以上的Here are some code snippets

2控制平面与数据平面

哪些部分应作为流水线步骤实现,哪些部分不应该?

您对数据所做的所有转换(删节,特征化,训练,评分)都应在'--use_model_registry'内进行。输入和输出应为PipelineStep

Azure ML工件应为: -使用PipelineData在管道控制平面中创建,并且 -注册: -临时运行,而不是每次运行都运行,或 -当您需要在管道之间传递工件时。

通过这种方式,PipelineData是直接连接管道步骤的胶水,而不是通过PipelineData.register()间接连接

.download()最终只是临时目录,在运行步骤来创建和注册工件之前,它们也可用作占位符。

PipelineDataDataset的抽象,因为它们使事情更容易传递给PipelineDataAutoMLStep以及HyperDriveStep

1管道封装

这是否意味着“预测部分”与“训练部分”是同一管道的一部分,还是应该为此单独设置2条单独的管道?

您的管道架构取决于是否:

  1. 您需要实时预测(其他批次预测就足够了),
  2. 您的数据已经转换,可以进行评分了。

如果您需要实时评分,则应该deploy your model。如果批量计分,可以。您可以拥有:

  • 培训管道,您可以在管道的最后注册一个模型,然后在scoring pipeline中使用该模型,或者
  • 像我们一样做,有一个管道可以配置为使用脚本参数来做。
相关问题