使用tensorflow-serving部署tensorflow模型

Posted weiyinfu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用tensorflow-serving部署tensorflow模型相关的知识,希望对你有一定的参考价值。

使用docker部署模型的好处在于,避免了与繁琐的环境配置打交道。不需要安装Python,更不需要安装numpy、tensorflow各种包,直接一个docker就包含了全部。docker的方式是如今部署项目的第一选择。

一、docker用法初探

1、安装

docker安装需要两个命令:

sudo apt-get install docker
sudo apt-get install docker.io

好的学习资料不必远求
docker --help
docker run --help

2、基础命令

docker ps 查看当前正在运行的实例
docker images查看现有的镜像
docker kill xxxx 杀死正在运行的实例
docker pull xxxx 从远程docker仓库拉下来别人已经配置好的镜像

3、避免每次都sudo

docker命令默认只能root权限使用,这样实在有些繁琐。docker安装完成之后,docker组已经存在了,但是当前用户不在docker组里面,所以只需要把当前用户添加到docker组即可。
groups 查看当前用户所在的那些组
groupadd docker 添加组
sudo usermod -aG docker $USER 把当前用户添加到docker组,还有另外一种方法:sudo gpasswd -a ${USER} docker
newgrp - docker 刷新docker组
sudo service docker restart 重启服务

4、docker映射

docker就是一个镜像,我们需要做的就是把docker和外部世界建立联系。最紧密的联系有如下三种:

  • 网络映射:IP和端口号
  • 磁盘映射
    使用docker -v 宿主机目录:docker目录
    一律采用绝对路径,不要投机取巧使用相对路径,这样可以给自己减少许多麻烦,大智若愚正是此意。
  • 环境变量
    使用docker -e one=two,three=four 这样的命令

二、快速运行tensorflow-serving

安装docker和docker.io两个包。
sudo docker pull tensorflow/serving 把serving的镜像拉下来
git clone https://github.com/tensorflow/serving 复制一份现有的模型,当然也可以使用自己的模型,这个仓库是tensorflow serving的整个源码库,里面给出了一些demo,我们只需要demo那一部分

使用docker命令启动服务

TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
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 &

docker -e设置环境变量
docker -p设置端口映射
docker -v设置磁盘映射
建立映射时,都是形如“宿主机:docker容器”这种格式。

最后万事俱备,只欠东风了。

# 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] }

容器启动之后,使用docker ps查看有哪些实例,使用docker kill 实例ID 杀死实例,使用docker inspect 实例ID查看实例详情。

建立磁盘映射除了使用-v参数,也可以使用mount参数。

docker run -p 8501:8501 --mount type=bind,  source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,  target=/models/half_plus_two   -e MODEL_NAME=half_plus_two -t tensorflow/serving &

三、tensorflow-serving的默认配置

我们需要了解tensorflow/serving这个镜像的默认配置,镜像的默认配置就像电路板的引脚一样,是固定的。

serving镜像提供了两种调用方式:gRPC和HTTP请求。gRPC默认端口是8500,HTTP请求的默认端口是8501,serving镜像中的程序会自动加载镜像内/models下的模型,通过MODEL_NAME指定/models下的哪个模型。

参考资料

https://www.tensorflow.org/serving/api_rest

以上是关于使用tensorflow-serving部署tensorflow模型的主要内容,如果未能解决你的问题,请参考以下文章

使用docker+tensorflow-serving进行模型热部署

学习笔记tensorflow-serving模型部署

如何使用 tensorflow-serving 发布自定义(非 tensorflow)模型?

NLP(十八)利用ALBERT提升模型预测速度的一次尝试

使用TensorFlow作为依赖项部署Google Cloud Functions

在哪里可以找到 tensorflow 服务 URL?