apache kafka
在慕尼黑举行的OOP 2018大会上,我介绍了有关使用Apache Kafka生态系统和诸如TensorFlow,DeepLearning4J或H2O之类的深度学习框架构建可扩展,关键任务微服务的演讲的更新版本。 我想分享更新后的幻灯片,并讨论一些有关最新趋势的更新,这些我已纳入演讲中。
主要故事与我在Confluent博客中有关Apache Kafka生态系统和机器学习的文章相同 : 如何使用Apache Kafka在生产中构建和部署可扩展机器学习。 但是我更专注于深度学习/神经网络。 我还讨论了Apache Kafka生态系统中的一些创新以及最近几个月ML的趋势: KSQL,ONNX,AutoML,Uber和Netflix的ML平台 。 让我们看一下这些有趣的主题,以及它们之间的关系。
KSQL –一种Apache Kafka之上的流SQL语言。
“ KSQL是Apache Kafka的流SQL引擎 。 KSQL将入口栏放到了流处理领域,提供了一个简单且完全交互SQL接口来处理Kafka中的数据。 您不再需要用Java或Python之类的编程语言编写代码! KSQL是开源的(Apache 2.0许可的),分布式的,可伸缩的,可靠的和实时的。 它支持各种强大的流处理操作,包括聚合,联接,窗口,会话化等等。” 此处有更多详细信息:“ KSQL简介:Apache Kafka的开源流SQL ”。
您可以编写类似SQL的查询来部署可扩展的,关键任务流处理应用程序(利用后台的Kafka Streams)。 绝对是Kafka开源生态系统中的一大亮点。
KSQL和机器学习
KSQL建立在Kafka Streams之上,因此允许构建可扩展的,关键任务服务。 通过构建用户定义功能(UDF),可以轻松嵌入包括神经网络在内的机器学习模型。 这些天,我正在准备一个示例,其中我将神经网络(更准确地说是自动编码器)应用于传感器分析,以实时检测医院客人的异常情况(即健康检查中的关键值),从而向医生发送警报。
现在让我们讨论一下机器学习生态系统中一些有趣的新发展。
ONNX –一种表示深度学习模型的开放格式
“ ONNX 是代表深度学习模型的开放格式 。 借助ONNX,AI开发人员可以更轻松地在最先进的工具之间移动模型,并选择最适合他们的组合。”
这听起来类似于PMML (预测模型标记语言,请参阅KDnuggets上的“ What is PMML ”)和PFA (便携式分析格式),这是另外两个定义和共享机器学习模型的标准。 但是,ONNX在以下几个方面有所不同:
- 专注于深度学习
- 背后有多家大型科技公司(AWS,Microsoft,Facebook)和硬件供应商(AMD,NVidia,Intel,Qualcomm等)
- 已经支持许多领先的开源框架(包括TensorFlow,Pytorch,MXNet)
ONNX已经在GA 1.0版中正式投入生产并可以投入生产 ( 如Amazon,Microsoft和Facebook在2017年12月宣布的那样 )。 对于不同的框架,还有一个不错的入门指南 。
ONNX和Apache Kafka生态系统
不幸的是, ONNX还没有Java支持 。 因此,尚不支持将其本身嵌入到Kafka Streams Java API中。 仅通过诸如执行REST调用或嵌入JNI绑定之类的解决方法。 但是我非常确定这只是时间问题,因为Java平台在许多企业中部署关键任务应用程序非常重要。
现在,您可以使用Kafka的Java API或其他Kafka客户端。 Confluent为多种编程语言(例如Python或Go)提供了官方客户 ,这两种语言也非常适合机器学习应用程序。
自动化机器学习(aka AutoML)
如前所述,“自动化机器学习(AutoML)是一个热门领域,其目标是使人们能够轻松选择不同的机器学习算法,其参数设置以及提高其检测大数据中复杂模式能力的预处理方法。” 在这里 。
使用AutoML,您无需任何有关机器学习的知识就可以构建分析模型。 AutoML实现使用决策树,聚类,神经网络等的不同实现来开箱即用地构建和比较不同的模型。 您只需上传或连接历史数据集,然后单击一些按钮即可开始该过程。 可能不是每个用例都完美,但是您可以轻松地改进许多现有流程,而无需稀有且昂贵的数据科学家。
DataRobot或Google的AutoML是该领域许多知名的云产品中的两种。 H2O的AutoML已集成到其开源ML框架中,但是它们还提供了一个很好的以UI为中心的商业产品,称为“ 无人驾驶AI ”。 我强烈建议您在任何AutoML工具上花费30分钟。 看到AI工具如今如何发展真是令人着迷。
AutoML和Apache Kafka生态系统
大多数AutoML工具都提供其模型的部署。 您可以通过REST接口访问分析模型。 对于可扩展的事件驱动架构(如Kafka)而言,并不是一个完美的解决方案。 好消息: 许多AutoML解决方案还允许导出其生成的模型,以便您可以将其部署到应用程序中 。 例如,H2O开源框架中的AutoML只是众多选择之一。 您只能以您选择的编程语言(R,Python,Scala,Web UI)使用其他操作:
aml <- h2o.automl(x = x, y = y,
training_frame = train,
leaderboard_frame = test,
max_runtime_secs = 30)
与构建线性回归,决策树或神经网络类似。 结果是生成的Java代码,您可以轻松地将它们嵌入到Kafka Streams微服务或任何其他Kafka应用程序中。 AutoML使您能够构建和部署高度可扩展的机器学习,而无需掌握ML的丰富知识。
Netflix的介子
科技巨头通常比“传统企业”领先几年。 他们已经在几年前建造了今天或明天建造的建筑。 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,都是“ you-name-it”博客,并谈论了它们如何将Kafka用作关键任务应用程序的事件驱动中枢神经系统。 许多人将重点放在用于消息传递的分布式流平台上,但是我们也看到越来越多的插件被采用,例如Kafka Connect,Kafka Streams,REST Proxy,Schema Registry或KSQL。
如果您再次看一下上面的图片,请考虑一下Kafka:它不是ML平台的理想选择吗? 培训,监视,部署,推理,配置,A / B测试等,等等。这可能就是为什么Uber,Netflix和许多其他公司已经将Kafka用作其ML基础架构的核心组件的原因。
同样,您不被迫仅使用一种特定技术。 Kafka的出色设计概念之一是,您可以一次又一次地从其分布式提交日志中重新处理数据。 这意味着您既可以使用Kafka Sink(例如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而不是其他Stream Processing框架的主要区别之一。
Apache Kafka和深度学习– OOP的幻灯片
最后,在对Apache Kafka生态系统和机器学习/深度学习的新趋势进行了所有这些讨论之后,这是我在OOP 2018大会上的演讲的更新幻灯片:
2018年机器学习趋势与 KaiWähner 的Apache Kafka生态系统相结合
我还使用Apache Kafka,Kafka Streams和不同的开源ML框架(例如H2O,TensorFlow和DeepLearning4j(DL4J))构建了一些示例 。 Github项目显示了将分析模型部署到高度可扩展,容错且关键任务的Kafka微服务有多么容易。 KSQL演示也将很快发布。
请分享您的反馈。 您是否已经在机器学习领域使用Kafka? 您除了使用Kafka核心外还使用哪些组件? 请随时与我联系以详细讨论。
翻译自: https://www.javacodegeeks.com/2018/02/machine-learning-trends-2018-combined-apache-kafka-ecosystem.html
apache kafka