作者:劉才權
編輯:趙一帆
大家習慣使用TensorFlow進行模型的訓練、驗證和預測,但模型完善之後的生產上線流程,就變得五花八門了。針對這種情況Google提供了TensorFlow Servering,可以將訓練好的模型直接上線並提供服務。在2017年的TensorFlow開發者Summit上便提出了TensorFlow Serving。
傳送門:
https://www.youtube.com/watch?v=q_IkJcPyNl0&list=PLOU2XLYxmsIKGc_NBoIhTn2Qhraji53cv&index=13
但那時候客戶端和服務端的通信只支持gRPC。在實際的生產環境中比較廣泛使用的C/S通信手段是基於RESTfull API的,幸運的是從TF1.8以後,TF Serving也正式支持RESTfull API通信方式了。
服務框架基於TF Serving的持續集成框架還是挺簡明的,基本分三個步驟:
模型訓練
這是大家最熟悉的部分,主要包括數據的收集和清洗、模型的訓練、評測和優化;
模型上線
前一個步驟訓練好的模型在TF Server中上線;
服務使用
客戶端通過gRPC和RESTfull API兩種方式同TF Servering端進行通信,並獲取服務;
TF Serving的工作流程主要分為以下幾個步驟:
Source會針對需要進行加載的模型創建一個Loader,Loader中會包含要加載模型的全部信息;
Source通知Manager有新的模型需要進行加載;
Manager通過版本管理策略(Version Policy)來確定哪些模型需要被下架,哪些模型需要被加載;
Manger在確認需要加載的模型符合加載策略,便通知Loader來加載最新的模型;
客戶端像服務端請求模型結果時,可以指定模型的版本,也可以使用最新模型的結果
簡單示例TF Serving客戶端和服務端的通信方式有兩種(gRPC和RESTfull API)
示例(一):RESTfull API形式
1. 準備TF Serving的Docker環境
目前TF Serving有Docker、APT(二級制安裝)和源碼編譯三種方式,但考慮實際的生產環境項目部署和簡單性,推薦使用Docker方式。
docker pull tensorflow/serving
2. 下載官方示例代碼
示例代碼中包含已訓練好的模型和與服務端進行通信的客戶端(RESTfull API形式不需要專門的客戶端)
mkdir -p /tmp/tfservingcd /tmp/tfservinggit clone https://github.com/tensorflow/serving
3. 運行TF Serving
這裡需要注意的是,較早的docker版本沒有「--mount」選項,比如Ubuntu16.04默認安裝的docker就沒有(我的環境是Ubuntu 18.04)。
docker run -p 8501:8501 \ --mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,\ target=/models/half_plus_two \ -e MODEL_NAME=half_plus_two -t tensorflow/serving &
4. 客戶端驗證
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
5. 返回結果
示例(二):gRPC形式
1. 準備TF Serving的Docker環境
目前TF Serving有Docker、APT(二級制安裝)和源碼編譯三種方式,但考慮實際的生產環境項目部署和簡單性,推薦使用Docker方式。
docker pull tensorflow/serving
2. 下載官方示例代碼
mkdir -p /tmp/tfservingcd /tmp/tfservinggit clone https://github.com/tensorflow/serving
3. 模型編譯
python tensorflow_serving/example/mnist_saved_model.py models/mnist
4. 運行TF Serving
這裡需要注意的是,較早的docker版本沒有「--mount」選項,比如Ubuntu16.04默認安裝的docker就沒有(我的環境是Ubuntu 18.04)。
docker run -p 8500:8500 \ --mount type=bind,source=$(pwd)/models/mnist,target=/models/mnist \ -e MODEL_NAME=mnist -t tensorflow/serving
5. 客戶端驗證
python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=127.0.0.1:8500
6. 返回結果
Inference error rate: 11.13%
這裡需要注意的是,直接運行mnist_client.py會出現找不到「tensorflow_serving」的問題,需要手動安裝,
pip install tensorflow-serving-api
資料參考
TF Serving官方文檔:<https://www.tensorflow.org/serving/>
END
機器學習算法工程師
一個用心的公眾號
長按,識別,加關注進群,學習,得幫助
你的關注,我們的熱度,
我們一定給你學習最大的幫助