日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

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

發(fā)布時(shí)間:2023/12/3 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

機(jī)器學(xué)習(xí)/深度學(xué)習(xí)模型可以通過(guò)不同的方式進(jìn)行預(yù)測(cè)。 我的首選方法是將分析模型直接部署到流處理應(yīng)用程序(如Kafka Streams或KSQL )中。 您可以例如使用TensorFlow for Java API 。 這樣可以實(shí)現(xiàn)最佳延遲和外部服務(wù)的獨(dú)立性。 在我的Github項(xiàng)目中可以找到幾個(gè)示例: 使用TensorFlow,H2O.ai,Deeplearning4j(DL4J)在Kafka Streams微服務(wù)中進(jìn)行模型推斷 。

但是, 直接部署模型并不總是可行的方法 。 有時(shí)有意義或需要在另一個(gè)服務(wù)基礎(chǔ)架構(gòu)中部署模型,例如TensorFlow Serving for TensorFlow模型。 然后通過(guò)RPC /請(qǐng)求響應(yīng)通信完成模型推斷。 組織或技術(shù)原因可能會(huì)迫使這種方法。 或者,您可能希望利用內(nèi)置功能來(lái)管理模型服務(wù)器中的不同模型并對(duì)其進(jìn)行版本控制。

因此,您將流處理與RPC /請(qǐng)求-響應(yīng)范例結(jié)合在一起。 該體系結(jié)構(gòu)如下所示:

諸如TensorFlow Serving之類(lèi)的外部模型服務(wù)基礎(chǔ)架構(gòu)的優(yōu)點(diǎn):

  • 與現(xiàn)有技術(shù)和組織流程的簡(jiǎn)單集成
  • 如果您來(lái)自非流媒體世界,則更容易理解
  • 以后也可以遷移到真實(shí)流
  • 內(nèi)置用于不同模型和版本控制的模型管理

缺點(diǎn):

  • 作為遠(yuǎn)程呼叫而不是本地推斷的更糟糕的延遲
  • 沒(méi)有離線推斷(設(shè)備,邊緣處理等)
  • 將Kafka Streams應(yīng)用程序的可用性,可伸縮性以及延遲/吞吐量與RPC接口的SLA耦合在一起
  • Kafka處理未涵蓋的副作用(例如,發(fā)生故障時(shí))(例如,恰好一次)

使用Apache Kafka,Kafka Streams和TensorFlow服務(wù)將流處理和模型服務(wù)器結(jié)合在一起

我創(chuàng)建了Github Java項(xiàng)目“ TensorFlow Serving + gRPC + Java + Kafka Streams ”,以演示如何使用Apache Kafka,Kafka Streams和使用TensorFlow Serving部署的TensorFlow模型進(jìn)行模型推斷 。 這些概念與其他ML框架和Cloud Providers非常相似,例如,您還可以將Google Cloud ML Engine用于TensorFlow(在后臺(tái)使用TensorFlow Serving)或Apache MXNet和AWS模型服務(wù)器 。

大多數(shù)用于模型服務(wù)的ML服務(wù)器也可擴(kuò)展為服務(wù)其他類(lèi)型的模型和數(shù)據(jù),例如,您也可以將非TensorFlow模型部署到TensorFlow服務(wù)。 許多ML服務(wù)器可用作云服務(wù)并用于本地部署。

TensorFlow服務(wù)

讓我們快速討論TensorFlow服務(wù) 。 它可以用來(lái)托管您訓(xùn)練有素的分析模型。 與大多數(shù)模型服務(wù)器一樣,您可以通過(guò)請(qǐng)求-響應(yīng)范例進(jìn)行推理。 gRPC和REST / HTTP是使用的兩種常見(jiàn)技術(shù)和概念。

博客文章“ 如何使用TF Serving將TensorFlow模型部署到生產(chǎn)中 ”很好地解釋了如何將經(jīng)過(guò)訓(xùn)練的TensorFlow模型導(dǎo)出和部署到TensorFlow Serving基礎(chǔ)架構(gòu)。 您可以在任何地方部署自己的基礎(chǔ)架構(gòu),也可以利用Google Cloud ML Engine等云服務(wù)。 TensorFlow推薦使用SavedModel的格式來(lái)保存模型,這是使用TensorFlow Serving或在Goodle Cloud ML Engine上部署經(jīng)過(guò)訓(xùn)練的TensorFlow模型所需的格式。

TensorFlow Serving的架構(gòu)概述中詳細(xì)描述了核心架構(gòu):

這種體系結(jié)構(gòu)允許部署和管理不同模型以及這些模型的版本,包括A / B測(cè)試之類(lèi)的附加功能。 在下面的演示中,我們僅部署一個(gè)單一的TensorFlow模型進(jìn)行圖像識(shí)別(基于著名的Inception神經(jīng)網(wǎng)絡(luò))。

演示:使用RPC混合流處理:TensorFlow服務(wù)+ Kafka流

免責(zé)聲明:以下是該步驟的簡(jiǎn)化版本。 有關(guān)包括源代碼和腳本的完整示例,請(qǐng)轉(zhuǎn)到我的Github項(xiàng)目“ TensorFlow Serving + gRPC + Java + Kafka Streams ”。

要做的事

  • 安裝并啟動(dòng)ML服務(wù)引擎
  • 部署預(yù)建的TensorFlow模型
  • 創(chuàng)建Kafka集群
  • 實(shí)施Kafka Streams應(yīng)用程序
  • 部署Kafka Streams應(yīng)用程序(例如在筆記本電腦上本地或Kubernetes集群上)
  • 生成流數(shù)據(jù)以測(cè)試Kafka流和TensorFlow服務(wù)的結(jié)合
  • 步驟1:創(chuàng)建一個(gè)TensorFlow模型并將其導(dǎo)出為'SavedModel'格式

    我只是簡(jiǎn)單地添加了一個(gè)使用TensorFlow構(gòu)建的現(xiàn)有預(yù)訓(xùn)練圖像識(shí)別模型。 您只需要使用TensorFlow的API導(dǎo)出模型,然后使用導(dǎo)出的文件夾。 TensorFlow使用Protobuf來(lái)存儲(chǔ)模型圖并添加神經(jīng)網(wǎng)絡(luò)權(quán)重的變量。

    Google ML Engine展示了如何使用“ ML Engine入門(mén)指南 ”創(chuàng)建簡(jiǎn)單的TensorFlow模型以進(jìn)行普查。 在第二步中,您可以按照指南“ 使用Flowers數(shù)據(jù)集進(jìn)行圖像分類(lèi)”,使用 “轉(zhuǎn)移學(xué)習(xí)”構(gòu)建更高級(jí)的圖像識(shí)別示例。

    您還可以將云服務(wù)和本地服務(wù)相結(jié)合,例如,使用Google ML Engine構(gòu)建分析模型,然后像我們一樣使用TensorFlow Serving在本地部署它。

    步驟2:安裝并啟動(dòng)TensorFlow Serving Server +部署模型

    提供不同的選項(xiàng)。 在Mac上安裝TensforFlow在2018年年中仍然很痛苦。apt-get在Linux操作系統(tǒng)上更容易工作。 不幸的是,您無(wú)法在Mac上使用“ brew”命令或簡(jiǎn)單的zip文件。 備擇方案:

    • 您可以使用Bazel構(gòu)建系統(tǒng)來(lái)構(gòu)建項(xiàng)目并編譯所有內(nèi)容 –從字面上看,這將永遠(yuǎn)(在我的筆記本電腦上)花費(fèi)很多時(shí)間。
    • 通過(guò)Docker容器安裝和運(yùn)行TensorFlow Serving 。 這也需要構(gòu)建項(xiàng)目。 此外,文檔不是很好并且過(guò)時(shí)。
    • 初學(xué)者的首選選項(xiàng)=>使用帶有TensorFlow Serving的預(yù)構(gòu)建Docker容器 。 我使用了Thamme Gowda的示例 。 構(gòu)建項(xiàng)目不僅包含TensorFlow Serving Docker映像,而且還展示了如何在Java應(yīng)用程序和TensorFlow Serving之間進(jìn)行g(shù)RPC通信的示例,他對(duì)此表示贊揚(yáng)。

    如果您要使用自己的模型,請(qǐng)閱讀指南“將TensorFlow模型部署到TensorFlow服務(wù) ”。 或者使用云服務(wù),例如查看“ Google ML Engine入門(mén) ”。

    步驟3:建立Kafka叢集和Kafka主題

    創(chuàng)建一個(gè)本地Kafka環(huán)境(Apache Kafka代理+ Zookeeper)。 最簡(jiǎn)單的方法是開(kāi)源Confluent CLI ,它也是Confluent開(kāi)源和Confluent Enteprise平臺(tái)的一部分。 只需輸入“ confluent start kafka ”即可。

    您也可以使用Kafka即服務(wù)創(chuàng)建集群。 最好的選擇是Confluent Cloud – Apache Kafka即服務(wù) 。 您可以在Confluent Cloud Professional上進(jìn)行“游玩”,也可以在AWS,GCP或Azure上進(jìn)行Confluent Cloud Enterprise進(jìn)行任務(wù)關(guān)鍵型部署,包括99.95%SLA和高達(dá)2 GB /秒的超大吞吐量。 第三種選擇是在內(nèi)部或在云中連接到現(xiàn)有的Kafka集群(請(qǐng)注意,在構(gòu)建項(xiàng)目之前,您需要在Kafka Streams Java代碼中更改代理URL和端口)。

    接下來(lái),為該示例創(chuàng)建兩個(gè)Kafka主題(“ ImageInputTopic”用于圖像的URL,而“ ImageOutputTopic”用于預(yù)測(cè)結(jié)果):

    步驟4構(gòu)建和部署Kafka Streams應(yīng)用+發(fā)送測(cè)試消息

    Kafka Streams微服務(wù)(即Java類(lèi)) “ Kafka Streams TensorFlow服務(wù)gRPC示例”是Kafka Streams Java客戶(hù)端。 微服務(wù)使用gRPC和Protobuf與TensorFlow Serving服務(wù)器進(jìn)行請(qǐng)求-響應(yīng)通信,以進(jìn)行模型推斷以預(yù)測(cè)圖像的內(nèi)容。 請(qǐng)注意,Java客戶(hù)端不需要任何TensorFlow API,而只需gRPC接口。

    本示例執(zhí)行Java main方法,即,它啟動(dòng)運(yùn)行Kafka Streams微服務(wù)的本地Java進(jìn)程。 它持續(xù)等待新事件到達(dá)“ ImageInputTopic”以進(jìn)行模型推斷(通過(guò)對(duì)TensorFlow Serving的gRCP調(diào)用),然后將預(yù)測(cè)結(jié)果實(shí)時(shí)發(fā)送至“ ImageOutputTopic”(以毫秒為單位)。

    同樣,您可以在任何地方(包括Kubernetes(例如,內(nèi)部OpenShift集群或Google Kubernetes Engine),Mesosphere,Amazon ECS或什至在Java EE應(yīng)用程序中)部署此Kafka Streams微服務(wù),并動(dòng)態(tài)地進(jìn)行放大和縮小。

    現(xiàn)在發(fā)送消息,例如使用kafkacat ,并使用kafka-console-consumer消耗預(yù)測(cè)。

    再一次,如果您想查看源代碼和腳本,請(qǐng)轉(zhuǎn)到我的Github項(xiàng)目“ TensorFlow Serving + gRPC + Java + Kafka Streams ”。

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

    總結(jié)

    以上是生活随笔為你收集整理的模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。