成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇帶你搞定TensorFlow Serving 架構、部署和應用

開發
本文分三個部分分別介紹了TensorFlowServing 的組成和工作方式。

開篇

一般在練完機器學習的模型之后,需要將模型host成服務才能供使用者調用。TensorFlow的機器學習模型的部署也遵循這個方式,它會通過TensorFlow Serving的方式將模型做成服務,讓使用者通過某種方式來調用模型,而不是直接運行模型推測的代碼,也不需要使用者進行模型的部署和安裝工作。整個過程需要通過TensorFlow Serving 把模型部署到服務器上。通常來說會使用Web框架(例如:flask、Django、tornado)創建服務器應用,這個應用會承載TensorFlow 生成的機器學習模型,應用啟動后就會一直在后臺運行,并等待客戶端請求,當應用檢測到有請求,就會執行模型進行推測,將推測結果返回給用戶。本文主要介紹TensorFlow Serving 的工作原理、安裝以及應用。

TensorFlow Serving 架構介紹

如果要了解TensorFlow Serving 的架構就需要了解它所包含的組件,以及組件之間是如何配合工作的。

TensorFlow Serving 組件

首先介紹一下TensorFlow Serving的主要組件,TensorFlow Serving的功能可抽象為一些組件,每個組件實現了不同的API任務,其中最重要的是Servable, Loader, Source, 和 Manager,我們先看看這些組件是如何定義的。

Servable

Servable 是 TensorFlow Serving 中最核心的抽象,是客戶端用于執行計算 (例如:預測或推斷) 的底層對象。Servables 的大小和力度是靈活的,單個 Servable 可能包含從一個查找表的單個分片,到一個單獨的模型,或是推理模型的元組。Servables 可以是任何類型或接口,這使得其具有靈活性并易于將來的改進,例如:流式結果、實驗性 APIs、異步操作模式。但是,Servables 并不管理自身的生命周期。

由于每個模型都就可能進行改,特別是算法配置、權重等參數會隨著對模型的深入了解而進行調整。TensorFlow Serving 能夠為服務實例的生命周期內處理一個或多個 版本 (versions) 的 Servable,這使得新的算法配置,權重和其他數據可以隨時被加載。這就是 Servables Versions,它可以使多個版本的 Servable 可以并發加載。在提供服務時,客戶端可以請求最新版本的模型或是制定版本 ID 的模型。

正如上面說到的一個Servable 會有多個Version,那么多個版本的 Servable 的序列就成為Servable Stream,它會按照版本號的遞增排序。

Model

TensorFlow Serving 將一個 模型 (model) 表示為一個或多個 Servables。一個機器學習模型可能包括一個或多個算法 (包括學習到的權重) 和查找表。

你可以將一個復合模型 (composite model) 表示成:多個獨立的 Servables或者一個組合的 Servables。一個 Servable 也可能是一個模型的一部分,例如,一個大的查找表可能被分割到多個不同的 TensorFlow Serving 實例中。

Loader

Loader 管理Servable 的生命周期。Loader API 提供了一個獨立于特定機器學習算法,數據和用戶產品用例的通用基礎平臺。具體說,Loader 主要處理Servable 的加載和卸載,并為其提供標準的API。

Source

Source 是用于查找和提供 Servable 的插件模塊,每個 Source 提供零個或多個 Servable Stream。對于每個 Servable Stream,一個 Source 為一個 Loader 實例對不同版本的載入提供支持。(一個 Source 通常是由零個或多個 SourceAdapter 鏈接在一起,其中最后一項將觸發 Loader。)

TensorFlow Serving 中 Source 的接口可以從任意的存儲系統中發現 Servable,TesorFlow Serving 包含了 Source 實現的通用引用。例如:Source 可以利用 RPC 等機制,并可以輪訓文件系統。Source 可以維護多個 Servable 或 不同版本分片中的狀態,這將有助于 Servable 在不同版本之間進行更新。

Manager

前面說到了Servable,它自己是不會維護自己的生命周期的,需要通過Managers 來維護 Servable 的整個生命周期,包括:加載 Servable,

為 Servable 提供服務,卸載 Servable。

Managers 從 Source 獲取信息并跟蹤所有的 Version。Manager 盡可能的滿足 Source 的請求,但當所需的資源不存在時,會拒絕載入一個 Aspired Versions。Manager 也可能延遲觸發一個卸載 (unload),例如:基于要確保任意時點都要至少有一個 Version 被加載的策略,Manager 需要等待一個新的 Version 完成加載后再卸載之前的 Version。

Tensorflow Serving Manager 提供一個簡單窄接口 (narrow interface),GetServableHandler(),用于客戶端訪問以加載的 Servable 實例。

TensorFlow Serving 工作流程

上面介紹了TensorFlow Serving的幾個組件,包括:Servable、Model、Loader、Source、Manager。接下來看看它們是如何合作工作的--TensorFlow Serving 工作流。如圖1 所示,TensorFlow Serving的工作流程主要分為以下幾個步驟:

