第一步,安装docker
第二步,docker的tensorflow serving镜像安装,有两种,一个是CPU版本,一个是GPU版本(重要)
在后面需要简单测试下tensorflow serving+docker环境是否成功,这里我们使用tensorflow serving源码中的模型,所以首先将tensorflow serving源码克隆到自己的电脑中,命令:
git clone https://github.com/tensorflow/serving
下载完之后,你可以看到当前目录下多了一个serving文件夹。
接下来docker中tensorflow serving镜像安装
1. CPU版本
一行命令搞定:docker pull tensorflow/serving
pull完CPU tensorflow/serving镜像之后,通过命令docker images可以看到多了一个tensorflow/serving,如下图所示:
现在我们可以用tensorflow serving源码文件夹中的模型来检测是否成功,命令:
docker run --runtime=nvidia -p 8501:8501 \
--mount type=bind,\
source=/path/to/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 &
注:这里的source就是你之前克隆的tfserving源码中saved_model_half_plus_two_cpu模型的绝对路径,例如你放在/home/xx中,那么就是/home/xx/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu, -t tensorflow/serving就是选择我们刚刚pull成功的tensorflow serving的CPU镜像
运行之后,如果显示如下,则服务成功:
接下来可以另开一个终端请求服务
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
若显示结果为:
{ "predictions": [2.5, 3.0, 4.5] }
CPU版本的tensorflow serving+docker的环境安装成功。
2. GPU版本
一般我们的模型都是需要GPU的,所以重要的还是GPU版本的安装。
首先我们需要安装nvidia-docker(这里假设你的系统已经安装好了CUDA以及cudnn),有些资料上是直接安装的nvidia-docker镜像,但这个镜像对cuda版本要求很高,需要10.0以上,而我的系统是8.0,明显不支持,升级cuda比较麻烦,可以通过https://hub.docker.com/r/nvidia/cuda/这个网址中查看符合自己cuda版本的docker环境的nvidia-docker,例如我的系统是ubuntu16.04, cuda8.0,我安装的是8.0-devel:
docker pull nvidia/cuda:8.0-devel
安装成功后可以通过docker images查看,并且可以通过 docker run --runtime=nvidia --rm nvidia/cuda:8.0-devel nvidia-smi来看是否可用,若可用,则显示如下(nvidia-smi命令就是查看GPU使用情况的):
nvidia-docker安装成功后,就需要安装tfserving gpu镜像了,网上给的资料 直接docker pull tensorflow/serving:latest-gpu对cuda的版本要求还是很高,这里可以查看https://hub.docker.com/r/tensorflow/serving/tags网址,选择适合的版本,例如我选择的是1.11.1-gpu版本,然后命令行是:docker pull tensorflow/serving:1.11.1-gpu,同样,安装成功后可以通过docker images查看pull成功的镜像,然后通过模型来验证是否成功(选择源码中half_plus_two_gpu模型):
docker run --runtime=nvidia -p 8501:8501 \
--mount type=bind,\
source=/path/to/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,\
target=/models/half_plus_two \
-e MODEL_NAME=half_plus_two -t tensorflow/serving:1.11.1-gpu &
同cpu版本一样,出现如上显示,则服务成功:
接下来测试调用:
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
出现错误,不能出现结果,在网上找资料,知道是我的tensorflow/serving:1.11.1-gpu版本过低导致,所以我又安装了tensorflow/serving:1.12.0-gpu,运行服务,测试,成功:
docker run --runtime=nvidia -p 8501:8501 \
--mount type=bind,\
source=/path/to/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,\
target=/models/half_plus_two \
-e MODEL_NAME=half_plus_two -t tensorflow/serving:1.12.0-gpu &
测试调用:
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
结果如CPU版本。
综上,就是我的Ubuntu16.04 + tensorflow serving + Docker环境安装,如果对你有用,不要忘记点赞哦 *—*。
后面,我会写怎么将自己的模型用docker+ tensorflow serving进行服务和调用。