如何将机器学习模型投入生产

2020-10-17 10:49:48

数据科学家擅长创建表示和预测真实世界数据的模型,但有效地部署机器学习模型更像是一门艺术,而不是科学。部署需要在软件工程和DevOps中更常见的技能。据Venturebeat报告,87%的数据科学项目从未投入生产,而redapt声称这一比例为90%。两者都强调了决定成败的一个关键因素是团队协作和迭代的能力。

构建机器学习模型的目的是解决问题,而机器学习模型只有在投入生产并被消费者积极使用时才能做到这一点。因此,模型部署与模型构建同等重要。正如Redapt所指出的,IT和数据科学之间可能会有“脱节”。它倾向于将重点放在提供可用和稳定的东西上。他们要不惜一切代价延长正常运行时间。另一方面,数据科学家则专注于迭代和实验。他们想打碎东西。“。弥合这两个世界之间的差距是确保你有一个好的模型并能够真正投入生产的关键。

大多数数据科学家认为,模型部署是一项软件工程任务,应该由软件工程师处理,因为所需的技能与他们的日常工作更紧密地结合在一起。虽然这在某种程度上是正确的,但学习这些技能的数据科学家将具有优势,特别是在精益组织中。像TFX、Mlflow、Kubeflow这样的工具可以简化整个模型部署过程,数据科学家可以(也应该)快速学习和使用它们。

模型部署和管理的困难催生了一个新的专业角色:机器学习工程师。机器学习工程师比典型的数据科学家更接近软件工程师,因此,他们是将模型投入生产的理想人选。但并不是每家公司都有聘请专门工程师仅仅是为了部署模型的奢侈。对于今天的精益工程商店来说,建议数据科学家学习如何将他们的模型投入生产。

在所有这一切中,另一个问题迫在眉睫, - 将机器学习模型投入生产的最有效方式是什么?

这个问题很关键,因为机器学习为企业带来了巨大的潜力,任何能够快速有效地将其模型投入生产的公司都可以超越竞争对手。

在本文中,我将讨论一些有助于将机器学习模型投入生产的实践和方法。我将讨论不同的技术和用例,以及每种方法的优缺点。

许多团队在没有生产计划的情况下开始机器学习项目,这种方法在部署时通常会导致严重的问题。创建模型既昂贵又耗时,如果您没有计划将其投入生产,那么就不应该投资于ML项目,当然,除非是做纯研究。有了手头的计划,你不会对任何可能破坏发射的陷阱感到惊讶。

这里的另一个问题与数据质量有关。用于推理的数据通常与训练数据非常不同,特别是当它直接来自最终用户而不是API时。因此,您必须提供必要的基础设施,以完全自动检测更改以及处理这些新数据。

与检索一样,您需要考虑推理是批处理还是实时完成。这两个场景需要不同的方法,因为涉及的技术/技能可能不同。对于批处理推理,您可能希望将预测请求保存到中央存储区,然后在指定时间段后进行推理,而在实时情况下,一旦发出推理请求,就会立即执行预测。了解这一点将使您能够有效地计划何时以及如何计划计算资源以及要使用的工具。

提出和回答与数据存储和检索相关的问题很重要,这将使您思考设计ML项目的正确方式。

您的模型不会自行训练、运行和部署。为此,您需要能够帮助您有效部署ML模型的框架和工具、软件和硬件。这些可以是TensorFlow、Pytorch和Scikit这样的框架-学习培训模型、Python、Java和Go等编程语言,甚至是AWS、GCP和Azure等云环境。

在检查和准备好数据的使用之后,下一条思路应该考虑使用什么框架和工具组合。

框架的选择是非常重要的,因为它可以决定模型的连续性、维护性和使用。在此步骤中,您必须回答以下问题:

为了帮助确定任务的最佳工具,您应该研究并比较执行相同工作的不同工具的结果。例如,您可以根据以下条件比较这些工具:

效率:框架或工具在生产中的效率如何?如果一个框架或工具以最佳方式使用内存、CPU或时间等资源,那么它就是高效的。重要的是要考虑您打算使用的框架或工具的效率,因为它们对项目性能、可靠性和稳定性有直接影响。

受欢迎程度:该工具在开发人员社区中有多受欢迎?受欢迎通常意味着它工作良好,正在积极使用,并得到了很多支持。还值得一提的是,可能有一些较新的工具不那么流行,但比流行的工具更有效,特别是对于封闭源代码的专有工具。在选择要使用的专有工具时,您需要权衡这一点。通常,在开放源码项目中,您会倾向于流行和更成熟的工具,原因我将在下面讨论。

支持:框架或工具的支持情况如何?如果它是开源的,它背后有一个充满活力的社区吗?或者它对封闭源代码工具有很好的支持吗?在实际项目中找到提示、技巧、教程和其他用例的速度有多快?

接下来,您还需要知道您选择的工具或框架是否是开源的。这是有利有弊的,答案将取决于预算、支持、连续性、社区等等。有时,您可以获得开放源码软件的专有版本,这意味着您可以获得开放源码加上高级支持的好处。

您需要回答的另一个问题是,您选择的框架支持多少个平台/目标?也就是说,您选择的框架支持像Web或移动环境这样的流行平台吗?它可以在Windows、Linux或Mac OS上运行吗?在此目标环境中定制或实施是否容易?这些问题很重要,因为可能有很多工具可用于项目的研究和实验,但很少有工具能够在生产过程中充分支持您的模型。

