kafka grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST
kafka 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 Serving或在Goodle Cloud ML Engine上部署經過訓練的TensorFlow模型所需的格式。
TensorFlow Serving的架構概述中詳細描述了核心架構:
這種體系結構允許部署和管理不同模型以及這些模型的版本,包括A / B測試之類的附加功能。 在下面的演示中,我們僅部署一個單一的TensorFlow模型用于圖像識別(基于著名的Inception神經網絡)。
演示:使用RPC混合流處理:TensorFlow服務+ Kafka流
免責聲明:以下是該步驟的簡化版本。 有關包括源代碼和腳本的完整示例,請轉到我的Github項目“ TensorFlow Serving + gRPC + Java + Kafka Streams ”。
要做的事
步驟1:建立一個TensorFlow模型并將其導出為'SavedModel'格式
我只是簡單地添加了一個使用TensorFlow構建的現有預訓練圖像識別模型。 您只需要使用TensorFlow的API導出模型,然后使用導出的文件夾。 TensorFlow使用Protobuf存儲模型圖并為神經網絡的權重添加變量。
Google ML Engine展示了如何使用“ ML Engine入門指南 ”創建簡單的TensorFlow模型以進行普查。 在第二步中,您可以按照“ 使用Flowers數據集進行圖像分類 ”指南,使用“轉移學習”構建更高級的圖像識別示例。
您還可以將云服務和本地服務相結合,例如,使用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
kafka grpc
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的kafka grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 织梦插件怎么安装(织梦插件下载)
- 下一篇: nutshell_Nutshell中的J