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

机器学习 模型
2021-01-28 14:32:57
15 0 0

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

建立机器学习模型的目的是解决一个问题,而机器学习模型只有在生产和消费者积极使用时才能做到这一点。因此,模型部署和模型构建一样重要。正如Redapt指出的,IT和数据科学之间可能存在“脱节”。它倾向于专注于使事物变得可用和稳定。他们不惜一切代价想要正常运行时间。另一方面,数据科学家则专注于迭代和实验。弥合这两个世界之间的鸿沟是确保你有一个好的模型并能实际投入生产的关键。

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

模型部署和管理中的困难产生了一个新的、专门的角色:机器学习工程师。机器学习工程师比典型的数据科学家更接近软件工程师,因此,他们是将模型投入生产的理想人选。但并不是每个公司都能奢侈地雇佣专门的工程师来部署模型。对于今天的精益工程车间,数据科学家学习如何将他们的模型投入生产是明智的。

在所有这一切中,另一个问题浮现出来 - 什么是将机器学习模型投入生产的最有效方法?

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

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

所以不要再浪费时间了,我们开始吧!

从模型到生产

许多团队在没有生产计划的情况下开始机器学习项目,这种方法在部署时往往会导致严重的问题。创建模型既昂贵又耗时,如果没有计划将其投入生产,则不应投资于ML项目,当然,在进行纯研究时除外。有了一个计划,你不会对任何可能使你的发射脱轨的陷阱感到惊讶。

在开始任何ML项目之前,您的团队需要考虑三个关键领域:

  1. 数据存储和检索

  2. 框架和工具

  3. 反馈和迭代

数据存储与检索

如果机器学习模型没有任何相关数据,那么它对任何人都没有用处。你可能会有训练,评估,测试,甚至预测数据集。你需要回答以下问题:

  • 您的训练数据是如何存储的?

  • 您的数据有多大?

  • 您将如何检索培训数据?

  • 您将如何检索用于预测的数据?

这些问题很重要,因为它们将指导您使用什么框架或工具,如何解决您的问题,以及如何设计您的ML模型。在机器学习项目中做任何事情之前,先考虑一下这些数据问题

数据可以存储在本地存储、云存储或两者的混合存储中。将数据存储在模型培训和服务结果的地方是有意义的:本地模型培训和服务最适合本地数据,尤其是在数据较大的情况下,而存储在云存储系统(如GCS、AWS S3或Azure存储)中的数据应与云ML培训和服务相匹配。

数据的大小也很重要。如果数据集很大,那么在预处理步骤和模型优化阶段需要更多的计算能力。这意味着,如果您在本地操作,就必须计划更多的计算,或者从一开始就在云环境中设置自动伸缩。请记住,如果您没有仔细考虑您的数据需求,这两种方法中的任何一种都可能会变得昂贵,因此请预先计划,确保您的预算能够通过培训和生产来支持模型。

即使将训练数据与要训练的模型一起存储,也仍然需要考虑如何检索和处理这些数据。在这里,我们想到了批量与实时数据检索的问题,在设计ML系统之前必须考虑到这一点。批量数据检索是指从存储系统中分块检索数据,而实时数据检索是指在数据可用时立即检索数据。

除了训练数据检索,您还需要考虑预测数据检索。您的预测数据是TK(相对于训练数据进行定义),很少像训练数据那样整齐地打包,因此您需要考虑与模型在推断时如何接收数据相关的更多问题:

  • 您是否从网页中获取推断数据?

  • 您是否收到来自API的预测请求?

  • 您是批量预测还是实时预测?

如果你从网页上获取数据,那么问题是什么类型的数据?网页中来自用户的数据可以是结构化数据(CSVs、JSON)或非结构化数据(图像、视频、声音),推理引擎应该足够健壮,能够检索、处理和做出预测。来自网页的推断数据可能对用户非常敏感,因此,您必须考虑隐私和道德等因素。在这里,可以考虑像联邦学习这样的框架,将模型带到数据中,并且数据永远不会离开网页/用户。

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

