Tensorflow Serving部署模型

TensorFlow Serving是google开源的一个适用于部署机器学习模型,具有灵活、高性能、可用于生产环境的模型框架。
它支持模型版本控制回滚 支持并发支持多模型部署、 支持模型热更新等,由于这些特性,使得我们不需要为部署线上服务而操心,只需要训练好线下模型即可。
同时,TensorFlow Serving还提供gRPC和REST API两种接口访问形式,其中gRPC接口对应的端口号为8500,而REST API对应的端口号为8501。

基于TensorFlow Serving的持续集成框架还是挺简明的,基本分三个步骤:

模型训练:这是大家最熟悉的部分,主要包括数据的收集和清洗、模型的训练、评测和优化;
模型上线:前一个步骤训练好的模型在TF Server中上线;
服务使用:客户端通过gRPC和RESTfull API两种方式同TF Servering端进行通信,并获取服务。

 一、TensorFlow Serving

1.1安装

目前TensorFlow Serving提供Docker、APT(二进制安装)和源码编译三种安装方式,其中Docker方式的安装相对来说较为简单,而且对后期项目部署的环境依赖不强,项目部署与迁移较为容易,推荐使用Docker方式进行TensorFlow Serving的安装。

 docker pull tensorflow/serving

1.2启动

docker run -p 8501:8501 --name yc_model -v /home/tensorflow/model_yc/:/models/model_yc  -e MODEL_NAME=model_yc tensorflow/serving

启动成功日志:

后台启动:

docker run -d -p 8501:8501 --name yc_model -v /home/tensorflow/model_yc/:/models/model_yc  -e MODEL_NAME=model_yc tensorflow/serving

二、查看模型情况

2.1查看模型概况

浏览器访问:http://127.0.0.1:8501/v1/models/model_yc

Tensorflow Serving部署模型_第1张图片

2.2查看模型metadata数据情况(重要)

浏览器访问:http://127.0.0.1:8501/v1/models/model_yc/metadata

{
"model_spec":{
 "name": "model_yc",
 "signature_name": "",
 "version": "1"
}
,
"metadata": {"signature_def": {
 "signature_def": {
  "serving_default": {
   "inputs": {
    "input_data": {
     "dtype": "DT_FLOAT",
     "tensor_shape": {
      "dim": [
       {
        "size": "-1",
        "name": ""
       },
       {
        "size": "4",
        "name": ""
       }
      ],
      "unknown_rank": false
     },
     "name": "serving_default_input_data:0"
    }
   },
   "outputs": {
    "output_data": {
     "dtype": "DT_FLOAT",
     "tensor_shape": {
      "dim": [
       {
        "size": "-1",
        "name": ""
       },
       {
        "size": "1",
        "name": ""
       }
      ],
      "unknown_rank": false
     },
     "name": "StatefulPartitionedCall:0"
    }
   },
   "method_name": "tensorflow/serving/predict"
  },
  "__saved_model_init_op": {
   "inputs": {},
   "outputs": {
    "__saved_model_init_op": {
     "dtype": "DT_INVALID",
     "tensor_shape": {
      "dim": [],
      "unknown_rank": true
     },
     "name": "NoOp"
    }
   },
   "method_name": ""
  }
 }
}
}
}

2.3API测试

http://127.0.0.1:8501/v1/models/model_yc:predict

#model_yc:模型名

参数:

{

    "signature_name":"serving_default",

    "instances":[

        {

            "input_data":[[22],[11],[34],[27],[36],[36],[10],[8]]

        }

    ]

}

Tensorflow Serving部署模型_第2张图片

 【补充说明】:

1.signature_name(serving_default)

signature_key = 'traffic_predict'

builder.add_meta_graph_and_variables(
    ......,
    tags=[tf.saved_model.tag_constants.SERVING], # 预定义值 SERVING
    signature_def_map={signature_key: signature}, # signature_def_map={'traffic_predict':signature},
    ......
)

 2.method_name

method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME 
# method_name = 'tensorflow/serving/predict'

如果是多参数呢?

{
    "signature_name": "traffic_predict",
    "instances":[
        {
            "input_1": [1],
            "input_2": [2],
            "input_3": [3]
        }
    ]
}


  到这里,简单的模型部署就完成了,那么一开始说的Tensorflow Serving支持模型版本控制回滚 支持并发支持多模型部署、 支持模型热更新等特性是如何体现的呢?

三、部署多模型

模型结构:

Tensorflow Serving部署模型_第3张图片

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"
    } 
}

 2.启动TensorFlow Serving容器

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

3.查看模型【访问网址为 models/model1, 地址中不包含 multiModel

http://xx.xx.xx.xx:8501/v1/models/model1
http://xx.xx.xx.xx:8501/v1/models/model1/metadata

那么,同一个模型如何部署多版本呢?

四、同一模型部署多版本

修改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"
    } 
}

请求的URL为:

http://localhost:8501/v1/models/model1/versions/100001:predict

你可能感兴趣的:(人工智能,tensorflow,深度学习)