天天看點

tensorflow serving docker

背景介紹

 TensorFlow Serving 是一個用于機器學習模型 serving 的高性能開源庫。它可以将訓練好的機器學習模型部署到線上,使用 gRPC 作為接口接受外部調用。更加讓人眼前一亮的是,它支援模型熱更新與自動模型版本管理。這意味着一旦部署 TensorFlow Serving 後,你再也不需要為線上服務操心,隻需要關心你的線下模型訓練。

 TensorFlow Serving的典型的流程如下:學習者(Learner,比如TensorFlow)根據輸入資料進行模型訓練。等模型訓練完成、驗證之後,模型會被釋出到TensorFlow Serving系統伺服器端。用戶端送出請求,由服務端傳回預測結果。用戶端和服務端之間的通信采用的是RPC/REST協定。

官方資料

 TensorFlow Serving的中文版資料不多,是以能做的基本上就是參考英文官網的文檔,一個是

tensorflow serving github官網

,一個是

tensorflow serving web官網

,前者能夠穩定打開,後者看天看心情能否打開。

 建議選型tensorflow serving作為tensorflow服務容器的一定要熟讀

,要對每個細節扣的很細,這樣才能了解TFS能夠提供的核心能力。

 補充一點,之前在調研資料的時候發現阿裡雲也提供基于TFS提供線上預測的雲能力,特想了解他們如何解決cpu高消耗的問題。

安裝選型

 tensorflow serving提供三種安裝方式:1、docker安裝、2、通過APT安裝、3、編譯源碼,本着快速驗驗證的原則我們自然而然的選擇了docker安裝。

 其實按照我們當時的試想如果TFS在性能上有比較明顯優勢我們可以通過K8S管理docker這樣能夠非常友善的更新TFS的版本。

 TFS的官方提供的docker可以在

TFS的docker官網

找到,根據不同的TF版本和是否GPU進行選型,參考當時情況的是TF是1.6.0版本,TFS選型1.12.0,沒仔細研究過TFS和TF之間的關系,但是按照TF的版本邏輯在同一個大版本1.X的情況下相容低版本的API,是以TFS版本更高相容。

 補充一點,一開始使用TFS最新版本的時候在java API調用方面有些相容性問題(具體原因沒仔細分析),個人建議是TFS的docker版本和編譯java api的TFS版本保持一緻。

安裝指令

 TFS的啟動指令需要參考TFS本身的指令和docker相關的指令,前者指定TFS的啟動參數,後者指定docker的端口和目錄映射問題。

docker run -t --rm -p 8500:8500 -p 8501:8501 
-v /home/zhi.wang/tensorflow-serving/model:/models 
-e MODEL_NAME=wdl_model tensorflow/serving:1.12.0 
--enable_batching=true 
--batching_parameters_file=/models/batching_parameters.txt &           

說明:

  • -p 8500:8500 -p 8501:8501 用于綁定rpc和rest端口。
  • -v /home/zhi.wang/tensorflow-serving/model:/models 用于綁定目錄映射。
  • -e MODEL_NAME=wdl_model指定TFS加載模型名字,和目錄tensorflow-serving/model下的模型名字保持一緻, 如/home/zhi.wang/tensorflow-serving/model/wdl_model。
  • --enable_batching=true 設定TFS開啟batch功能。
  • --batching_parameters_file=/models/batching_parameters.txt 綁定批量參數。

batching_parameters

num_batch_threads { value: 40 }
batch_timeout_micros { value: 0 }
max_batch_size { value: 1024 }           
  • 參考github issue設定的TFS的批量參數。

model directory

[wdl_model]# tree
.
├── 1
│   ├── saved_model.pb
│   └── variables
│       ├── variables.data-00000-of-00001
│       └── variables.index
├── 10
│   ├── saved_model.pb
│   └── variables
│       ├── variables.data-00000-of-00001
│       └── variables.index
├── 2
│   ├── saved_model.pb
│   └── variables
│       ├── variables.data-00000-of-00001
│       └── variables.index
├── 3
│   ├── saved_model.pb
│   └── variables
│       ├── variables.data-00000-of-00001
│       └── variables.index
├── 4
│   ├── saved_model.pb
│   └── variables
│       ├── variables.data-00000-of-00001
│       └── variables.index           
  • TFS支援多版本的模型加載,預設會加載數字最大的版本。
  • TFS加載的模型通過export_savedmodel的api生成。