这两天学习如何搭建tf.serving,就此总结一下.
1 安装、学习docker
tf.serving的运行环境比较繁琐,在这个环境配好了,另一个不行。docker解决了这个问题。官方文档中也推荐使用docker
2 参考tf.serving github README
# Download the TensorFlow Serving Docker image and repo
docker pull tensorflow/serving ##从docker官方下载"tensorflow/serving"镜像
git clone https://github.com/tensorflow/serving ##这个clone整个工程的过程,也copy了一些example
# Location of demo models
TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
#下面这个程序是基于“tensorflow/serving”镜像,开启一个docker容器
# $TESTDATA/saved_model_half_plus_two_cpu, 是本地模型路径
#/models/half_plus_two 模型在容器中挂载的地址
# 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 &
# 服务建立好了,就可以请求了。
# "instances" 是默认的signature, 而输入默认是多组 [input1, input2, ...], 在这个例子中input是个数字,大部分场景input是个Tensor
# 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] }
3 再看一下一个官方的example(mnist)
这个example可以顺着跑一下来。我实验唯一不同的是,使用docker run tensorflow/serving, 而不是下载相关环境(太难配)。
- 如何mount
所以这里的问题是如何把本机模型mount到docker容器中,下面给一个例子
model_source="${your_local_path}"
docker run -p 8501:8501 --mount src="${model_source}",target=/models/fasttext,type=bind -e MODEL_NAME=fasttext -t tensorflow/serving &
- 模型保存方式直接用:
tf.saved_model.simple_save
注意这个例子没有很复杂的signature配置,请求使用默认:
curl -d ‘{“signature_name”: “serving_default”, “instances”: [[input tensor1], [input tensor2], …}’
-X POST http://localhost:8501/v1/models/fasttext:predict
4 坑
tf.serving 每次返回不一样,看你是不是有drop out?保存的时候keep prob不是1?