ML项目从不是静态的。这是必须从一开始就考虑的工程和设计的一部分。在这里,您应该回答如下问题:

从生产中的模型获得反馈是非常重要的。主动跟踪和监控模型状态可以在模型性能折旧/衰减、偏差爬行甚至数据歪斜和漂移的情况下向您发出警告。这将确保在最终用户通知之前迅速解决此类问题。

考虑如何在生产中试验、重新培训和部署新模型,而不会使该模型停机或以其他方式中断其运行。新型号在用来取代旧型号之前,应该经过适当的测试。这种在不中断现有模型流程的情况下持续测试和部署新模型的想法称为持续集成。

在将模型投入生产时还有许多其他问题,本文不是法律,但我相信您将提出的大多数问题都属于上述类别之一。

现在,我将向您介绍一个示例ML项目。在本项目中,您是一名ML工程师,正在处理一个前景看好的项目,您想要设计一个防故障系统,该系统可以有效地放置、监视、跟踪和部署ML模型。

以Adstcrat为例,这是一家为在线公司提供高效广告跟踪和监控的广告代理公司。他们与大公司合作,最近获得了一份建造机器学习系统的合同,以预测客户是否会点击网页上显示的广告。承包商在Google Cloud Storage(GCS)存储桶中有一个大容量的数据集,并希望Adstcrat为他们开发一个端到端的ML系统。

作为负责的工程师,你必须在项目开始前拿出设计解决方案。要解决此问题,请询问前面提出的每个问题,并制定此端到端系统的设计方案。

数据存储在GCS存储桶中,有两种形式。第一个是描述广告的CSV文件,第二个是广告的对应图像。数据已经在云中,所以在云中构建ML系统可能更好。您将获得更好的I/O延迟、随着数据变大而轻松扩展(数百GB),以及针对任何其他GPU和TPU的快速设置和配置。

包商每个月投放数百万条广告,每月月底将数据聚合存储在云桶中。因此,现在您知道您的数据很大(数百GB的图像),因此您在云中构建系统的预感更强烈。

由于数据存储在GCS存储桶中,因此构建在Google Cloud平台上的模型可以很容易地检索和使用这些数据。现在,您已经知道要使用哪个云提供商了。

在推理数据方面,承包商通知您他们的内部API将请求推理,因为这样的预测数据将由REST API调用。这让您对项目的目标平台有了一个概念。

在此阶段可以使用多种工具组合,其中一种工具的选择可能会影响其他工具。就原型、模型构建和部署的编程语言而言,您可以根据您的研究结果决定为这三个阶段选择相同的语言或使用不同的语言。例如,Java是一种非常有效的后端编程语言,但在机器学习方面无法与Python这样的多功能语言相提并论。

经过考虑,您决定使用Python作为编程语言,使用TensorFlow进行模型构建,因为您将使用包含图像的大型数据集,并使用TensorFlow Extended(TFX)(在Google内部发布和使用的开源工具)来构建管道。那么模型构建的其他方面,如模型分析、监控、服务等等呢?你在这里用什么工具?嗯,TFX几乎涵盖了所有的内容!

TFX提供了一系列框架、库和组件,用于定义、启动和监控生产中的机器学习模型。TFX中可用的组件允许您构建专门为从一开始就可伸缩而设计的高效ML管道。这些组件内置支持ML建模、培训、服务,甚至管理到不同目标的部署。

TFX还与我们选择的编程语言(Python)以及您选择的深度学习模型构建器(TensorFlow)兼容,这将促进整个团队的一致性。此外,由于TFX和TensorFlow是由Google构建的,因此它在Google Cloud平台中拥有一流的支持。请记住,您的数据存储在GCS中。

如果您想了解有关如何使用TFX构建完整的端到端管道的技术详细信息,请参阅以下链接:

Python、TFX和TensorFlow都是开源的,它们是构建系统的主要工具。在计算能力和存储方面,您使用的是所有GCP,这是一项付费和托管的云服务。这有其利弊,也可能取决于您的用例。在考虑使用托管云服务时,需要考虑的一些优点包括:

一般来说,对于像初创公司这样的小型企业来说,在您的项目中使用托管云服务通常更便宜、更好。

TFX和TensorFlow可以在Python运行的任何地方运行,这是很多地方。此外,使用TensorFlow构建的模型可以使用Tensorflow.js在浏览器、移动设备和使用TensorFlow Lite的物联网、云中,甚至在本地轻松保存和提供服务。

TFX支持一种反馈机制,该机制可以方便地用于管理模型版本以及推出新模型。可以围绕此工具构建自定义反馈,以有效跟踪生产中的模型。一个名为TensorFlow Model Analysis(TFMA)的TFX组件允许您在部署之前根据当前模型轻松评估新模型。

回顾上面的答案,您已经可以开始想象最终的ML系统设计是什么样子了。在建模或数据探索之前获得这一部分是非常重要的。

有效地将ML模型投入生产并不困难,如果在开始一个项目之前所有的方框都打勾的话。这在您将要着手的ML项目中非常重要,应该优先考虑!

虽然这篇文章不是详尽的,但我希望它已经为您提供了如何接近ML项目以将其投入生产的指南和直觉。

标签:数据科学、机器学习、TensorFlow