Netflix的Metaflow:可重现的机器学习管道

2020-12-22 01:56:47

可重现。我们将能够从任何模型到其数据画一条线。

通常,管道将至少在这些区域之一中进行权衡。管道可能是可伸缩的,但将依赖于限制数据科学家的平台。或者,管道将是完全可配置的,但也将被一堆临时代码粘合在一起,并且将无法重现。

在本文中,我想介绍一种无需任何折衷即可构建这种理想管道的方法。为此,我们将使用Netflix的开源数据科学框架Metaflow和我们用于机器学习的开源部署平台Cortex。

Metaflow是一个数据科学框架,它提供了一个用于管理基础架构堆栈不同部分的API。它着重于可伸缩性,可再现性和可用性。

在较高的层次上,Metaflow允许我们将管道定义为DAG(称为“流”),其中数据经过一系列称为“步骤”的转换。这些步骤将转换后的数据保留为“数据工件”,整个流程中的后续步骤都可以访问这些数据。

例如,假设我们有一个训练流程来加载数据(可能由另一个流程产生),用不同的策略训练多个模型,评估不同的模型,并保存表现最好的模型:

这只是我们完整流程的快照,我将在下一节中对其进行补充,但是即使只有这一段代码,我们仍具有可重复使用的培训流程,可以扩展到在多台机器上运行。借助Metaflow的Client API,我们还拥有一种版本,审核和复制这些培训运行的方法。

例如,要实例化先前流程中的给定步骤,我们只需将流程名称,运行ID和步骤名称传递给Metaflow Client:

这意味着每次执行流时,Metaflow都会使用标准分类法自动进行版本控制和记录。因此,我们可以跟踪任何给定模型的沿袭,从原始数据到最终出口。

Metaflow有更多功能,我鼓励您查看他们的文档以了解更多信息,但是作为介绍,这应该有助于我们入门。

在本部分中,我将从之前的培训流程中汲取经验,并添加一个步骤将模型作为生产API部署到AWS上。为此,我们将使用Cortex。

Cortex是用于机器学习的部署平台。从表面上看,它提供了用于构建预测服务,将其部署到生产中以及管理推理集群的简单界面。

在后台,Cortex使推理所需的所有云基础架构自动化(自动缩放,GPU / ASIC支持,负载平衡,预测跟踪等),并实现了自动部署过程,在该过程中,模型服务代码被打包,版本化并部署到簇。

我们可以在训练流程中使用Cortex的Python客户端触发部署,如下所示:

您会注意到,客户端包括一个deploy()方法,该方法带有一个用于定义我们的API的配置对象。此配置与Metaflow客户端一起使用,以提取模型的位置以及流的元数据以进行记录。现在,当我们审核部署时,我们可以将其一直连接到生成它的运行中,从而将沿袭从数据扩展到部署。

配置对象还引用了预报.py脚本,在该脚本中定义了实际的预报服务。 Cortex预测变量如下所示:

结构非常简单。我们在init()函数中初始化我们的模型,该函数在初始部署时运行,并在predict()函数中生成预测。与Metaflow中的步骤类似,这些Python方法可以包含您想要实现的任何逻辑。

现在,当我们运行流程时,将对模型进行训练,评估并部署到生产中,而停机时间为零或需要额外的配置。

由于Cortex为A / B测试和流量拆分提供了本机支持,因此我们甚至可以运行复杂的部署策略而不会破坏Metaflow的血统。

例如,如果在选择最佳模型后,我们想测试模型以不同格式执行的方式(例如ONNX与TensorFlow),则可以导出模型的两个版本,将它们都部署在A / B测试中并记录其性能。因为我们的培训流程与我们的部署有关,所以我们可以毫无问题地在Cortex和Metaflow之间来回传递此信息。

多年来,已经发布了许多端到端数据科学平台,其中大多数陷入了同样的陷阱:

提供一个平滑的界面,对幕后的事情零透明度,破坏了可重复性和审核。 很好地解决堆栈的一部分,例如进行培训,但为其他部分(例如部署)“加强”未开发的解决方案。 仅通过支持特定的框架和集成,将数据科学家和机器学习工程师锁定在狭窄的堆栈中。 这样的结果是一个平台,如果您严格遵守系统的规定,可以轻松进行生产机器学习。 但是,当您要解决各种问题时,这很难做到。 Metaflow和Cortex代表了一种根本不同的以人为本的方法。 重点不是在为一系列问题提供魔术解决方案,而是在为构建针对任何问题的解决方案提供简便的界面。 如果您有兴趣探索这两个平台,请查看以下链接: