tensor serving在docker上的部署

官方文档: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

tensor serving在docker上的部署_第1张图片
只需要到达这个路径

tensor serving在docker上的部署_第2张图片
模型的实际路径

因为tensor serving会自动加载source后面的文件,虽然依照官网给的demo可以依葫芦画瓢才出来,不过这个也是没有讲解详细的地方了。
target表示的是在创建的tensor serving的容器里面模型(model)的保存位置, 也决定着后面访问的路径
运行完上面代码会这样:
tensor serving在docker上的部署_第3张图片
image.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路径。
运行后是这样的输出:


tensor serving在docker上的部署_第4张图片
终端输出

5.至于测试

可以直接使用request来给下面的链接发送数据:

http://localhost:youself-port/v1/models/your-model-name:predict

按照第三步的终端输出的话,我的连接就是:

http://localhost:60002/v1/models/sentiment:predict

以上,有用的话,记得点一下喜欢。

你可能感兴趣的:(tensor serving在docker上的部署)