1. 程式人生 > >使用tensorflow-serving部署tensorflow模型

使用tensorflow-serving部署tensorflow模型

電路板 spec 當前 出了 newgrp 電路 相對路徑 get mode

使用docker部署模型的好處在於,避免了與繁瑣的環境配置打交道。不需要安裝Python,更不需要安裝numpy、tensorflow各種包,直接一個docker就包含了全部。docker的方式是如今部署項目的第一選擇。

一、docker用法初探

1、安裝

docker安裝需要兩個命令:

sudo apt-get install docker
sudo apt-get install docker.io

好的學習資料不必遠求
docker --help
docker run --help

2、基礎命令

docker ps 查看當前正在運行的實例
docker images查看現有的鏡像
docker kill xxxx 殺死正在運行的實例

docker pull xxxx 從遠程docker倉庫拉下來別人已經配置好的鏡像

3、避免每次都sudo

docker命令默認只能root權限使用,這樣實在有些繁瑣。docker安裝完成之後,docker組已經存在了,但是當前用戶不在docker組裏面,所以只需要把當前用戶添加到docker組即可。
groups 查看當前用戶所在的那些組
groupadd docker 添加組
sudo usermod -aG docker $USER 把當前用戶添加到docker組,還有另外一種方法:sudo gpasswd -a ${USER} docker
newgrp - docker 刷新docker組

sudo service docker restart 重啟服務

4、docker映射

docker就是一個鏡像,我們需要做的就是把docker和外部世界建立聯系。最緊密的聯系有如下三種:

  • 網絡映射:IP和端口號
  • 磁盤映射
    使用docker -v 宿主機目錄:docker目錄
    一律采用絕對路徑,不要投機取巧使用相對路徑,這樣可以給自己減少許多麻煩,大智若愚正是此意。
  • 環境變量
    使用docker -e one=two,three=four 這樣的命令

二、快速運行tensorflow-serving

安裝docker和docker.io兩個包。
sudo docker pull tensorflow/serving 把serving的鏡像拉下來

git clone https://github.com/tensorflow/serving 復制一份現有的模型,當然也可以使用自己的模型,這個倉庫是tensorflow serving的整個源碼庫,裏面給出了一些demo,我們只需要demo那一部分

使用docker命令啟動服務

TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
docker run -t --rm -p 8501:8501    -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two"    -e MODEL_NAME=half_plus_two    tensorflow/serving &

docker -e設置環境變量
docker -p設置端口映射
docker -v設置磁盤映射
建立映射時,都是形如“宿主機:docker容器”這種格式。

最後萬事俱備,只欠東風了。

# Query the model using the predict API
curl -d '{"instances": [1.0, 2.0, 5.0]}'    -X POST http://localhost:8501/v1/models/half_plus_two:predict

# Returns => { "predictions": [2.5, 3.0, 4.5] }

容器啟動之後,使用docker ps查看有哪些實例,使用docker kill 實例ID 殺死實例,使用docker inspect 實例ID查看實例詳情。

建立磁盤映射除了使用-v參數,也可以使用mount參數。

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 &

三、tensorflow-serving的默認配置

我們需要了解tensorflow/serving這個鏡像的默認配置,鏡像的默認配置就像電路板的引腳一樣,是固定的。

serving鏡像提供了兩種調用方式:gRPC和HTTP請求。gRPC默認端口是8500,HTTP請求的默認端口是8501,serving鏡像中的程序會自動加載鏡像內/models下的模型,通過MODEL_NAME指定/models下的哪個模型。

參考資料

https://www.tensorflow.org/serving/api_rest

使用tensorflow-serving部署tensorflow模型