专栏首页IT技术精选文摘使用Kafka在生产环境中构建和部署可扩展的机器学习

使用Kafka在生产环境中构建和部署可扩展的机器学习

生产环境中使用Apache Kafka的可扩展的机器学习

智能实时应用程序是任何行业的游戏规则改变者。机器学习及其子课题深度学习正在获得动力,因为机器学习使计算机能够在没有明确程序设计的情况下找到隐藏的见解。分析非结构化数据,图像识别,语音识别和智能决策需要此功能。这与使用Java,.NET或Python的传统编程有很大的不同。

虽然机器学习背后的概念并不新鲜,但大数据集和处理能力的可用性使得每个企业都可以构建强大的分析模型。任何行业都有大量的使用案例,通过在企业应用程序和微服务中应用分析模型来增加收入,降低成本或改善客户体验。

本文讨论关键任务实时应用程序中机器学习的潜在用例,利用Apache Kafka作为中央可扩展的关键任务神经系统以及Apache Kafka的Streams API构建智能流应用程序。

可扩展的关键任务实时应用程序

互联网,智能手机和永远在线思想的出现改变了人们今天的行为方式。这包括人们对设备,产品和服务如何与它们互动的期望:人们现在期望实时信息。企业面临的挑战是在太迟之前采取行动应对关键业务时刻。批处理已经不够了。你需要立即采取行动,甚至更好:积极主动。

传统企业可以为其日常业务实施非常强大的实时处理。通常情况下,需要了解该领域的知识,并构建新的流分析以增加业务价值。流处理用例存在于每个行业中,例如:

.欺诈检测:将支付信息与其他历史数据或已知模式相关联,以在发生欺诈之前检测欺诈。这通常需要非常快速的处理,因为您在决定库存移动,共享信息或运送物品之前必须拒绝交易。

.交叉销售:在客户离开商店之前,关联客户大数据以制定特定于上下文的个人定制优惠或折扣。您可以利用实时信息(如基于位置的数据,支付数据),还可以利用历史数据(如CRM或Loyalty平台的信息)为每位客户提供最佳报价。

.预测性维护:关联机器大数据以预测故障发生之前。这允许在零件破裂之前更换零件。根据行业和用例,这可以节省大量资金(例如制造),增加收入(例如自动售货机)或增加客户体验(例如,电信网络故障预测)。

所有这些用例的关键在于您处理运行中的大数据。您需要处理事件才能采取行动。积极主动,不被动!在客户离开商店之前,您的系统应该在发生欺诈性交易之前做出决定,而不是在机器发生故障之前。

但这并不意味着您需要毫秒响应时间。在几种使用情况下,即使批处理事件也很好。例如,在大多数制造业或物联网(IoT)用例进行预测性维护时,您会监控几小时甚至几天的时间窗口,以检测基础设施或设备中的问题。一天或一周内更换有缺陷的部件就足够了。这是一个巨大的商业案例,并节省了大量资金,因为您可以检测问题并在问题发生之前解决问题,甚至还可以销毁环境中的其他部分。

利用机器学习的智能实时应用程序

如上所述的关键任务实时应用程序已经建造多年了 - 无需机器学习。为什么机器学习是游戏的改变者? 如果您了解机器学习及其子课题和深度学习,您经常会看到类似这样的例子:

.图像识别。将图片上传到您的Facebook时间线上,并分析您的朋友,背景或手中的啤酒等物品。 .语音翻译。这使聊天机器人可以通过生成的文本或语音与人交流。 .类人的行为。 IBM Watson击败了最好的Jeopardy玩家; Google的AlphaGo击败了专业的Go玩家。

这些例子对希望建立创新型应用程序并与竞争对手脱颖而出的企业越来越相关。以同样的方式,您可以将机器学习应用于更多“传统方案”,如欺诈检测,交叉销售或预测性维护,以增强现有业务流程并制定更好的数据驱动决策。现有的业务流程可以保持原样。您只需通过分析模型替换更简单的定制代码业务逻辑和规则,以改进自动化决策。

