结合 Apache Kafka 生态系统,谈谈2018年机器学习五大趋势
本博文的主要内容与我在 Confluent Blog 中写的关于 Apache Kafka 生态系统和机器学习文章一样,但这里我更关注深度学习/神经网络。我还讨论了 Apache Kafka 生态系统中的一些创新以及机器学习最近几个月的趋势:Uber 和 Netflix 上的 KSQL,ONNX,AutoML 和机器学习平台。下面,让我们来看看这些有趣的平台以及它们之间是如何相互关联的。
KSQL:Apache Kafka 上的流式 SQL 语言
根据这篇文章(https://www.confluent.io/blog/ksql-open-source-streaming-sql?spm=a2c4e.11153959.blogcont507388.15.33b53218bbuEnD)可知:
“KSQL 是 Apache Kafka 上的流式 SQL 引擎,KSQL 降低了流处理领域的门槛,为 Kafka 中的数据处理提供了一个简单且完全交互的 SQL 接口,并且不再需要用诸如 Java 或 Python 编程语言编写代码!KSQL 是一个开放源码(Apache 2.0 licensed),具有分布式,可扩展,可靠和实时等特性。它支持大量的流处理操作,包括聚合,连接,窗口化,会话等等。”
你可以编写类似 SQL 查询的语句来部署可伸缩的关键型流处理 app(利用 Kafka Streams 底层技术)——这绝对是 Kafka 开源生态系统中的一大亮点。
KSQL 和机器学习
KSQL 是在 Kafka Streams 基础之上构建的,因此允许构建可扩展的关键型服务,它还包括神经网络在内的机器学习模型可通过构建用户自定义函数(UDF)轻松的嵌入。这些天我正在准备一个例子:将一个神经网络(更确切地说是一个自动编码器)用于传感器分析对异常进行检测,例如:实时检测病人健康检查中的健康临界值,以便向医生发送警报。
现在我们来谈谈机器学习生态系统中一些比较有意思的新发展。
ONNX:代表深度学习模式的开放版本
根据 ONNX 官网可知:
“ONNX 代表着深度学习模式的开放版本,采用 ONNX,AI 开发人员可以更轻松地在各种最先进的工具之间对模型进行迁移,并选择最适合他们的组合。”
这听起来与 PMML(预测模型标记语言,更多细节请参阅本文)和 PFA(便携式格式分析)类似,这两个标准用于定义和共享机器学习模型。然而,ONNX 在几个方面有所不同:
ONNX 和 Apache Kafka 生态系统
不幸的是,ONNX 还不支持 Java。 因此,目前还不支持将它嵌入到 Kafka Streams Java API 本地——只能通过一种解决方法:执行 REST 调用或嵌入 JNI 绑定。但我相信这只是时间问题,因为 Java 平台对许多企业部署关键任务应用程序来说非常重要。
现在,你可以使用 Kafka 的 Java API 或其他 Kafka 客户端。Confluent Blog 为多种编程语言提供了官方客户端,如 Python 或 Go,这两种编程语言都适用于机器学习应用程序。
自动机器学习(AKA AutoML)
如此处所述:
“自动机器学习(AutoML)是一个炙手可热的新领域,旨在使您轻松选择不同的机器学习算法,其参数设置和预处理方法提高了在大数据中检测复杂模式的能力。”
使用 AutoML,你不需要学习任何关于机器学习的知识就可以构建分析模型。 AutoML 使用决策树、聚类、神经网络等不同的实现方式来构建和比较不同模型,AutoML 支持即开即用。你只需要上传或连接历史数据集,然后单击几个按钮即可启动该过程——不一定对于每种用例来说都是完美的,但是你可以很轻松的改进许多现有的流程,而无需使用罕见且昂贵的数据科学家。
DataRobot 和 Google AutoML 是这个领域众多知名云产品中的两个。H2O AutoML 被集成到其开源的机器学习框架中,同时它们也提供了一个非常好的基于UI的商业产品,称为无人驾驶汽车AI。我强烈建议在任何一个 AutoML 工具上花费30分钟的时间来研究下,来看看现在的人工智能工具如何发展,这真的很吸引人。
AutoML 和 Apache Kafka 生态系统
大多数 AutoML 工具都提供了模型的部署。你可以访问分析模型,即通过一个 REST 接口,而不是像 Kafka 可扩展的事件驱动架构这样的的完美解决方案。 有一个好消息就是:许多 AutoML 解决方案还允许导出其生成的模型,以便将它们部署到你的应用程序中。例如,在 H2O 开源框架中的 AutoML 只是众多选择之一。您只需在你选择的编程语言(R,Python,Scala,Web UI)中使用另外一个操作:
这和构建线性回归方法、决策树或神经网络比较类似。其结果是生成的 Java 代码,你可以很轻松地将其嵌入到 Kafka Streams 微服务或任何其他的 Kafka 应用程序中去。借助 AutoML,你无需对机器学习有特别深入的了解,同样也可以构建和部署高度可扩展的机器学习。
ML 平台:Uber 的 Michelangelo 平台; Netflix 的 Meson 平台
科技巨头通常比“传统企业”早几年,他们早在几年前就已经建立了你今天或明天想要建造的东西。同样,ML 平台也不例外。编写一个来训练分析模型的机器学习源代码只是真实世界 ML 基础设施中非常小的一部分。你需要考虑整个开发过程,下图显示了 ML 系统中隐藏的技术结构:
你可能会用不同的技术来构建几个分析模型,并非所有内容都将在你的 Spark、Flink 聚类或单个云基础架构中构建。你可以在公共云中的一些大而昂贵的 GPU 上运行 TensorFlow 来构建强大的神经网络。又或者你可以使用 H2O 构建立一些小的,但非常有效率和高性能的决策树,它能在几微秒内做出推断。 ML 有许多应用用例。
这就是为什么许多科技巨头已经建立了自己的 ML 平台,如 Uber 的 Michelangelo 或Netflix 的 Meson。这些 ML 平台允许他们构建和监控强大的可扩展分析模型,同时也能够灵活地为每个用例选择正确的 ML 技术。
应用于 ML 平台的 Apache Kafka 生态系统
Apache Kafka 能够取得如此成功的原因之一就是它被很多科技巨头广泛使用。几乎所有伟大的硅谷公司,如 LinkedIn,Netflix,Uber 和 eBay 都在谈论他们将 Kafka 作为其关键任务应用的中枢神经系统。许多人专注于分布式信息流平台,但是我们也看到越来越多的附加组件被采用,如 Kafka Connect,Kafka Streams,REST Proxy,Schema Registry 以及 KSQL。
再看看上面的图片,想一想:Kafka 不适合 ML 平台吗?它可以进行训练,监控,部署,推理,配置,A / B 测试等。这也许就是 Uber,Netflix 和其他许多公司已经将 Kafka 作为 ML 基础设施核心组件的原因。
这一次,你不会被迫只使用一种特定的技术。Kafka 最棒的设计理念之一就是:你可以一次又一次地从它的分布式提交日志中重新处理数据,这就意味着可以使用一种技术构建不同的模型作为 Kafka 接收器(比如 Apache Flink 或 Spark),或者连接不同的技术,如:用于本地测试的 scikit-learn,运行在 Google Cloud GPU 上实现强大的深度学习的 TensorFlow,用于 AutoML 的 H2O 节点的部署安装,以及其它的部署在 Docker 容器或 Kubernetes中 Kafka Streams ML 的一些应用程序。所有这些 ML 应用程序都会按照自己的步调并行地使用数据,不过他们经常性的必须这么做。
这个例子很好的说明了如何使用 Kafka 和 Kafka Streams 来自动训练以及对可扩展 ML 微服务的部署。它没有必要再添加另一个大数据集群,这就是在你的 ML 应用程序上使用 Kafka Streams 或 KSQL 代替其他流处理框架的主要区别之一。
Apache Kafka 和深度学习:OOP 会议上的幻灯片
在对 Apache Kafka 生态系统和机器学习/深度学习的新趋势的所有讨论的同时,也展示了作者在 OOP 2018 会议上的演讲中展示幻灯片,幻灯片请点击此处观看(https://dzone.com/articles/5-machine-learning-trends-2018-combined-with-apach?spm=a2c4e.11153959.blogcont507388.34.493e3218ggyLiJ)。
我还使用了 Apache Kafka,Kafka Streams 以及不同的开源ML框架(如H2O,TensorFlow 和 DeepLearning4j(DL4J))构建了一些示例。GitHub 项目显示了将分析模型部署到高度可扩展的容错任务关键型 Kafka 微服务上是一件很容易的事。我们也很快将会推出一个 KSQL 演示。
原文发布时间为:2018-04-18

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python学习之旅:访问MySQL数据库
Python学习之旅:访问MySQL数据库 MySQL是Web世界中使用最广泛的数据库服务器。为服务器端设计的数据库,能承受高并发访问。 python如何使用MySQL数据库呢? 首先需要安装MySQL,我这里安装的版本是 5.0.96-community-nt。 接下来安装python访问MySQL的驱动,MySQL官方提供了mysql-connector-python驱动,可前往下载安装。 使用import MySQLdb测试是否安装成功。 操作数据库,常用的是增删改查了。话不多说,直接上代码。 这里还是要推荐下小编的Python学习群:483546416,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2017最新的Python资料和0基础入门教程,欢迎初学和进阶中的小伙伴。在不忙的时间我会给大家解惑。 连接MySQL数据库 查询(模糊查询) 添加(批量添加) 测试批量添加: 修改(批量修改) 测试批量修改: 删除数据(批量删除) 统计 执行测试: 结果: 以上学习了Python操作MySQL数据库的基础知识。有需要的可以参考哦~ 小结: 执行INSER...
- 下一篇
php获取一些时间实现方法(实践)
php获取一些时间实现方法(实践) 这几天在开发的时候遇到的一些时间上的问题,整理了一下,分享给大家,可以看看,有需要的话可以利用一下。 1.获取上个月第一天及最后一天. echo date('Y-m-01', strtotime('-1 month')); echo "<br/>"; echo date('Y-m-t', strtotime('-1 month')); echo "<br/>"; 上面的方法有些问题,做下修改: 上个月第一天: echo date('Y-m-d', strtotime(date('Y-m-01') . ' -1 month')); // 计算出本月第一天再减一个月 上个月最后一天: echo date('Y-m-d', strtotime(date('Y-m-01') . ' -1 day')); // 计算出本月第一天再减一天 2.获取当月第一天及最后一天. $BeginDate=date('Y-m-01', strtotime(date("Y-m-d"))); echo $BeginDate; echo "<br/&g...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长