tensorflow serving + docker部署模型
搬运自官网地址
官网的例子在windows上不能直接运行成功,我这里稍作几条命令的修改,可以在windows的docker中运行。
1.安装docker
安装前系统必备的内容
Windows需要运行Microsoft Hyper-V。如果需要,Docker Desktop for Windows安装程序会为您启用Hyper-V,并重新启动计算机。
系统要求:
- 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桌面应用程序
-
双击Docker Desktop for Windows Installer.exe以运行安装程序。
如果您尚未下载安装程序(
Docker Desktop Installer.exe
),则可以从download.docker.com获取 。它通常会下载到您的Downloads
文件夹,或者您可以从Web浏览器底部的最新下载栏运行它。 -
按照安装向导接受许可,授权安装程序,然后继续安装。
Docker.app
系统会要求您在安装过程中使用系统密码进行授权。需要特权访问才能安装网络组件,指向Docker应用程序的链接以及管理Hyper-V VM。 -
在安装完成对话框中单击完成以启动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/<my model> serving_base:/models/<my model>
最后,通过更改MODEL_NAME 以匹配模型的名称来提交为您的模型提供服务的容器“:
docker commit --change "ENV MODEL_NAME <my model>" serving_base <my container>
你现在可以停下来了 serving_base
docker kill serving_base
这将为您留下一个<my container>可以部署的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