日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一篇帶你搞定TensorFlowServing架構(gòu)、部署和應(yīng)用

開篇

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

TensorFlow Serving 架構(gòu)介紹

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

TensorFlow Serving 組件

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

Servable

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

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

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

Model

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

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

Loader

Loader 管理Servable 的生命周期。Loader API 提供了一個獨立于特定機器學(xué)習(xí)算法,數(shù)據(jù)和用戶產(chǎn)品用例的通用基礎(chǔ)平臺。具體說,Loader 主要處理Servable 的加載和卸載,并為其提供標(biāo)準(zhǔn)的API。

Source

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

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

Manager

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

為 Servable 提供服務(wù),卸載 Servable。

Managers 從 Source 獲取信息并跟蹤所有的 Version。Manager 盡可能的滿足 Source 的請求,但當(dāng)所需的資源不存在時,會拒絕載入一個 Aspired Versions。Manager 也可能延遲觸發(fā)一個卸載 (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 向上的箭頭它會為要加載的模型創(chuàng)建一個Loader,Loader中會包含要加載模型的全部信息;

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

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

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

● Client(客戶端)向服務(wù)端請求模型結(jié)果時,可以通過ServableHandle指定模型的版本(Servable Version),這部分的信息由Manager進(jìn)行管理(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 安裝方式

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

docker pull tensorflow/serving

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

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

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

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

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 發(fā)布到主機的端口 8501,并采用名為my_model的模型并將其綁定到默認(rèn)模型基本路徑 ( ${MODEL_BASE_PATH}/${MODEL_NAME}= /models/my_model)。最后,填充了環(huán)境變量 MODEL_NAME,并保留MODEL_BASE_PATH其默認(rèn)值。

TensorFlow Serving apt-get安裝

設(shè)置安裝源如下命令

# 添加 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模型導(dǎo)出

既然已經(jīng)安裝好了TensorFlow Serving,那么就需要加載對應(yīng)的模型進(jìn)行機器學(xué)習(xí)的推演。TensorFlow 提供了Keras 模型可以方便地導(dǎo)出為 SavedModel 格式。假設(shè)我們有一個名為 model 的 Keras 模型,使用下面的代碼即可將模型導(dǎo)出為 SavedModel:

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

TensorFlow模型部署

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

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

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

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

TensorFlow Serving 客戶端調(diào)用

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

RESTful API 以標(biāo)準(zhǔn)的 HTTP POST 方法進(jìn)行交互,請求和回復(fù)均為 JSON 對象。為了調(diào)用服務(wù)器端的模型,我們在客戶端向服務(wù)器發(fā)送以下格式的請求:

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

請求內(nèi)容如下:

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

Python 客戶端例子

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

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])

總結(jié)

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

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

作者介紹

崔皓,社區(qū)編輯,資深架構(gòu)師,擁有20年架構(gòu)經(jīng)驗。曾任惠普技術(shù)專家,參與多個機器學(xué)習(xí)項目,撰寫、翻譯20多篇機器學(xué)習(xí)、NLP等熱門技術(shù)文章?!斗植际郊軜?gòu)原理與實踐》作者。


新聞名稱:一篇帶你搞定TensorFlowServing架構(gòu)、部署和應(yīng)用
文章路徑:http://www.dlmjj.cn/article/cdphpdd.html