由于是tensorflow 1.9.0,tensorflow 2.0的那套简便的方法就用不了
大体思路:
- 首先export model,准备计算图的代码,将保存的参数restore进入计算图;
- 然后调用export model的方法,导出模型
- 模型导出之后就直接拉取tensorflow serving的镜像然后创建,这里注意如果是tensorflow-serving-1.x.0的镜像,docker run之后就直接可以访问容器服务,tensorflow-serving-1.x.0-devel的镜像需要docker run之后,再进入容器运行tensorflow_model_server指定容器映射的端口,model_name等等,如果计算图没有其他依赖,直接拉取tensorflow-serving-1.x.0就行
- 创建tensorflow serving镜像时需要指定端口映射,然后你可以通过这个端口访问serving服务,还需要将宿主机自身模型的path挂载到容器的
/models
上 - 如何使用运行好的容器服务?可以通过RESTful API访问,也可以通过gRPC API访问
- 最后模型部分已经全部交给了tensorflow-server,再去写一个web服务包装一下就可以快速部署了
首先要安装docker,参见其他教程
安装一些包
pip install -U grpcio
pip install -U grpcio-tools
pip install -U protobuf
tensorflow-serving要和TensorFlow版本配合使用,否则后期调用会有一些问题
pip install tensorflow-serving-api==1.14.0
检查tensorflow serving是否安装成功,注意路径
Serve a Tensorflow model in 60 seconds
# Download the TensorFlow Serving Docker image and repo
docker pull tensorflow/serving
git clone https://github.com/tensorflow/serving
# Location of demo models
TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
# Start TensorFlow Serving container and open the REST API port
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 &
# 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] }
-p 8501:8501 将端口映射到8501,也可以改端口,例 -p 8000:8501 -p 9000:8501 ,后面的端口不能变(应该是TensorFlow serving封装好的,目前不是很懂)
-v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two" \
这句是将本地 $TESTDATA/saved_model_half_plus_two_cpu 挂载到docker 的这个位置 /models/half_plus_two
curl -d '{"instances": [1.0, 2.0, 5.0]}' \ -X POST http://localhost:8501/v1/models/half_plus_two:predict
这句是传入测试实例 {"instances": [1.0, 2.0, 5.0]} ,请求docker上面部署好的模型 http://localhost:8501/v1/models/half_plus_two:predict ,注意端口要统一,上面是9000,则 curl -d '{"instances": [1.0, 2.0, 5.0]}' \ -X POST http://localhost:9000/v1/models/half_plus_two:predict
curl -d ' \ -X POST
有两种写法
第一种
docker run -p 8500:8500 \
--mount type=bind,source=/Absolute/path/to/local/saved_model/,target=/models/model_name \
-t tensorflow/serving \
-e MODEL_NAME=