tensorflow serving + docker部署模型

搬运自官网地址
官网的例子在windows上不能直接运行成功,我这里稍作几条命令的修改,可以在windows的docker中运行。

1.安装docker

安装前系统必备的内容
Windows需要运行Microsoft Hyper-V。如果需要,Docker Desktop for Windows安装程序会为您启用Hyper-V,并重新启动计算机。

image.png

系统要求

  • Windows 10 64位:专业版,企业版或教育版(Build 15063或更高版本)。
  • 在BIOS中启用虚拟化。通常,默认情况下启用虚拟化。这与启用Hyper-V不同。有关详细信息,请参阅 故障排除中必须启用虚拟化。
  • 具有CPU SLAT功能。
  • 至少4GB的RAM。
    注意:如果您的系统不符合运行Docker Desktop for Windows的要求,则可以安装Docker Toolbox,它使用Oracle Virtual Box而不是Hyper-V。

安装Docker Desktop for Windows桌面应用程序

  1. 双击Docker Desktop for Windows Installer.exe以运行安装程序。

    如果您尚未下载安装程序(Docker Desktop Installer.exe),则可以从download.docker.com获取 。它通常会下载到您的Downloads文件夹,或者您可以从Web浏览器底部的最新下载栏运行它。

  2. 按照安装向导接受许可,授权安装程序,然后继续安装。

    Docker.app系统会要求您在安装过程中使用系统密码进行授权。需要特权访问才能安装网络组件,指向Docker应用程序的链接以及管理Hyper-V VM。

  3. 在安装完成对话框中单击完成以启动Docker。

部署到docker

1.拉取tensorflow serving镜像默认会拉去最新的latest版本

docker pull tensorflow/serving
image.png

当然也可以拉去其他的版本的镜像,可以参考dockers hub tensorflow / serve repo

2.运行服务镜像

tensoflow有cpu和GPU两个版本具有以下属性:

  • 端口8500暴露于gRPC
  • 端口8501暴露给REST API
  • 可选环境变量MODEL_NAME(默认为model)
  • 可选环境变量MODEL_BASE_PATH(默认为/models)
    当服务镜像运行modelserver是,它运行如下:
tensorflow_model_server --port=8500 --rest_api_port=8501 \
  --model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME}

要使用Docker,您需要:

  • 主机上的开放端口
  • 要保存的SavedModel
  • 客户将引用的模型名称

你要做的是 运行Docker容器, 将 容器的端口发布到主机的端口,并将主机的路径安装到容器所需模型的SavedModel。

我们来看一个例子:

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

这种情况下,我们们启动了一个Docker容器,将REST API端口8501发布到我们主机的端口8501,并采用我们命名的模型my_model并将其绑定到默认模型基本路径( { MODEL_NAME}= /models/my_model)。最后,我们填补了环境变量 MODEL_NAME有my_model,离开MODEL_BASE_PATH它的默认值。
这时候在容器中运行

tensorflow_model_server --port=8500 --rest_api_port=8501 \
  --model_name=my_model --model_base_path=/models/my_model

如果我们想发布gRPC端口,我们会使用-p 8500:8500。您可以同时打开gRPC和REST API端口,也可以选择仅打开其中一个。

传递其他参数
tensorflow_model_server支持许多可以传递给服务docker容器的其他参数。例如,如果我们想要传递模型配置文件而不是指定模型名称,我们可以执行以下操作:

docker run -p 8500:8500 -p 8501:8501 \
  --mount type=bind,source=/path/to/my_model/,target=/models/my_model \
  --mount type=bind,source=/path/to/my/models.config,target=/models/models.config \
  -t tensorflow/serving --model_config_file=/models/models.config

创建自己的服务镜像
如果您想要将模型内置到容器中的服务镜像,则可以创建自己的镜像。
首先将服务镜像作为进程运行:

docker run -d --name serving_base tensorflow/serving

接下来,将SavedModel复制到容器的模型文件夹:

docker cp models/ serving_base:/models/

最后,通过更改MODEL_NAME 以匹配模型的名称来提交为您的模型提供服务的容器“:

docker commit --change "ENV MODEL_NAME " serving_base 

你现在可以停下来了 serving_base

docker kill serving_base

这将为您留下一个可以部署的Docker镜像,并将加载您的模型以便在启动时提供服务。

运行一个例子

让我们来看一个完整的例子,我们加载一个SavedModel并使用REST API调用它。首先拉出服务镜像:

docker pull tensorflow/serving

这将在安装了ModelServer的情况下提取最新的TensorFlow服务映像。

接下来,我们将使用一个名为的玩具模型Half Plus Two,它0.5 * x + 2为x我们提供的预测值生成。

要获得此模型,请首先克隆TensorFlow服务仓库。

mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
image.png

接下来,运行TensorFlow Serving容器,将其指向此模型并打开REST API端口(8501)(如果在windows下面应该加上盘符如下):

docker run -p 8501:8501 --mount type=bind,source=C:/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 '&'
image.png

打开一个窗口测试接口这里使用curl命令,注意windows下面json 的区别,这里用windows的curl命令

curl -XPOST http://localhost:8501/v1/models/half_plus_two:predict -d "{\"instances\":[1.0, 2.0, 5.0]}"
image.png

你可能感兴趣的:(tensorflow serving + docker部署模型)