tensorflow tfserving 部署多个模型、使用不同版本的模型

本篇主要介绍使用tfserving和docker同时部署多个模型,使用不同版本的模型,基本的流程与部署单个模型的过程类似,(关于运行tfserving容器使用单个模型进行预测的相关步骤可以参见 使用docker和tf serving搭建模型预测服务。)不同之处在于需要用到一个多模型的配置文件。首先得到多个可以用于tfserving预测的模型文件,相关步骤可以参考使用savedModel保存模型。本例中用使用savedModel保存模型中的相关代码生成三个模型,分别建立三个文件夹,将得到的模型分别放入,最后的文件结构如下图。其中100001文件夹表示模型的版本,可以在model1下放置不同版本的模型,默认情况下会加载具有较大版本号数字的模型。
tensorflow tfserving 部署多个模型、使用不同版本的模型_第1张图片

1. 多模型部署

在multiModel文件夹下新建一个配置文件model.config,文件内容为:

model_config_list:{
    config:{
      name:"model1",
      base_path:"/models/multiModel/model1",
      model_platform:"tensorflow"
    },
    config:{
      name:"model2",
      base_path:"/models/multiModel/model2",
      model_platform:"tensorflow"
    },
    config:{
      name:"model3",
      base_path:"/models/multiModel/model3",
      model_platform:"tensorflow"
    } 
}

配置文件定义了模型的名称和模型在容器内的路径,现在运行tfserving容器 :

docker run -p 8501:8501 --mount type=bind,source=/home/jerry/tmp/multiModel/,target=/models/multiModel \
 -t tensorflow/serving --model_config_file=/models/multiModel/models.config

请求预测

import requests 
import numpy as np 
SERVER_URL = 'http://localhost:8501/v1/models/model3:predict'  
#注意SERVER_URL中的‘model3’是config文件中定义的模型name,不是文件夹名称

def prediction(): 
    predict_request='{"instances":%s}' % str([[[10]*7]*7]) 
    print(predict_request) 
    response = requests.post(SERVER_URL, data=predict_request) 
    print(response)
    prediction = response.json()['predictions'][0] 
    print(prediction) 

if __name__ == "__main__": 
    prediction()

2.指定模型版本

如果一个模型有多个版本,并在预测的时候希望指定模型的版本,可以通过以下方式实现。
修改model.config文件,增加model_version_policy:

model_config_list:{
    config:{
      name:"model1",
      base_path:"/models/multiModel/model1",
      model_platform:"tensorflow",
      model_version_policy:{
        all:{}
      }
    },
    config:{
      name:"model2",
      base_path:"/models/multiModel/model2",
      model_platform:"tensorflow"
    },
    config:{
      name:"model3",
      base_path:"/models/multiModel/model3",
      model_platform:"tensorflow"
    } 
}

请求预测的时候,如果要使用版本为100001的模型,只要修改SERVER_URL为:

SERVER_URL = 'http://localhost:8501/v1/models/model1/versions/100001:predict' 

tfserving支持模型的Hot Plug,上述容器运行起来之后,如果在宿主机的 /home/jerry/tmp/multiModel/model1/ 文件夹下新增模型文件如100003/,tfserving会自动加载新模型;同样如果移除现有模型,tfserving也会自动卸载模型。

你可能感兴趣的:(TensorFlow)