● 先看圖1 中右下方的Source組件,順著Source 向上的箭頭它會為要加載的模型創建一個Loader,Loader中會包含要加載模型的全部信息;

● 接著,Source通知Manager有新的模型需要進行加載;

● Manager(DynamicManager)通過版本管理策略(Version Policy)來確定哪些模型需要被下架,哪些模型需要被加載;

● Manager在確認需要加載的模型符合加載策略,便通知Loader來加載最新的模型;

● Client(客戶端)向服務端請求模型結果時,可以通過ServableHandle指定模型的版本(Servable Version),這部分的信息由Manager進行管理(Manager管理Servable的生命周期),然后通過Manager返回給客戶端;

圖片來源:??https://www.tensorflow.org/static/tfx/serving/images/serving_architecture.svg?hl=zh-cn??

圖1 TensorFlow Serving 工作流程

TensorFlow Serving 安裝和部署

上面我們介紹了TensorFlow Serving 的組成和工作流程,這里我們接著來說說如何安裝TensorFlow Serving,這里推薦使用docker 和 apt-get兩種安裝方式。

TensorFlow Serving 的Docker 安裝方式

首先保證已經安裝了Docker ,然后通過運行以下命令拉取最新的 TensorFlow Serving docker 鏡像。

docker pull tensorflow/serving

這將拉取安裝TensorFlow Serving 的最小 Docker 鏡像。

接著需要對如下屬性進行設置,gRPC 公開的端口 8500,REST API 公開的端口 8501,可選環境變量MODEL_NAME(默認為model),可選環境變量MODEL_BASE_PATH(默認為/models)。這些屬性的設置參考如下命令:

tensorflow_model_server --port=8500 --rest_api_port=8501 \
--model_name=${MODEL_NAME} --
model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME}

然后,就是就是設置主機開放端口,設置所服務的SavedModel,設置客戶將引用的模型名稱。

docker run -p 8501:8501 \
--mount
type=bind,source=/path/to/my_model/,target=/models/my_model \
-e MODEL_NAME=my_model -t tensorflow/serving

以上的命令,啟動了一個 Docker 容器,將 REST API 端口 8501 發布到主機的端口 8501,并采用名為my_model的模型并將其綁定到默認模型基本路徑 ( ${MODEL_BASE_PATH}/${MODEL_NAME}= /models/my_model)。最后,填充了環境變量 MODEL_NAME,并保留MODEL_BASE_PATH其默認值。

TensorFlow Serving apt-get安裝

設置安裝源如下命令

# 添加 Google的TensorFlow Serving源
echo "deb [arch=amd64] http://storage.googleapis.com/tensorflow-serving-apt
stable tensorflow-model-server tensorflow-model-server-universal" | sudo tee
/etc/apt/sources.list.d/tensorflow-serving.list
# 添加gpg key
curl https://storage.googleapis.com/tensorflow-serving-apt/tensorflow-
serving.release.pub.gpg | sudo apt-key add -

更新源后,即可使用 apt-get 安裝

sudo apt-get updatesudo apt-get install tensorflow-model-server

TensorFlow模型導出

既然已經安裝好了TensorFlow Serving,那么就需要加載對應的模型進行機器學習的推演。TensorFlow 提供了Keras 模型可以方便地導出為 SavedModel 格式。假設我們有一個名為 model 的 Keras 模型,使用下面的代碼即可將模型導出為 SavedModel:

tf.saved_model.save(model, "保存的目標文件夾名稱")

TensorFlow模型部署

安裝好TensorFlow Serving 并且將模型導出,接下來就是將模型部署到TensorFlow Serving上了。 我們利用如下命令,設置模型所暴露的端口號,模型名以及模型所存儲的路徑。

想詳細了解如何快速應用 TensorFlow 實現多端部署的同學,可以報名學習中國大學 MOOC 上的官方課程:??https://www.icourse163.org/course/youdao-1467217161#/info?? ,或者看看谷歌開發者專家對TensorFlow部署的介紹和講解:

??https://zhibo.51cto.com/liveDetail/373??

tensorflow_model_server \
--rest_api_port=端口號(如8501) \
--model_name=模型名 \
--model_base_path="SavedModel格式模型的文件夾絕對地址(不含版本號)"

TensorFlow Serving 客戶端調用

好了到這里,我們完成了TensorFlow Serving 的安裝和部署工作,此時我們訓練好的機器學習模型已經靜靜地躺在服務器上了,就等著客戶端調用了。TensorFlow Serving 支持gRPC 和 RESTful API的 調用。本文主要介紹較為通用的 RESTful API 方法的調用。

RESTful API 以標準的 HTTP POST 方法進行交互,請求和回復均為 JSON 對象。為了調用服務器端的模型,我們在客戶端向服務器發送以下格式的請求:

