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

原始地址:https://stackoverflow.blog/2020/10/12/how-to-put-machine-learning-models-into-production/

概述

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

构建机器学习模型的目标是解决问题,只有在模型处于生产状态并被消费者积极使用时,机器学习模型才能发挥作用。因此,模型部署和模型构建一样重要。正如Redapt所指出的,IT和数据科学之间存在“断裂”。IT主要关注使事物可用和稳定,他们不惜一切代价保证正常运行。另一方面,数据科学家则专注于迭代和实验,他们希望能够打破一些东西。弥合这两个世界之间的差距是确保你拥有一个好模型并能够真正投入生产的关键。

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

模型部署和管理中的困难导致了一个新产生的专门角色:机器学习工程师。机器学习工程师与典型数据科学家相比更接近于软件工程师,因此是将模型投入生产的理想人选。但并不是每个公司都有足够的资源来雇佣专门的工程师来部署模型。对于今天的精简工程店来说,建议数据科学家学习如何将他们的模型投入生产。

在所有这些过程中,另一个问题悬而未决 - 将机器学习模型投入生产的最有效方法是什么?

这个问题非常关键,因为机器学习为企业提供了很多潜力,任何能够快速有效地将模型投入生产的公司都能超过竞争对手。

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

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

从模型到生产

许多团队在开始机器学习项目时没有制定生产计划,这种方法通常在部署时会出现严重问题。如果没有计划将模型投入生产,那么创建模型将是昂贵和耗时的,除非只是进行纯研究。拥有计划可以确保您在启动之前就不会受到可能导致项目失败的障碍的困扰。

在开始任何机器学习项目之前,团队需要考虑的三个关键领域分别是:

  • 数据存储和检索
  • 框架和工具
  • 反馈和迭代

数据存储和检索

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

  • 您的训练数据是如何存储的?
  • 您的数据有多大?
  • 您将如何检索训练数据?
  • 您将如何检索预测数据?

这些问题很重要,因为它们将指导您选择使用哪些框架或工具,如何处理问题以及如何设计您的机器学习模型。在进行机器学习项目中的任何其他操作之前,先考虑这些数据问题是非常重要的。

数据可以存储在本地、云存储或两者混合的环境中。如果数据需要大量处理,那么将数据存储在模型训练和结果服务的地方是有意义的:尤其是在处理大型数据时,本地模型训练和服务更适合本地数据,而存储在GCS、AWS S3或Azure存储等云存储系统的数据则应匹配云端的机器学习训练和服务。

数据的规模也非常重要。如果数据集很大,那么在预处理和模型优化阶段需要更多的计算资源。这意味着,如果您在本地操作,您需要计划更多的计算资源;如果您从一开始就在云环境中进行自动扩展。请记住,如果未考虑到数据需求,这两者都可能会导致昂贵的开销,因此要提前计划以确保您的预算可以支持模型在训练和生产中的使用。

即使您已经将训练数据与要训练的模型存储在一起,您仍然需要考虑如何检索和处理该数据。在这里,批处理数据检索与实时数据检索的问题出现在脑海中,在设计机器学习系统之前必须考虑这一点。批处理数据检索意味着数据以块的形式从存储系统中检索,而实时数据检索意味着一旦可用就立即检索数据。

除了训练数据检索之外,还需要考虑预测数据的检索。您的预测数据是TK(相对于训练数据)的,而且通常并没有像训练数据那样整齐地打包,所以您需要考虑一些与模型在推理时如何接收数据相关的问题:

  • 您是否从网页获取推理数据?
  • 您是否从API接收预测请求?
  • 您是批量预测还是实时预测?
    等等。

如果您从网页获取数据,那么问题就是来自哪种类型的数据?来自网页用户的数据可能是结构化数据(CSV、JSON),也可能是非结构化数据(图像、视频、声音),推理引擎应该足够强大,能够检索、处理并进行预测。来自网页的推理数据可能与用户密切相关,因此您必须考虑诸如隐私和伦理等因素。在这里,可以考虑诸如联邦学习之类的框架,其中模型被带到数据上,而数据永远不会离开网页或用户。

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

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

提出并回答与数据存储和检索相关的问题非常重要,并且将使您考虑到正确的方式来设计您的机器学习项目。

框架和工具

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

在检查和准备使用数据之后,下一步思考的是使用哪些框架和工具的组合。

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

  • 对于手头的任务来说,什么是最好的工具?
  • 这些工具是开源还是闭源的?
  • 有多少平台/目标支持这个工具?

为了确定任务的最佳工具,您应该研究和比较执行相同工作的不同工具的结果。例如,您可以根据以下标准比较这些工具:
**效率:**在生产中,框架或工具的效率有多高?如果一个框架或工具能够最佳地使用内存、CPU或时间等资源,那么它就是高效的。考虑到您打算使用的框架或工具对项目的性能、可靠性和稳定性有直接影响,所以考虑它们的效率非常重要。**流行度:**在开发者社区中,这个工具有多受欢迎?流行度通常意味着它工作得很好,并且得到积极使用和支持。值得一提的是,可能会有比流行工具更高效的新工具,特别是对于闭源的专有工具来说。在选择要使用的专有工具时,您需要权衡这一点。通常,在开源项目中,您会倾向于选择更流行和更成熟的工具,原因我将在下文中讨论。**支持程度:**这个框架或工具有多少支持?它是否有一个活跃的社区支持,如果是开源的,或者对于闭源工具来说,是否有良好的支持?你能多快地找到有关这个框架或工具的技巧、技巧、教程和其他实际项目中的用例?