与检索一样,您需要考虑推理是批量进行还是实时进行。这两种情况需要不同的方法,因为所涉及的技术/技能可能不同。对于批处理推断,您可能希望将预测请求保存到中心存储,然后在指定的时间段后进行推断,而在实时情况下,只要推断请求完成,就立即执行预测制造。知道这将使您能够有效地计划何时以及如何调度计算资源,以及使用什么工具。

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

框架和工具

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

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

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

  • 对于手头的任务,什么是最好的工具?

  • 工具的选择是开源的还是封闭的?

  • 有多少平台/目标支持该工具?

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

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

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

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

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

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

反馈与迭代

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

  • 我们如何从生产中的模型中获得反馈?

  • 如何设置连续交货?

从生产中的模型获得反馈是非常重要的。主动跟踪和监视模型状态可以在模型性能下降/衰退、偏差蠕变甚至数据倾斜和漂移的情况下向您发出警告。这将确保这些问题在最终用户注意到之前得到迅速解决。

考虑如何在生产中对新模型进行试验、再培训和部署,而不必关闭该模型或以其他方式中断其操作。一个新模型在用来代替旧模型之前应该经过适当的测试。这种在不中断现有模型过程的情况下连续测试和部署新模型的思想称为连续集成。

当一个模型投入生产时,还有许多其他问题,这篇文章不是法律,但是我相信你会问的大多数问题都属于上面提到的一类。

机器学习部署示例

现在,我将引导您完成一个示例ML项目。在这个项目中,您是一个从事有前途的项目的ML工程师,您希望设计一个能够有效地放置、监视、跟踪和部署ML模型的防故障系统。

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

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

数据问题

首先,我们来谈谈数据。您的训练数据是如何存储的?

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

您的数据有多大?

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

您将如何检索培训数据?

由于数据存储在GCS bucket中,因此在Google云平台上构建的模型可以轻松地检索和使用这些数据。所以现在你知道该使用哪个云提供商了

您将如何检索数据进行预测?

关于推断数据,承包商通知您推断将由其内部API请求,因为用于预测的此类数据将由restapi调用。这使您了解项目的目标平台

项目框架和工具

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

经过考虑,您决定使用Python作为您的编程语言,Tensorflow用于模型构建,因为您将使用一个包含图像的大型数据集,以及Tensorflow Extended(TFX),一个在Google内部发布和使用的开源工具,用于构建管道。模型构建的其他方面,如模型分析、监控、服务等,又如何呢?你在这里用什么工具?好吧,TFX几乎涵盖了一切!

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

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

TFX还与我们选择的编程语言(Python)以及您选择的深度学习模型构建器(Tensorflow)兼容,这将鼓励整个团队的一致性。另外,由于TFX和Tensorflow是由Google构建的,因此它在Google云平台上拥有一流的支持。记住,你的数据存储在地面军事系统中。

工具的选择是开源的还是封闭的?

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

  • 它们具有成本效益。

  • 快速设置和部署。

  • 高效备份和恢复。

一些缺点是:

  • 安全问题,尤其是敏感数据的安全问题。

  • 互联网连接可能会影响工作,因为一切都是在线运行的。

  • 经常性成本。

  • 对工具的控制有限。

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

有多少平台/目标支持该工具?

TFX和Tensorflow可以在Python运行的任何地方运行,这是很多地方。此外,使用Tensorflow构建的模型可以很容易地保存并在浏览器中使用Tensorflow.js公司,在使用Tensorflow lite的移动设备和物联网中,在云中,甚至在网上。

反馈和迭代问题

我们如何从生产中的模型获得反馈?

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

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

结论

如果在开始一个项目之前勾选了所有的框,那么有效地将ML模型投入生产并不困难。这是非常重要的在一个ML项目,你将着手和应优先考虑!

虽然这篇文章并不详尽,但我希望它为您提供了一个指导和直觉,告诉您如何处理一个ML项目以将其投入生产。

感谢阅读!下次再见

作者介绍

用微信扫一扫

收藏