1.如何在Docker中部署 tf serving
2.标准的tf serving API有哪些
3.如何打包自己的定制Docker镜像
当在Tensorflow中建立模型并训练好以后,只在本地运行或jupyter notebook是不够的。需要部署在服务器环境中,成为一个可访问的Rest/RPC服务,使其他模块可以通过提供相关的数据并得到模型预测的结果。
一个便捷的方式是把TensorFlow的服务部署在Docker容器中,如果已经安装部署好Docker,下面官方文档中的教程让你快速测试如何发布一个模型服务。
登录后复制
下载 TensorFlow 服务 的Docker 镜像
docker pull tensorflow/serving
下载用于测试的模型
git clone https://github.com/tensorflow/serving
测试模型的文件路径赋值给变量TESTDATA
TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
启动 TensorFlow 服务容器并开启REST API端口:8501
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 &
向模型的预测接口predict查询预测结果
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] }
需要注意的是请求路径中http://localhost:8501/v1/models/half_plus_two:predict,V1用以区分模型文件的版本。模型文件需要放在对应版本号命名的文件夹下面。如果收到类似下面的错误:
登录后复制
2020-06-27 05:40:16.397018: W tensorflow_serving/sources/storage_path/file_system
_storage_path_source.cc:267] No versions of servable cnn_lob found under base path
创建名称为1的子目录,把保存的模型移入后正常运行。
返回:
登录后复制
{
"model_version_status": [
{
"version": "1",
"state": "AVAILABLE",
"status": {
"error_code": "OK",
"error_message": ""
}
}
]
}
查看模型元数据
登录后复制
...
"outputs": {
"dense_9": {
"dtype": "DT_FLOAT",
"tensor_shape": {
"dim": [
{
"size": "-1",
"name": ""
},
{
"size": "10",
"name": ""
}
],
"unknown_rank": false
},
"name": "StatefulPartitionedCall:0"
}
},
"method_name": "tensorflow/serving/predict"
}
前面的运行方式依赖当前控制台进程,不适用于实际生产环境。下面我们把模型导入容器,创建定制的镜像文件。
登录后复制
# 下载官方服务镜像
docker pull tensorflow/serving
创建 Dockerfile
登录后复制
FROM tensorflow/serving
#复制模型文件到镜像内
COPY ./cnn_lob /models/cnn_lob/
#设置模型根目录的环境变量
ENV MODEL_BASE_PATH=/models
ENV MODEL_NAME=cnn_lob
首先把tensorflow的服务镜像作为后台程序启动:
docker run -d --name serving_base tensorflow/serving
然后,复制所保存的模型文件到容器内模型存放目录:
docker cp models/<my model> serving_base:/models/<my model>
最后,提交容器并更改容器内的环境变量MODEL_NAME为上一步导入的模型名称,同时命名容器名称:
docker commit --change "ENV MODEL_NAME <my model>" serving_base <my container>
停止当前运行
docker kill serving_base
我们现在有了名称为 <my container> 的容器镜像,用于部署和运行我们模型的服务。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删