【Metaflow】开源Metaflow,一个以人为中心的数据科学框架
视频号
微信公众号
知识星球
tl;dr Metaflow现在是开源的!从metaflow.org开始。
Netflix将数据科学应用于公司数百个用例,包括优化内容交付和视频编码。Netflix的数据科学家喜欢我们的文化,这种文化使他们能够自主工作,并利用自己的判断独立解决问题。我们希望我们的数据科学家保持好奇心,并承担可能对业务产生重大影响的明智风险。
大约两年前,我们新成立的机器学习基础设施团队开始问我们的数据科学家一个问题:“作为网飞的数据科学家,最难的事情是什么?”我们期待听到与大规模数据和模型相关的答案,也许还有与现代GPU相关的问题。相反,我们听到了一些项目的故事,在这些项目中,第一个版本的生产花费了惊人的时间——主要是因为与软件工程相关的平凡原因。我们听到了许多关于数据访问和基本数据处理困难的故事。我们参加了一些会议,数据科学家与他们的利益相关者讨论了如何在不影响生产的情况下最好地版本化不同版本的模型。我们看到了数据科学家对现代现成的机器学习库是多么兴奋,但我们也看到了这些库作为依赖项随意包含在生产工作流中时所引起的各种问题。
我们意识到,数据科学家想要做的几乎所有事情在技术上都是可行的,但没有什么是足够容易的。因此,作为一个机器学习基础设施团队,我们的工作不会主要是实现新的技术壮举。相反,我们应该让常见的操作变得如此简单,以至于数据科学家甚至不会意识到它们以前很难。我们将专注于通过狂热地以人为中心来提高数据科学家的生产力。
我们如何才能提高数据科学家的生活质量?以下图片开始出现:
我们的数据科学家喜欢能够为他们的项目选择最佳建模方法的自由。他们知道特征工程对许多模型至关重要,所以他们希望控制模型输入和特征工程逻辑。在许多情况下,数据科学家非常渴望在生产中拥有自己的模型,因为这使他们能够更快地对模型进行故障排除和迭代。
另一方面,很少有数据科学家对数据仓库、训练和评分模型的计算平台或工作流调度器的性质有强烈的感觉。从他们的角度来看,这些基础组件最好应该“发挥作用”。如果他们失败了,那么错误消息在他们的工作环境中应该是清晰易懂的。
一个关键的观察结果是,我们的大多数数据科学家都不反对编写Python代码。事实上,简单明了的Python正在迅速成为数据科学的通用语言,因此使用Python比使用特定领域的语言更可取。数据科学家希望保留使用任意、惯用的Python代码来表达业务逻辑的自由,就像他们在Jupyter笔记本上所做的那样。然而,他们不想花太多时间思考对象层次结构、打包问题或处理与他们的工作无关的晦涩API。基础设施应该允许他们行使作为数据科学家的自由,但它应该提供足够的护栏和脚手架,这样他们就不必太担心软件架构。
Metaflow简介
这些观察激发了Metaflow,这是我们以人为中心的数据科学框架。在过去的两年里,Metaflow在Netflix内部被用于构建和管理从自然语言处理到运筹学的数百个数据科学项目。
从设计上讲,Metaflow是一个看似简单的Python库:
数据科学家可以将他们的工作流程构建为步骤的有向非循环图,如上所述。这些步骤可以是任意的Python代码。在这个假设的例子中,流程并行训练一个模型的两个版本,并选择得分最高的一个。
从表面上看,这似乎并不多。有许多现有的框架,如ApacheAirflow或Luigi,它们允许执行由任意Python代码组成的DAG。魔鬼在于Metaflow的许多精心设计的细节:例如,请注意在上面的示例中,数据和模型是如何作为普通Python实例变量存储的。即使代码在分布式计算平台上执行,它们也能工作。由于Metaflow内置的内容寻址工件存储,Metaflow默认支持分布式计算平台。在许多其他框架中,工件的加载和存储留给用户做练习,这迫使他们决定什么应该持久化,什么不应该持久化。元流消除了这种认知开销。
Metaflow充满了这样以人为中心的细节,所有这些都旨在提高数据科学家的生产力。要全面了解Metaflow的所有功能,请查看我们在docs.Metaflow.org上的文档。
亚马逊网络服务上的Metaflow
Netflix的数据仓库包含数百PB的数据。虽然在Metaflow上运行的典型机器学习工作流只涉及这个仓库的一小部分,但它仍然可以处理数TB的数据。
Metaflow是一个云原生框架。它通过设计利用了云的弹性——无论是在计算还是存储方面。多年来,Netflix一直是亚马逊网络服务(AWS)的最大用户之一,我们在处理云,尤其是AWS方面积累了丰富的运营经验和专业知识。对于开源版本,我们与AWS合作,在Metaflow和各种AWS服务之间提供无缝集成。
Metaflow具有内置功能,可以自动快照Amazon S3中的所有代码和数据,这是我们内部Metaflow设置的一个关键价值主张。这为我们提供了一个全面的版本控制和实验跟踪解决方案,而无需任何用户干预,这是任何生产级机器学习基础设施的核心。
此外,Metaflow还捆绑了一个高性能S3客户端,该客户端可以加载高达10Gbps的数据。该客户端在我们的用户中非常受欢迎,他们现在可以以比以前快一个数量级的速度将数据加载到工作流中,从而实现更快的迭代周期。
对于通用数据处理,Metaflow与AWS Batch集成,后者是AWS提供的一个托管的、基于容器的计算平台。用户可以通过在代码中添加一行代码来受益于可无限扩展的计算集群:@batch。对于训练机器学习模型,除了编写自己的函数外,用户还可以选择使用AWS Sagemaker,它提供各种模型的高性能实现,其中许多模型支持分布式训练。
Metaflow通过我们的@conda decorator支持所有常见的现成机器学习框架,这允许用户安全地指定其步骤的外部依赖项。@conda decorator冻结了执行环境,无论是在本地执行还是在云中执行,都能很好地保证再现性。
有关更多详细信息,请阅读本页关于Metaflow与AWS的集成。
从原型到生产
开箱即用,Metaflow提供一流的本地开发体验。它允许数据科学家在笔记本电脑上快速开发和测试代码,类似于任何Python脚本。如果您的工作流支持并行,Metaflow将利用开发机器上所有可用的CPU核心。
我们鼓励用户尽快将工作流程部署到生产中。在我们的案例中,“生产”意味着一个高度可用的集中式DAG调度器Meson,用户可以在其中导出他们的Metaflow运行,以便通过单个命令执行。这使他们能够通过定期快速更新数据来开始测试工作流程,这是一种非常有效的方法来发现模型中的错误和问题。由于Meson没有开源版本,我们正在努力提供与AWS Step Functions类似的集成,这是一种高度可用的工作流调度器。
在像Netflix这样的复杂商业环境中,有很多方法可以使用数据科学工作流程的结果。通常,最终结果被写入一个表,由仪表板使用。有时,生成的模型被部署为微服务,以支持实时推理。链接工作流以使工作流的结果被另一个工作流使用也是很常见的。Metaflow支持所有这些模式,尽管其中一些功能在开源版本中还不可用。
在检查结果时,Metaflow附带了一个笔记本友好的客户端API。我们的大多数数据科学家都是Jupyter笔记本电脑的重度用户,因此我们决定将UI工作重点放在与笔记本电脑的无缝集成上,而不是提供一刀切的Metaflow UI。我们的数据科学家可以在笔记本电脑中构建自定义模型UI,从Metaflow中获取工件,从而提供关于每个模型的正确信息。具有开源Metaflow的AWS Sagemaker笔记本电脑也有类似的体验。
Metaflow入门
Metaflow已经在Netflix内部被广泛采用,今天,我们正在将Metaflow作为一个开源项目提供。
我们希望我们对数据科学家自主性和生产力的愿景也能在Netflix之外引起共鸣。我们欢迎您尝试Metaflow,开始在您的组织中使用它,并参与其开发。
您可以在metaflow.org上找到项目主页,在github.com/Netflix/metaflow上找到代码。metaflow在docs.metaflow上有全面的文档。最快的入门方法是遵循我们的教程。如果你想在动手之前了解更多,你可以观看关于Metaflow的高级别演示,或者更深入地了解Metaflow的内部。
- 113 次浏览