此外,您还需要了解您选择的工具或框架是否是开源的。这方面有优缺点,答案将依赖于预算、支持、连续性、社区等因素。有时,您可以获得开源软件的专有版本,这意味着您将获得开源的优势以及高级支持。

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

反馈和迭代

机器学习项目永远不是静态的。这为工程和设计的一部分必须从一开始考虑到。在这里,您应该回答以下问题:

  • 我们如何从生产中的模型获取反馈?
  • 如何设置持续交付?

从生产中的模型获取反馈非常重要。主动跟踪和监控模型状态可以在模型性能下降/衰减、偏见渗透甚至数据偏移和漂移时发出警告。这将确保在最终用户注意到问题之前迅速解决这些问题。

考虑如何在不使现有模型停机或中断其运行的情况下对生产中的新模型进行实验、重新训练和部署。新模型在使用之前应该经过适当的测试。在存在连续运行的模型过程的情况下进行持续测试和部署新模型的这个想法被称为持续集成。

在将模型投入生产时存在许多其他问题,这篇文章并没有详述,但我相信大多数您会提出的问题属于上述所述的其中一类。

机器学习部署的一个示例

现在,我将向您介绍一个示例ML项目。在这个项目中,您是一名ML工程师,正在从事一个有望的项目,并希望设计一个无故障的系统,能够有效地将ML模型投入部署、监控和追踪。

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

作为负责的工程师,在项目开始之前,您必须提出一个设计解决方案。为了解决这个问题,针对每个问题进行探讨,并开发出这个端到端系统的设计。

数据问题

首先,让我们讨论一下数据。

您的训练数据是如何存储的?
数据存储在GCS存储桶中,并且以两种形式存在。一种是描述广告的CSV文件,另一种是相应的广告图像。数据已经在云端,所以在云端构建您的ML系统可能更好。您会获得更好的I/O延迟、随着数据变得越来越大(几百GB)的时候更容易扩展的能力,以及对任何额外GPU和TPU的快速设置和配置。

您的数据有多大?
承包商每个月提供数百万个广告,数据在每个月结束时聚合并存储在云存储桶中。现在您知道数据很大(数百GB的图像),因此您在云端构建系统的直觉更强了。

您将如何检索训练数据?
由于数据存储在GCS存储桶中,因此可以很容易地通过在Google Cloud Platform上构建的模型来检索和使用存储的数据。所以现在您对要使用的云服务提供商有了一个想法。

您将如何检索预测数据?
就推理数据而言,承包商告诉您推理将通过他们的内部API请求,因此预测数据将通过REST API调用。这给出了您对项目的目标平台的了解。

项目的框架和工具

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

经过考虑,您决定使用Python作为编程语言,Tensorflow作为模型构建工具,因为您将使用包含图像在内的大型数据集,并使用Tensorflow Extended(TFX)构建管道。那么关于模型分析、监控、服务等模型构建的其他方面呢?在这里要使用哪些工具?嗯,TFX几乎涵盖了所有方面!

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

而且,TFX与我们选择的编程语言(Python)以及我们选择的深度学习模型构建器(Tensorflow)兼容,这将有助于团队之间的一致性。另外,由于TFX和Tensorflow是由Google开发的,所以在Google Cloud Platform中有一流的支持。还记得,您的数据存储在GCS中。

如果您想了解如何使用TFX构建完整的端到端管道的技术细节,请参阅下面的链接:
TensorFlow Extended (TFX) | ML Production Pipelines *构建和管理端到端的生产ML管道。TFX组件支持可伸缩、高性能的数据处理…*www.tensorflow.org *Creating Sounds Of India: An on device, AI powered, musical experience built with TensorFlow August 14, 2020 - Posted…*blog.tensorflow.org 工具是开源的还是闭源的?
Python、TFX和Tensorflow都是开源的,它们是构建您的系统的主要工具。在计算能力和存储方面,您正在使用全都是需要付费和受管的GCP云服务。这有其优点和缺点,也可能取决于您的用例。在考虑使用受管云服务时,一些要考虑的优点包括:

  • 它们成本效益高
  • 快速安装和部署
  • 高效的备份和恢复
    一些缺点包括:
  • 安全问题,特别是对于敏感数据
  • 由于一切都是在线运行,因此网络连接可能会影响工作
  • 经常性的成本
  • 对工具的控制有限
    一般来说,在初创企业等较小的企业中,通常更便宜且更好地使用受管云服务来进行您的项目。

选择的工具支持多少个平台/目标?
TFX和Tensorflow可以在Python能运行的任何地方运行,而这是很多地方。此外,使用Tensorflow构建的模型可以轻松保存并在浏览器中通过Tensorflow.js提供服务,在移动设备和物联网设备上使用Tensorflow Lite,在云端,甚至在本地上。

反馈和迭代问题

我们如何从生产中的模型获取反馈?
TFX支持一种反馈机制,该机制可以方便地用于管理模型版本以及推出新模型。可以基于这个工具构建自定义反馈,以有效地跟踪生产中的模型。一个名为**TensorFlow Model Analysis (TFMA)**的TFX组件可以在部署之前轻松评估新模型与当前模型的差异。

回顾上述的答案,您可以开始想象最终的ML系统设计会是什么样子了。在进行模型构建或数据探索之前得到这部分是非常重要的。

结论

如果在开始项目之前勾选所有的框,就不必为将ML模型投入生产而感到困难。在您开始进行的ML项目中,这非常重要,应该优先考虑!

虽然本文并不详尽无遗,但我希望它给您提供了一个指南和思路,以便如何将ML项目投入生产。

感谢您的阅读!下次再见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值