部署效率提高17倍,开源Metaflow,真正以人为本的数据科学框架
全文共4007字,预计学习时长12分钟
来源:Pexels
开源是软件发展的趋势,越来越多的人投入到开源世界中去。我们可以从开源世界中获得很多有益的东西,本着不重复造轮子的精神,我们可以充分利用这些开源项目的成果。
12月3日,Netflix和AWS开源Metaflow框架。Metaflow 框架最早是由Netflix公司(《纸牌屋》这部剧的出品方)开发的,旨在满足从事严苛的现实数据科学项目的数据科学家的需求。
简单了解一下Metaflow
Metaflow可以与您喜欢的数据科学库(例如PyTorch,Tensorflow或SciKit Learn)一起使用,并用惯用的Python代码编写模型,而无需学习太多新知识。
并且,当您需要更大规模时,Metaflow可提供对AWS云中存储,计算和机器学习服务的内置集成。无需更改代码。
最开始的时候,Netflix 是为了帮助新成立的机器学习基础架构团队中的数据科学家解决许多有关与数据访问和基本数据处理有关的困难的故事,后来逐渐演变成现在的样子。过去的两年中,Metaflow已在Netflix内部用于构建和管理从自然语言处理到运营研究的数百个数据科学项目。
另外,据Netflix 的技术团队说,Metaflow是一个以人为本的项目,正是坚持着这种初衷,Metaflow才帮助到了这么多的数据科学家拥有自己的模型,因为这样可以使他们更快地对模型进行故障排除和迭代。
现在,我们先从metaflow.org网站开始吧!
Netflix将数据科学应用于整个公司的数百个应用场景,包括优化内容交付和视频编码。
Netflix的数据科学家喜欢公司的文化,因为这种文化使他们能够自主工作并独立地判断和解决问题。公司希望数据科学家常怀好奇心,并选择性地承担潜在高商业价值的风险。
大约两年前,新成立的机器学习基础设施团队向数据科学家提出了一个问题:“作为Netflix的数据科学家,你最大的难题是什么?”团队期待听到与大规模数据和模型相关的答案,也许还会听到与现代GPU相关的问题。
但是,与此相反,听到的是一些项目故事,比如,生产最初版本所花费的惊人的时间量——主要是因为与软件工程相关的现实原因。
也听到许多关于数据存取和基本数据处理困难的故事。团队成员参加了一个会议,数据科学家与他们的利益相关者讨论如何在不影响生产的情况下对不同版本的模型进行最大程度优化。团队看到了数据科学家对现代现成的机器学习库的浓厚兴趣,但也注意到了这些库在生产工作流中被随意当作依赖时,所引发的各种问题。
团队意识到,数据科学家的想法在技术上几乎都是可行的,但万事都不简单。因此,作为一个机器学习基础设施团队,工作主要不是实现新的技术成就,相反,应该简化常用操作,减轻数据科学家对实现难度的心理预期。因此,团队将全力以赴,将精力完全集中在提高数据科学家的生产力上。
如何改善数据科学家的生活质量?针对此问题,下图提供了一些看法:
数据科学家喜欢自由地为项目选择最佳建模方法。他们知道特征工程对于许多模型至关重要,希望能够控制模型输入和特征工程逻辑。
在许多情况下,数据科学家非常渴望在生产中拥有自己的模型,因为这样能帮助他们更快地对模型进行故障排除和迭代。
另一方面,很少有数据科学家对数据仓库、训练和评分模型的计算平台或工作流调度程序的本质有强烈的感觉。从他们的角度来看,这些基础组件的功能最好“工作就行”,如果运行失败,错误信息应该在其工作范围内清晰易懂。
一个重要的发现是,大多数数据科学家并不反对编写Python代码。事实上,简单明了的Python正迅速成为数据科学的通用语言,因此使用Python比使用领域特定语言更可取。
数据科学家希望能自由地使用任意惯用的Python代码来表达业务逻辑,就像在Jupyter notebook中那样。但是,他们不想花太多时间考虑对象层次结构、打包问题,或者处理与其工作无关且晦涩的API。基础设施应该允许数据科学家们自由地扮演数据科学家的角色,但也应该提供足够的防护和支撑,以减少他们对软件架构的过度担忧。
Metaflow进阶介绍
这些观察结果促进了团队以人为中心的数据科学框架——Metaflow的出现与发展。在过去的两年里,Netflix利用Metaflow构建和管理了数百个数据科学项目,从自然语言处理到运营研究皆有涉及。
从设计上讲,Metaflow是一个看似简单的Python库:
如上所述,数据科学家可以将工作流构造为有向无环图。这些步骤可以是任意的Python代码。在此假设示例中,流程并行训练模型的两个版本,然后选择得分最高的版本。
从表面上看,这似乎并不麻烦。现有许多框架,例如Apache Airflow或Luigi,它们允许执行由任意Python代码组成的DAG。
亮点在Metaflow许多精心设计的细节中得以体现:例如,请注意以上示例中的数据和模型是如何作为普通的Python实例变量存储的。即使代码在分布式计算平台上执行,它们也能正常工作,这要归功于Metaflow默认支持的内置内容寻址工件存储。在许多其他框架中,工件的加载和存储任务留给用户,这迫使他们决定应保留和不应保留的内容。Metaflow消除了这种认知成本。
Metaflow包含了这些以人为中心的细节,所有细节都旨在提高数据科学家的生产力。
亚马逊云计算服务上的Metaflow
Netflix的数据仓库包含数百PB的数据。尽管在Metaflow上运行的典型机器学习工作流仅涉及该仓库的一小部分,但它仍可以处理TB级的数据。
Metaflow是一个云原生框架。通过设计,它充分利用了云的弹性,包括计算和存储。
Netflix多年来一直是亚马逊云计算服务(Amazon Web Services,AWS)的最大用户之一,在处理云(尤其是AWS)方面积累了丰富的运营经验和专业知识。对于开源版本,公司与AWS合作,以实现Metaflow与各种AWS服务之间的无缝集成。
Metaflow具有内置功能,可以自动快照Amazon S3中的所有代码和数据,这是内部Metaflow设置的关键价值主张。它提供了一个全面的版本控制和实验跟踪解决方案,而无需任何用户干预,这是任何生产级机器学习基础架构的核心。
此外,Metaflow还捆绑了一个高性能的S3客户端,可以加载高达10Gbps的数据。该客户端受到了用户群体的广泛欢迎,他们现在可以更快地将数据加载到工作流中,从而实现了迭代周期的加速。
对于通用数据处理,Metaflow与AWS Batch集成——AWS提供的一个基于容器的托管计算平台。用户可以通过在代码中添加一行代码:@batch,从无限扩展的计算集群中受益。
对于训练机器学习模型,除了编写自己的函数外,用户还可以选择使用AWS Sagemaker,它提供各种模型的高性能实现,其中许多模型支持分布式训练。
Metaflow通过@conda 装饰器支持所有常见的现成机器学习框架,该框架允许用户为其步骤安全地指定外部依赖项。@conda装饰器冻结了执行环境,从而为本地及云端执行任务提供了良好的再现性保证。
从原型到成品
开箱即用,Metaflow提供一流的本地开发经验。它允许开发人员在笔记本电脑上快速开发和测试代码,类似于任何Python脚本。如果工作流支持并行性,那么Metaflow将利用开发计算机上所有的可用CPU内核。
Netflix鼓励用户尽快将其工作流部署到生产环境中。在实例中,“production”指高度可用的集中式DAG调度程序Meson,用户能以单个命令执行和导出其Metaflow运行。
这样一来,开发人员开始测试工作流,定期快速更新数据,这是解决模型中的错误和问题的高效方法。由于Meson在开源中不可用,团队正在研究提供与AWS Step Functions类似的集成,AWS Step Functions是一个高度可用的工作流调度程序。
类似Netflix这样复杂的业务环境中,有很多方法可以利用数据科学工作流。通常,最终结果会写入表中,供dashboard使用。有时,结果模型被部署为微服务以进行实时预测。链接工作流以使工作流的结果被另一个工作流使用也是常见的方式,Metaflow支持所有这些模式,尽管其中一些功能在开源版本中还未开放。
检查结果时,Metaflow附带了一个notebook友好型客户端API。
大多数数据科学家都是Jupyter notebook的重度使用者,因此团队决定将UI工作重点放在与Jupyter notebooks的无缝集成上,而非提供一刀切的Metaflow UI。
数据科学家可以在notebook中构建自定义模型UI,并从Metaflow获取工件,这些工件仅提供有关每个模型的正确信息。带有开源Metaflow的AWS Sagemakernotebook可提供类似的体验。
如今,Metaflow已经在Netflix中被广泛采用,团队将Metaflow作为一个开源项目提供。
团队希望实现数据科学家自主性和生产力愿景的同时,也能在Netflix之外引起共鸣。
事不宜迟,大家可以一起试试看Metaflow,究竟如何?
留言点赞关注
我们一起分享AI学习与发展的干货
如转载,请后台留言,遵守转载规范