grpc

机器学习/深度学习模型可以通过不同的方式进行预测。 我的首选方法是将分析模型直接部署到流处理应用程序(如Kafka Streams或KSQL )中。 您可以例如使用TensorFlow for Java API 。 这样可以实现最佳延迟和外部服务的独立性。 在我的Github项目中可以找到几个示例: 使用TensorFlow,H2O.ai,Deeplearning4j(DL4J)在Kafka Streams微服务中进行模型推断。

但是,直接部署模型并不总是可行的方法。 有时有意义或需要在另一个服务基础架构中部署模型,例如TensorFlow Serving for TensorFlow模型。 然后通过RPC /请求响应通信完成模型推断。 由于组织或技术原因,可能会强制采用此方法。 或者,您可能希望利用内置功能来管理模型服务器中的不同模型并对其进行版本控制。

因此,您将流处理与RPC /请求-响应范例结合在一起。 该架构如下所示:

诸如TensorFlow Serving之类的外部模型服务基础架构的优点:

  • 与现有技术和组织流程的简单集成
  • 如果您来自非流媒体世界,则更容易理解
  • 以后也可以迁移到实际流
  • 内置用于不同模型和版本控制的模型管理

缺点:

  • 作为远程呼叫而不是本地推断的更糟糕的延迟
  • 没有离线推断(设备,边缘处理等)
  • 将Kafka Streams应用程序的可用性,可伸缩性以及延迟/吞吐量与RPC接口的SLA耦合在一起
  • Kafka处理未涵盖的副作用(例如,发生故障时)(例如,恰好一次)

使用Apache Kafka,Kafka Streams和TensorFlow Serving的流处理和模型服务器的组合

我创建了Github Java项目“ TensorFlow Serving + gRPC + Java + Kafka Streams ”,以演示如何使用Apache Kafka,Kafka Streams和使用TensorFlow Serving部署的TensorFlow模型进行模型推断。 这些概念与其他ML框架和Cloud Providers非常相似,例如,您还可以将Google Cloud ML Engine用于TensorFlow(在后台使用TensorFlow Serving)或Apache MXNet和AWS模型服务器。

大多数用于模型服务的ML服务器也可扩展为服务其他类型的模型和数据,例如,您也可以将非TensorFlow模型部署到TensorFlow服务。 许多ML服务器可用作云服务并用于本地部署。

TensorFlow服务

让我们快速讨论TensorFlow服务。 它可以用来承载您训练有素的分析模型。 与大多数模型服务器一样,您可以通过请求-响应范例进行推理。 gRPC和REST / HTTP是使用的两种常见技术和概念。

博客文章“ 如何使用TF Serving将TensorFlow模型部署到生产中”很好地解释了如何将经过训练的TensorFlow模型导出和部署到TensorFlow Serving基础架构。 您可以在任何地方部署自己的基础架构,也可以利用Google Cloud ML Engine等云服务。 TensorFlow建议使用SavedModel保存模型的格式,这是使用TensorFlow服务部署训练的TensorFlow模型或在Goodle Cloud ML Engine上部署所需的格式。

TensorFlow Serving的架构概述中详细描述了核心架构:

这种体系结构允许部署和管理不同模型和这些模型的版本,包括A / B测试之类的附加功能。 在下面的演示中,我们仅部署一个TensorFlow模型进行图像识别(基于著名的Inception神经网络)。

演示:使用RPC混合流处理:TensorFlow服务+ Kafka流

免责声明:以下是该步骤的简化版本。 有关包括源代码和脚本的完整示例,请转到我的Github项目“ TensorFlow Serving + gRPC + Java + Kafka Streams ”。

要做的事

  1. 安装并启动ML服务引擎
  2. 部署预建的TensorFlow模型
  3. 创建Kafka集群
  4. 实施Kafka Streams应用程序
  5. 部署Kafka Streams应用程序(例如,在笔记本电脑上本地或Kubernetes集群上)
  6. 生成流数据以测试Kafka流和TensorFlow服务的结合

步骤1:创建一个TensorFlow模型并将其导出为'SavedModel'格式