以下部分将展示如何利用Apache Kafka作为流媒体平台,以可扩展的关键任务方式构建,操作和监控分析模型。

机器学习 - 部署分析模型的开发生命周期

我们首先考虑分析模型的开发生命周期:

1.构建:使用机器学习算法,如GLM,朴素贝叶斯,随机森林,梯度提升,神经网络或其他来分析历史数据以找到见解。 这一步包括收集,准备或数据转换等任务。

2.验证:使用交叉验证等技术来仔细检查构建的分析模型是否适用于新的输入数据。

3.操作:将构建的分析模型部署到生产环境中,以实时将其应用于新的传入事件。

4.监控:观察应用模型的结果。 这包含两部分:如果达到阈值(业务监控),发送警报。 确保准确性和其他指标足够好(分析模型监控)。

5.持续循环:通过连续执行上述所有步骤来改进分析模型。 这可以通过手动批处理模式(例如每周一次)或在线进行,其中模型针对每个传入事件进行更新。

整个项目团队必须从一开始就一起工作来讨论如下问题:

.它如何在生产中执行?

.生产系统使用或支持哪些技术?

.我们将如何监测模型推断和性能?

.我们是否建立了覆盖整个生命周期的完整机器学习基础设施,或者使用现有的框架将模型训练与模型推断分开?

例如,一位数据科学家可以创建一个Python程序,创建一个精度很高的模型。 但是这并不能解决问题,因为您无法将其部署到生产环境中,因为它无法根据需要进行扩展或执行。

我怀疑你已经可以想象为什么Apache Kafka非常适合生产分析模型。 以下部分将解释Apache Kafka作为流平台与机器学习/深度学习框架(认为Apache Spark)结合使用来构建,操作和监控分析模型。

使用Apache Kafka进行机器学习的参考架构

在了解机器学习开发生命周期之后,让我们看看使用Kafka构建,操作和监控分析模型的参考架构:

这种体系结构的实质在于它使用Kafka作为收集特征数据的各种数据源,适合模型的模型构建环境以及服务于预测的生产应用程序之间的代理。

功能数据从托管它的各种应用程序和数据库中提取到Kafka中。这些数据用于构建模型。这种环境会根据团队的技能和首选工具集而变化。模型构建可以是数据仓库,Apache Spark或Hadoop等大数据环境,也可以是运行python脚本的简单服务器。可以发布该模型,其中获取相同模型参数的生产应用程序可将其应用于传入示例(可能使用Kafka Streams帮助索引要素数据以方便按需使用)。生产应用程序可以从Kafka接收数据作为管道,甚至可以是Kafka Streams应用程序本身。

Kafka成为ML架构中的中枢神经系统,用于喂养,构建,应用和监测分析模型。这确立了巨大的好处:

.数据管道被简化

.构建分析模块与提供服务分离

.根据需要使用实时或批处理

.分析模型可以部署在高性能,可扩展和关键任务环境中

除了利用Kafka作为可扩展的分布式消息代理外,您还可以添加Kafka生态系统的可选开源组件,如Kafka Connect,Kafka Streams,Confluent REST代理,Confluent模式注册或KSQL,而不是依赖Kafka Producer和Consumer APIs:

接下来的两节将介绍如何利用Kafka的Streams API轻松地将分析模型部署到生产环境。

机器学习开发生命周期示例

现在让我们深入一个围绕Kafka设计的ML架构的更具体的例子:

用绿色表示要构建和验证分析模型的组件。在橙色中,您会看到部署分析模型的流式处理平台,推断新事件和监控。

数据生产者不断发送消息。分析平台可以批量或实时接收这些数据。它使用机器学习算法来构建分析模型。分析模型被部署到流式传输平台。流式传输平台将分析模型应用于新事件以推断结果(即进行预测)。结果发送给数据使用者。