http://服務器地址:端口號/v1/models/模型名:predict

請求內容如下:

{
"signature_name": "需要調用的函數簽名(Sequential模式不需要)",
"instances": 輸入數據
}

Python 客戶端例子

以下示例使用 ??Python 的 Requests 庫?? 向本機的 TensorFlow Serving 服務器發送 MNIST 測試集的前 10 幅圖像并返回預測結果,同時與測試集的真實標簽進行比較。從代碼中可以看出,使用了MNISTLoader 方法獲取要加載的數據,通過json.dumps 方法輸入要請求的數據。接著設置headers,通過requests的post方法請求本地端口為8501 的TensorFlow Serving 服務,并將返回的結果賦值給json_response,最后把預測結果中的predictions返回進行響應的處理。

import json
import numpy as np
import requests
from zh.model.utils import MNISTLoader

data_loader = MNISTLoader()
data = json.dumps({
"instances": data_loader.test_data[0:3].tolist()
})
headers = {"content-type": "application/json"}
json_response = requests.post(
'http://localhost:8501/v1/models/MLP:predict',
data=data, headers=headers)
predictions = np.array(json.loads(json_response.text)['predictions'])
print(np.argmax(predictions, axis=-1))
print(data_loader.test_label[0:10])

總結

本文分三個部分分別介紹了TensorFlow Serving 的組成和工作方式,TensorFlow Serving由Servable、Model、Loader、Source和Manager等組件組成,它們各司其職完成搜索Servable,加載Servable以及管理Servable生命周期的工作。接著,我們使用Docket 和apt-get的方式安裝TensorFlow Serving ,并導出機器學習模型將其部署到TensorFlow Serving上。最后,使用客戶端(Python為例)對機器學習模型進行調用并返回結果。

本文介紹的TensorFlow Serving 知識僅僅只是冰山一角,如果想進一步探索機器學習更多領域,大家可以學習??《 TensorFlow 入門實操課程 》??。想提升機器學習能力,挑戰自己,也歡迎報名參與 TensorFlow 開發者認證計劃??https://tensorflow.google.cn/certificate??,掌握更多機器學習技能,強化你的核心競爭力。

作者介紹

崔皓,51CTO社區編輯,資深架構師,擁有20年架構經驗。曾任惠普技術專家,參與多個機器學習項目,撰寫、翻譯20多篇機器學習、NLP等熱門技術文章。《分布式架構原理與實踐》作者。

責任編輯:張燕妮
相關推薦

2020-02-28 11:29:00

ElasticSear概念類比

2021-03-15 08:38:42

StringBuffeJava基礎Java開發

2021-05-15 10:16:14

Python匿名函數

2024-04-17 13:21:02

Python匿名函數

2022-05-28 15:59:55

PythonPandas數據可視化

2021-03-06 10:05:03

Python函數變量

2021-11-10 09:19:41

PythonShutil模塊

2021-11-17 10:11:08

PythonLogging模塊

2022-03-30 10:51:40

JavaScript性能調優

2023-04-20 08:00:00

ES搜索引擎MySQL

2021-05-20 06:57:16

RabbitMQ開源消息

2021-02-20 10:06:14

語言文件操作

2021-02-27 10:20:18

Go語言flag包開發技術

2021-07-13 11:37:47

cpu架構Linux

2021-05-31 08:59:57

Java數據庫訪問JDBC

2021-01-13 08:40:04

Go語言文件操作

2021-11-13 10:11:45

Pythonurllib庫Python基礎

2020-03-20 08:30:56

手機移動端適配

2023-06-16 07:41:36

分層架構軟件架構

2021-06-16 08:28:25

unary 方法函數技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: h片免费在线观看 | 日本不卡一区 | 色婷婷一区二区三区四区 | 中文字幕在线三区 | 成人欧美一区二区三区在线播放 | 国产综合在线视频 | 久久99精品久久久水蜜桃 | 日本久草| 99热最新 | 国产视频一视频二 | 黄色网址大全在线观看 | 欧美不卡视频 | 最近中文字幕在线视频1 | 久久久久亚洲精品 | 亚洲欧美bt | 久久久久国产精品 | 91色在线视频 | 国产精品久久片 | 成人蜜桃av| 91久久精品日日躁夜夜躁欧美 | 久草在线中文888 | 国产精品污www一区二区三区 | 国产视频欧美 | 欧美一级三级 | 久久精品一 | 伊人精品久久久久77777 | 成人三级电影 | 亚洲天堂免费 | 91xxx在线观看 | 91一区二区| 国产精品成人一区二区三区夜夜夜 | 亚洲成av人片在线观看无码 | 91精品国产乱码久久久 | 中文字幕三区 | 日韩中文字幕网 | 免费看爱爱视频 | 日韩一级在线 | 日本不卡一区 | 国产精品欧美精品 | 精品一区在线免费观看 | 91精品国产综合久久久动漫日韩 |