微服务中的机器学习

介绍

现在,等待数据进入最终的数据存储(如HDFS或S3)是不合理的。在机器学习和深度学习模型再训练之前,它需要用于分类或模型执行。

数据必须立即可用,以令人难以置信的速度从每个云中的设备、网关、日志、web应用程序、移动应用程序、区块链节点等。这种不断变化的、快速的数据需要更灵活的方式来利用它。

需要的不仅仅是简单的SQL分析

随着数据变得与如此多的用例相关——从物联网、网络安全、日志分析到SQL变化数据捕获等等——我们将发现将机器学习执行推向各个领域的必要性。

每天都有一位客户向我提出问题。他们不再只是问如何大规模获取数据,而是问如何通过同时存储到多个云和Hadoop来大规模吸收数据——同时为重新训练他们的机器学习模型提供数据,并针对输入的数据运行这些模型。每个人都需要亚秒级的响应和实时流分析。

对于其中一些,SQL就足够了,比如在数据流上使用Apache NiFi内部的Apache Calcite查询。

然而,我们经常需要额外的分析,例如对图像的YOLO分析,或者对从电话和聊天中获取的非结构化文本块的情感分析。

幸运的是,有一些选项可以在适当构建的环境中处理,从而允许开发人员构建微服务,将机器学习添加到这个过程中。不幸的是,像IT企业中的大多数事情一样,定义可能是模糊的,或者由许多相互竞争的组织、公司或媒体实体定义。我不想加入这些派别之一。由于来自支持微服务的实体,Pivotal,我将尝试找到一个有意义的基线。

你可以根据需要对我的定义进行加减。我们还可以更进一步,使我们的服务没有服务器。

根据用例的不同,它们的重量更轻,可能更合适。

如果你正在评估这样的范例,请检查一下开源Apache NiFi StatelessContainer,看看是否适合你的需要。我建议你也看看Apache OpenWhisk或者FNProject。在哪里运行这些服务有很多选择,从本地云到YARN,再到Kubernetes上的项目。

通用调度器——YUNIKORN

现在,让我们继续关注基本的微服务,我将其定义为可维护的、可测试的、松散耦合的服务,这些服务可以用一个真正的用例/功能独立部署。

因此,为了在实时数据流中大规模运行机器学习,我建议使用以下选项:Apache Kafka Streams、Spring Boot、Apache Flink、Apache NiFi Flows和CSDW Models。为了让你在相同的环境中运行所有这些模型——我已经这么做了——我推荐使用Apache Kafka作为解耦代理。

将此安全管理的企业流平台作为我们的分布式通道,可以提供此类系统所需的许多基础设施、安全性、可伸缩性、解耦和监控。使用专门的工具,你可以全面了解这些复杂的机器学习过程中发生了什么。

让我们来看看将微服务用于机器学习和深度学习的几种方法

第一个例子是最简单的。我想运行YOLO SSD处理图像,因为它是从物联网相机提取数据。在这个用例中,当图像被MiNiFi加载时,它被发送到Apache NiFi。

Apache NiFi可以通过自定义处理器运行PMML、ONNX、TensorFlow Lite或其他模型,比如我用Java为Apache MXNet和TensorFlow编写。

这个方法非常快,但需要至少有一部分机器学习管道直接运行在Apache NiFi中。

我们还可以将模型一直推到边缘,并让MiNiFi代理在边缘设备或网关上运行模型。

第二个例子是简单的过程,如最小化MiNiFi流,捕捉源数据——无论是从相机获取图像,从日志获取文本,或从一个传感器获取时间序列数据,直接将其发送到Kafka,处理Kafka Stream或Flink microservice可以执行你的机器学习模型。你可以通过Flink ML运行模型,或者让Flink调用现有的PMML模型。你也可以通过Flink或KafkaStreams来执行ONNX模型。

有很多模型可供选择,包括TensorFlow Lite、ONNX、PMML、DeepLearning4Java、H2O和Pickle。这些模型运行器中的大多数都可以被分发,并被大多数微服务选项使用。同样,你需要决定哪种语言和流处理引擎对你的用例最有意义。

在微服务中构建机器学习

第三种选择是用Python、R或Scala构建机器学习微服务。你可以将微服务托管在Kubernetes上运行的完全安全的企业环境中。托管模型并提供用于集成的REST API非常容易。这个选项非常适合于将机器学习和深度学习模型与所有其他微服务轻松集成。

它还允许数据科学家在一个敏捷的协作环境中工作,允许他们轻松地部署不断发展的模型。

如果你需要使用异步Kafka来将其与其他进程解耦,我们可以使用Apache NiFi将Kafka消息转换为对REST微服务的调用,然后将结果打包到第二个Kafka消息中。

Apache NiFi将成为你的通用路由器和网关,用于大规模的微服务和消息。

另一个用例是处理流文本数据,比如社交媒体。我们可以使用这些文本数据来扩展我们模型的机器学习语料库。使用Apache Kafka作为通用消息网关,在这个最后的用例中,我们将让Apache NiFi获取一个社交媒体提要——比如实时推文——并将这些推文作为AVRO选项推送到我们已经建立的标准模式下。

Cloudera Schema Registry

我们使用Cloudera Schema Registry作为通用服务,任何人都可以使用简单的REST API与之进行接口。微服务的更多解耦使得我们可以很容易地通过Kafka在AVRO中将这些消息发送给许多订阅者。

Kafka消息的一个消费者可以是使用Apache Flink编写的自定义Java微服务,应用自定义NLP机器学习来分析任何给定的内容。

这个结果将被发送到Kafka,要么由Apache NiFi处理生产(大数据存储,如Kudu, HBase, Hive,或Impala)或可能直接到对象存储,如Amazon S3。

欢迎关注我的公众号,如果你有喜欢的外文技术文章,可以通过公众号留言推荐给我。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值