在这个例子中,我们将模型训练与模型推理分开,这是我在当今大多数机器学习项目中看到的典型设置:

模型训练

大数据通过Kafka被摄入到Hadoop集群中。 H2O.ai用于分析Hadoop中的历史数据以构建神经网络。数据科学家可以使用它的首选接口-R,Python,Scala,Web UI Notebook等。模型构建和验证在处理静态数据的Hadoop集群上运行。其结果是由H2O.ai以Java代码生成的训练分析模型。这已准备好用于生产部署。

模型推断

然后将神经网络部署到Kafka Streams应用程序。 Kafka Streams应用程序可以在任何地方运行,无论它是独立的Java进程,Docker容器还是Kubernetes集群。在这里,它被实时应用于每一个新事件来进行预测。 Kafka Streams利用Kafka集群提供分析模型和性能模型推断的可扩展的关键任务操作。

在线模型训练

我们可以建立完整的在线模型训练基础设施,而不是分离模型训练和模型推理。许多像Linkedin这样的科技巨头在过去利用Apache Kafka进行模型输入,训练,推理和输出。这种选择有几个折衷。大多数传统公司都使用第一种方法,这对于今天的大多数用例都适用。

模型监测和警报

将分析模型部署到生产只是第一步。监控模型的准确性,分数,SLA和其他指标,并实时提供自动警报,同样重要。指标通过Kafka反馈给机器学习工具以改进或替换模型。

用H2O.ai开发一个分析模型

以下显示了使用H2O构建分析模型的示例:一个开源机器学习框架,它利用Apache Spark或TensorFlow等其他框架。 数据科学家可以使用他或她最喜欢的编程语言,如R,Python或Scala。 最大的好处是H2O引擎的输出:Java代码。 生成的代码通常表现非常好,可以使用Kafka Streams轻松缩放。

以下是H2O.ai Flow(网络用户界面/笔记本)的截图以及构建分析模型的替代R代码:

用H2O Flow Web UI构建分析模型

用H2O的R库建立分析模型

他的输出是一个分析模型,生成为Java代码。 这可以在关键任务生产环境中无需重新开发的情况下使用。 因此,您不必考虑如何将Python或R模型“迁移”到基于Java平台的生产系统。

虽然这个例子使用H2O的功能来生成Java代码,但您可以使用其他框架(如TensorFlow,Apache MXNet或DeepLearning4J)执行类似的操作。

使用Apache Kafka的Streams API部署分析模型

Kafka Streams可轻松部署分析模型。 简单地将模型添加到流处理应用程序中 - 回想一下,它只是一个Java应用程序 - 将其应用于新的传入事件:

Apache Kafka的Streams API将H2O.ai模型嵌入到Kafka流中

由于Kafka Streams应用程序利用了底层的所有Kafka功能,因此这款新应用程序已准备好进行扩展和关键任务使用。 鉴于生产环境的考虑,不需要额外调整模型。

你可以找到正在运行的例子。 只需复制该项目,运行Maven构建,并查看Kafka Streams应用程序中如何使用H2O模型。

这种将机器学习应用于流处理的实现可以轻松地集成到任何自动化的持续集成工作流中,使用您最喜爱的CI / CD环境工具堆栈,例如Maven,Gradle,Chef,Puppet或Jenkins。

用开放标准共享训练与推理之间的分析模型

如前所述,您需要使用适当的技术来构建分析模型。否则,您将无法以关键任务,性能和可扩展的方式将其部署到生产环境中。在数据科学家之间共享和更新模型以开发和改进模型和DevOps团队来嵌入和生产模型的一些替代方案:

.原生模型:直接将模型部署到流处理引擎,例如在Java应用程序中通过JNI部署Python模型

.生成的代码:独立于用于构建模型的语言,生成的二进制代码或源代码可以部署到流处理引擎,该引擎对性能进行了优化。例如,即使数据科学家使用R或Python来训练模型,该模型也会生成Java字节码。

