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服務容器的一定要熟讀tensorflow serving web官網,要對每個細節扣的很細,這樣才能瞭解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生成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章