官方文档:https://www.tensorflow.org/tfx/serving/docker
亚马逊的中文文档:https://docs.aws.amazon.com/zh_cn/dlami/latest/devguide/tutorial-tfserving.html
部署的时候花了不少的时间,主要原因是没有仔细的看官方的文档,以及docker命令的不熟悉的原因。
1. 拉取tensor serving的docker 镜像:
docker pull tensorflow/serving
2.使用docker run启动容器:
docker run -p 8501:8501 --mount type=bind,source=/path/to/my_model,target=/models/my_model -e MODEL_NAME=my_model -t tensorflow/serving
这里需要解释一下:
-p表示端口映射,将宿主机和容器的端口映射起来,宿主机:容器。
--mount 表示挂载。
source表示的路径是已经训练好的模型在宿主机上的绝对路径,那么具体是哪个位置呢?
C:\Users\LT\Desktop\emotion-classifier\model
![](https://img.haomeiwen.com/i3013592/9ae21deed32e701b.png)
![](https://img.haomeiwen.com/i3013592/33f233abca68f083.png)
因为tensor serving会自动加载source后面的文件,虽然依照官网给的demo可以依葫芦画瓢才出来,不过这个也是没有讲解详细的地方了。
target表示的是在创建的tensor serving的容器里面模型(model)的保存位置,也决定着后面访问的路径
运行完上面代码会这样:
![](https://img.haomeiwen.com/i3013592/91710b373af844c8.png)
这时候,大多数人会和我之前一样,认为已经跑起来了,因为按回车没有反应,就认为是在等待接收响应,即http请求。其实不是的,我们需要ctrl + c退出去。
3.进入tensor serving所生成的容器(称为A)
sudo docker exec -it CONTAINER_ID /bin/bash
CONTAINER_ID使用sudo docker ps -sa进行查看
使用docker attach并不能进入。
4.在A中运行特定命令
tensorflow_model_server --port=8500 --rest_api_port=8501 --model_name=my_model --model_base_path=/models/my_model
这一步至关重要,但是由于第二步的结果显示会影响我们到达这一步。并且如果直接跳过前面的内容,看专门的小结,也会错过。
--port表示gRPC形式的数据访问,--rest_api_port表示以restful形式访问接口,如果不使用gRPC,可以只写--rest_api_port.
--model_name是第二步的model name
model_base_path是第二部的target路径。
运行后是这样的输出:
![](https://img.haomeiwen.com/i3013592/fe9643a9f79bd2f3.png)
5.至于测试
可以直接使用request来给下面的链接发送数据:
http://localhost:youself-port/v1/models/your-model-name:predict
按照第三步的终端输出的话,我的连接就是:
http://localhost:60002/v1/models/sentiment:predict
以上,有用的话,记得点一下喜欢。
网友评论