.外部服务器:使用SAS,MATLAB,KNIME或H2O等分析工具,通过请求响应调用外部分析服务器。这通常是通过REST接口完成的。

.PMML(Predictive Model Markup Language,预测模型标记语言):一种较旧的XML标准,具有一些限制和缺点,但在某些分析工具中得到支持。

.PFA(便携式格式分析):一种现代标准,除模型外还包括预处理。 PFA利用并支持JSON和Apache Avro。它在大多数分析工具中尚不支持即用型。

这些替代方案之间有各种权衡。 例如,使用像PFA这样的标准会产生额外的开销和限制,但增加了独立性和可移植性。 从Kafka的角度来看,您通常在这里大量部署关键任务,而现在的首选项通常是生成的Java代码,这些代码性能高,扩展性好,可以轻松嵌入到Kafka Streams应用程序中。 它还避免了与外部REST服务器进行通信以进行模型推断。

结论:使用Streaming Platform将分析模型部署到关键任务部署中

机器学习可以在任何行业创造价值。此外,Apache Kafka正迅速成为许多企业的中枢神经系统。机器学习是一个奇妙的用例!您可以利用Kafka进行以下操作:

.实时推断分析模型

.监控和警报

.模型的在线训练

.进入批处理层/分析群集以在那里训练分析模型

在本文中,您已经看到了一些代码示例,了解如何利用Apache Kafka及其Streams API构建用于应用和监控分析模型的可扩展的、高性能的、关键任务基础架构。

本文分享自微信公众号 - IT技术精选文摘(ITHK01)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JVM致命错误日志(hs_err_pid.log)分析

    当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导致cr...

    用户1263954
  • 跟着实例学习ZooKeeper的用法: 计数器

    这一篇文章我们将学习使用Curator来实现计数器。 顾名思义,计数器是用来计数的, 利用ZooKeeper可以实现一个集群共享的计数器。 只要使用相同的pat...

    用户1263954
  • 缓存服务器syns to listen sockets drop导致创建socket失败

    问题描述: 最近遇到了一个syn丢包的情况,当系统磁盘、网络、cpu都无压力的时候,系统莫名其妙出现“sync to listen sockets drop”...

    用户1263954
  • vuex详细介绍和使用方法

    当项目比较庞大的时候,每个组件的状态比较多,为了方便管理,需要把组件中的状态抽取出来,放入Vuex中进行统一管理。常用的登录,购物车等一下数据的存储

    小周sri的码农
  • Java并发编程--CountDownLatch

      CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。

    在周末
  • 【杨镇】【中译修订版】以太坊的分片技术官方介绍

    本文的目的是为那些希望理解分片建议详情,乃至去实现它的朋友提供一份相对完整的细节说明和介绍。本文仅作为二次方分片(quadratic sharding)的第一阶...

    圆方圆学院
  • Pytorch 1.1.0驾到!小升级大变动,易用性更强,支持自定义RNN

    Pytorch添加的一个新特性是更好地支持带有TorchScript (PyTorch JIT)的快速自定义递归神经网络(fastrnns)。

    新智元
  • 51Nod--1008 N的阶乘 mod P

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1008

    指点
  • linux网络编程之进程间通信基础(二):死锁、信号量与PV原语简介

    一、死锁 (1) 死锁是指多个进程之间相互等待对方的资源,而在得到对方资源之前又不释放自己的资源,这样,造成循环等待的一种现象。如果所有进程都在等待一个不可能发...

    s1mba
  • Golang学习-第三篇 认识Web框架

    序言 作为一个Web开发人员,相信对框架并不陌生。那么什么是Web框架呢?我们学习的语言中有哪些框架呢?带着这两个疑问,来走进我们今天要写的内容。 正文 什么是...

    李海彬

扫码关注云+社区

领取腾讯云代金券