我只是添加了一个使用TensorFlow构建的现有预训练图像识别模型。 您只需要使用TensorFlow的API导出模型,然后使用导出的文件夹。 TensorFlow使用Protobuf存储模型图并为神经网络的权重添加变量。

Google ML Engine展示了如何使用“ ML Engine入门指南”创建简单的TensorFlow模型以进行普查。 在第二步中,您可以按照“ 使用Flowers数据集进行图像分类”指南,使用Transfer Learning为图像识别构建更高级的示例。

您还可以将云服务和本地服务相结合,例如,使用Google ML Engine构建分析模型,然后像我们一样使用TensorFlow Serving在本地部署它。

步骤2:安装并启动TensorFlow Serving Server +部署模型

提供不同的选项。 在Mac上安装TensforFlow在2018年中期仍然很痛苦。apt-get在Linux操作系统上更容易工作。 不幸的是,在Mac上没有可以使用的“ brew”命令或简单的zip文件。 备择方案:

  • 您可以使用Bazel构建系统构建项目并编译所有内容–从字面上看,这将永久(在我的笔记本电脑上)花费很多时间。
  • 通过Docker容器安装和运行TensorFlow Serving 。 这也需要构建项目。 此外,文档不是很好并且过时。
  • 初学者的首选选项=>使用带有TensorFlow Serving的预构建Docker容器。 我使用了Thamme Gowda的示例。 构建一个不仅包含TensorFlow Serving Docker映像的项目,而且还展示了一个如何在Java应用程序和TensorFlow Serving之间进行gRPC通信的示例,对他表示敬意。

如果您想要自己的模型,请阅读指南“将TensorFlow模型部署到TensorFlow服务”。 或者使用云服务,例如查看“ Google ML Engine入门”。

步骤3:建立Kafka丛集和Kafka主题

创建一个本地Kafka环境(Apache Kafka代理+ Zookeeper)。 最简单的方法是开源的Confluent CLI ,它也是Confluent开源和Confluent Enteprise平台的一部分。 只需输入“ confluent start kafka ”即可。

您也可以使用Kafka即服务创建集群。 最好的选择是Confluent Cloud – Apache Kafka即服务。 您可以在Confluent Cloud Professional上进行“游玩”,也可以在AWS,GCP或Azure上进行Confluent Cloud Enterprise进行任务关键型部署,包括99.95%SLA和高达2 GB /秒的超大吞吐量。 第三种选择是在内部或在云中连接到现有的Kafka集群(请注意,在构建项目之前,您需要在Kafka Streams Java代码中更改代理URL和端口)。

接下来,为该示例创建两个Kafka主题(“ ImageInputTopic”用于图像的URL,而“ ImageOutputTopic”用于预测结果):

步骤4构建和部署Kafka Streams应用+发送测试消息

Kafka Streams微服务(即Java类) “ Kafka Streams TensorFlow服务gRPC示例”是Kafka Streams Java客户端。 微服务使用gRPC和Protobuf与TensorFlow Serving服务器进行请求-响应通信,以进行模型推断以预测图像的内容。 请注意,Java客户端不需要任何TensorFlow API,而只需gRPC接口。

本示例执行Java main方法,即,它启动运行Kafka Streams微服务的本地Java进程。 它持续等待新事件到达“ ImageInputTopic”以进行模型推断(通过对TensorFlow Serving的gRCP调用),然后将预测结果实时发送至“ ImageOutputTopic”(毫秒)。

同样,您可以在任何地方(包括Kubernetes(例如,内部OpenShift集群或Google Kubernetes Engine),Mesosphere,Amazon ECS或什至在Java EE应用程序中)部署此Kafka Streams微服务,并对其进行动态扩展和缩小。

现在发送消息,例如使用kafkacat ,并使用kafka-console-consumer消耗预测。

再一次,如果您想查看源代码和脚本,请转到我的Github项目“ TensorFlow Serving + gRPC + Java + Kafka Streams ”。

翻译自: https://www.javacodegeeks.com/2018/07/model-serving-stream-processing.html

grpc

grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST相关推荐

  1. kafka grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST

    kafka grpc 机器学习/深度学习模型可以通过不同的方式进行预测. 我的首选方法是将分析模型直接部署到流处理应用程序(如Kafka Streams或KSQL )中. 您可以例如使用TensorF ...

  2. 基于事件驱动架构构建微服务第13部分:使用来自Apache KAFKA的事件并将投影流传输到ElasticSearch...

    原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part13-read-mode ...

  3. 模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST

    机器学习/深度学习模型可以通过不同的方式进行预测. 我的首选方法是将分析模型直接部署到流处理应用程序(如Kafka Streams或KSQL )中. 您可以例如使用TensorFlow for Jav ...

  4. java grpc 服务路由_.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

    原标题:.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容 英文:devblogs.microsoft.com 来源:艾心 译文:cnblogs.com/ediso ...

  5. 两亿多用户,六大业务场景,知乎AI用户模型服务性能如何优化?

    作者 | 王政英 来源 | 知乎技术专栏 用户模型简介 知乎 AI 用户模型服务于知乎两亿多用户,主要为首页.推荐.广告.知识服务.想法.关注页等业务场景提供数据和服务,例如首页个性化 Feed 的召 ...

  6. java多线程 模型_一篇文章读懂Java多线程模型

    要真正了解Java的多线程,我们还要从进程和线程的概念说起 进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期 ...

  7. [转载]Java Web 服务,第 1 部分: Java Web 服务在未来一年内的发展

    Java Web 服务,第 1 部分: Java Web 服务在未来一年内的发展 2006 年中,Web 服务领域将发生翻天覆地的变化.对于 Java™ 开发人员而言,这些变化将包括新 Web 服务框 ...

  8. 初学AI的你也能一键部署模型服务?奥利给!!

    作者:Leon Wang,现为中科院特别研究助理 (博士后),在 AI.数据科学和科学计算等方面相关的工程实践上积累了丰富的经验. 编辑:王老湿 <AI炼丹炉实践指南>专栏前 6 篇: 学 ...

  9. 漆远:蚂蚁金服 AI 技术大揭秘, 开放“模型服务平台”

    7 月 22 - 23 日,在中国科学技术协会.中国科学院的指导下,由中国人工智能学会.阿里巴巴集团 & 蚂蚁金服主办,CSDN.中国科学院自动化研究所承办,云栖社区作为独家直播合作伙伴的 2 ...

最新文章

  1. Arthritis Rheumatology:张烜+王军发表系统性红斑狼疮患者的肠道菌群变化
  2. MATLAB读取HDF格式的SST数据
  3. opencv 3和qt5计算机视觉应用开发_【资源分享】有哪些学习openCV的网站或书籍?...
  4. 最小覆盖字串—leetcode76
  5. 对springMVC的简单理解
  6. 再记一下sscanf的一个小问题
  7. 数据库表在join时的三种方式
  8. ORACLE 修改日志大小及增加日志成员
  9. (转)金融信息服务业的国际国内竞争格局及新动向
  10. WKWebView加载HTTPS的链接
  11. ArcPad 10 的安装部署
  12. 【安卓】三星手机刷机教程
  13. 华为手机linux驱动下载,华为手机驱动官方版
  14. [有源滤波器]Sallen-key开关电容电路(二阶低通滤波器)
  15. 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
  16. 整数解(韦达定理解法)
  17. MATLAB技术沙龙之如何批量处理图像的大小
  18. 一部手机就能完成人像三维扫描建模
  19. uniapp 安卓平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限
  20. 牛客-模拟、枚举与贪心-2022.10.18

热门文章

  1. 上汽集团金忠孝: 人工智能时代的汽车将发生颠覆的变革
  2. MobX详解(二):ES7 装饰器 decorator
  3. 部分 II. Voice over IP
  4. flex的mxmlc命令行编译as3文件成swf
  5. CSS,给我们不一样的体验
  6. c++ 学习笔记 c++ 引用C库注意点:#ifdef __cplusplus 倒底是什么意思?
  7. 职场中不可深交的五种人
  8. golang 获取文件行数
  9. linux shell rm 删除子目录下 所有.o后缀文件
  10. linux shell echo 输出到标准错误 stderr