Analytics Zoo Cluster Serving自動擴展分布式推理


作者: Jiaming Song, Dongjie Shi, Gong, Qiyuan, Lei Xia, Wei Du, Jason Dai

       隨着深度學習項目從實驗到生產的發展,越來越多的應用需要對深度學習模型進行大規模和實時的分布式推理服務。雖然已經有一些工具可用於相關任務(如模型優化、服務、集群調度、工作流管理等等),但對於許多深度學習的工程師和科學家來說,開發和部署能夠透明地擴展到大型集群的分布式推理工作流仍然是一個具有挑戰性的過程。

 

       為了應對這一挑戰,我們在Analytics Zoo 0.7.0版本中發布了Cluster Serving的支持。Analytics Zoo Cluster Serving是一個輕量級、分布式、實時的模型服務解決方案,支持多種深度學習模型(例如TensorFlow*、PyTorch*、Caffe*、BigDL和OpenVINO™的模型)。它提供了一個簡單的pub/sub API(發布/訂閱),用戶可以輕松地將他們的推理請求發送到輸入隊列(使用一個簡單的Python API)。然后,Cluster Serving將使用分布式流框架(如Apache Spark* Streaming、Apache Flink*等等)在大型集群中進行實時模型推理和自動擴展規模。Analytics Zoo Cluster Serving的總體架構如圖1所示。

 

圖1   Analytics Zoo Cluster Serving 解決方案總體框架

Cluster Serving的工作原理

你可以按照下面的三個簡單步驟使用Cluster Serving解決方案(如圖2所示)。

 

圖2   使用Analytics  Zoo Cluster Serving解決方案的步驟

1、 在本地節點安裝和准備Cluster Serving環境

  • 將已經完成訓練的模型復制到本地節點。當前支持的模型包括TensorFlow、PyTorch、Caffe、BigDL和OpenVINO的模型。
  • 在本地節點上安裝Analytics Zoo(例如使用單個pip Install命令即可完成)
  • 在本地節點上配置集群服務器,包括模型的文件路徑和集群地址(如Apache Hadoop*YARN集群、Spark集群、Kubernetes*集群等)

請注意這一點,Cluster Serving解決方案只需要部署在本地節點上,集群(YARN或者Kubernetes)並不需要做任何改動。

2、 啟動Cluster Serving服務

通過在本地節點上運行startup script腳本啟動Cluster Serving服務,例如:

start-cluster-serving.sh 

在后台,Cluster Serving將自動部署訓練好的模型,並以分布式的方式跨集群服務於模型推理請求。您可以使用TensorBoard*監測其運行時狀態(例如推理吞吐量)。

3、 分布式實時(流式)推理

Cluster Serving提供了一個簡單的pub/sub API(發布/訂閱),你可以使用這個簡單的Python API將推理請求輕松地發送到輸入隊列(當前使用的是Redis* Streams),例如:

input = InputQueue() input.enqueue_image(id, image)

然后,Cluster Serving將從Redis* Streams讀取請求,使用Spark Streaming或Flink跨集群運行分布式實時推理,並通過Redis返回結果。最后,您可以再次使用這個簡單的Python API獲得推理結果,例如:

output = OutputQueue() results = output.dequeue()

 

快速入門示例

你也可以通過運行Analytics Zoo 0.7.0版本中提供的快速入門示例來嘗試使用Cluster Serving。快速入門示例包含了使用Cluster Serving運行分布式推理流程所需的所有組件,首次使用它的用戶能夠在幾分鍾內啟動並運行。快速入門示例包含:

  • 一個Analytics Zoo Cluster Serving的Docker Image (已安裝所有依賴)
  • 一個示例配置文件
  • 一個訓練好的TensorFlow模型,以及推理樣本數據
  • 一個示例Python客戶端程序

按照下面的步驟運行快速入門示例。有關詳細說明,請參閱Analytics Zoo Cluster Serving編程指南

1、 啟動 Analytics Zoo docker

#docker run -itd --name cluster-serving --net=host intelanalytics/zoo-cluster-serving:0.7.0 bash

2、 登錄container並轉到我們准備好的工作目錄

#docker exec -it cluster-serving bash #cd cluster-serving

3、 在container內啟動Cluster Serving

#cluster-serving-start

4、 運行Python客戶端程序,開始推理

#python quick_start.py

以下推理結果應該出現在你本地終端顯示上:

image: fish1.jpeg, classification-result: class: 1's prob: 0.9974158 image: cat1.jpeg, classification-result: class: 287's prob: 0.52377725 image: dog1.jpeg, classification-result: class: 207's prob: 0.9226527

        如果你希望構建和部署定制的Cluster Serving流程,可以從修改快速入門示例中提供的示例配置文件和示例Python程序開始。下面是這些文件的大致結構,僅供參考。有關更多詳細信息,請參閱 Cluster Serving編程指南

配置文件(config.yaml)如下所示:

## Analytics Zoo Cluster Serving Config Example model: # model path must be set path: /opt/work/model data: # default, localhost:6379 src: # default, 3,224,224 image_shape: params: # default, 4 batch_size: # default, 1 top_n: spark: # default, local[*], change this to spark://, yarn, k8s:// etc if you want to run on cluster master: local[*] # default, 4g driver_memory: # default, 1g executor_memory: # default, 1 num_executors: # default, 4 executor_cores: # default, 4 total_executor_cores:

Python程序(quick_start.py)如下所示:

from zoo.serving.client import InputQueue, OutputQueue import os import cv2 import json import time if __name__ == "__main__": input_api = InputQueue() base_path = "../../test/zoo/resources/serving_quick_start"
    if not base_path: raise EOFError("You have to set your image path") output_api = OutputQueue() output_api.dequeue() path = os.listdir(base_path) for p in path: if not p.endswith("jpeg"): continue img = cv2.imread(os.path.join(base_path, p)) img = cv2.resize(img, (224, 224)) input_api.enqueue_image(p, img) time.sleep(5) # get all results and dequeue
 result = output_api.dequeue() for k in result.keys(): output = "image: " + k + ", classification-result:" tmp_dict = json.loads(result[k]) for class_idx in tmp_dict.keys(): output += "class: " + class_idx + "'s prob: " + tmp_dict[class_idx] print(output)

 

結論

        我們很高興與您分享Analytics Zoo 0.7.0版本中提供的這種新的群集模型服務支持,並希望此解決方案有助於簡化您的分布式推理工作流並提高您的工作效率。我們很樂意在GitHub和郵件列表上聽到您的問題和反饋。我們將持續對Analytics Zoo進行開發工作,構建統一數據分析和人工智能平台,敬請期待更多關於Analytics Zoo的信息。

 

關於Cluster Serving,也可以參見視頻講解回放:《ClusterServing簡介與案例


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM