当前位置:   article > 正文

Tensorflow Serving部署模型_serving_default

serving_default

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

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

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

  1. {
  2. "model_spec":{
  3. "name": "model_yc",
  4. "signature_name": "",
  5. "version": "1"
  6. }
  7. ,
  8. "metadata": {"signature_def": {
  9. "signature_def": {
  10. "serving_default": {
  11. "inputs": {
  12. "input_data": {
  13. "dtype": "DT_FLOAT",
  14. "tensor_shape": {
  15. "dim": [
  16. {
  17. "size": "-1",
  18. "name": ""
  19. },
  20. {
  21. "size": "4",
  22. "name": ""
  23. }
  24. ],
  25. "unknown_rank": false
  26. },
  27. "name": "serving_default_input_data:0"
  28. }
  29. },
  30. "outputs": {
  31. "output_data": {
  32. "dtype": "DT_FLOAT",
  33. "tensor_shape": {
  34. "dim": [
  35. {
  36. "size": "-1",
  37. "name": ""
  38. },
  39. {
  40. "size": "1",
  41. "name": ""
  42. }
  43. ],
  44. "unknown_rank": false
  45. },
  46. "name": "StatefulPartitionedCall:0"
  47. }
  48. },
  49. "method_name": "tensorflow/serving/predict"
  50. },
  51. "__saved_model_init_op": {
  52. "inputs": {},
  53. "outputs": {
  54. "__saved_model_init_op": {
  55. "dtype": "DT_INVALID",
  56. "tensor_shape": {
  57. "dim": [],
  58. "unknown_rank": true
  59. },
  60. "name": "NoOp"
  61. }
  62. },
  63. "method_name": ""
  64. }
  65. }
  66. }
  67. }
  68. }

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

        }

    ]

}

 【补充说明】:

1.signature_name(serving_default)

  1. signature_key = 'traffic_predict'
  2. builder.add_meta_graph_and_variables(
  3. ......,
  4. tags=[tf.saved_model.tag_constants.SERVING], # 预定义值 SERVING
  5. signature_def_map={signature_key: signature}, # signature_def_map={'traffic_predict':signature},
  6. ......
  7. )

 2.method_name

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

如果是多参数呢?

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


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

三、部署多模型

模型结构:

在这里插入图片描述

1.在multiModel文件夹下新建一个配置文件model.config【相当于配置路由】

  1. model_config_list:{
  2. config:{
  3. name:"model1",
  4. base_path:"/models/multiModel/model1",
  5. model_platform:"tensorflow"
  6. },
  7. config:{
  8. name:"model2",
  9. base_path:"/models/multiModel/model2",
  10. model_platform:"tensorflow"
  11. },
  12. config:{
  13. name:"model3",
  14. base_path:"/models/multiModel/model3",
  15. model_platform:"tensorflow"
  16. }
  17. }

 2.启动TensorFlow Serving容器

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

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

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

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

四、同一模型部署多版本

修改model.config文件,增加model_version_policy:

  1. model_config_list:{
  2. config:{
  3. name:"model1",
  4. base_path:"/models/multiModel/model1",
  5. model_platform:"tensorflow",
  6. model_version_policy:{
  7. all:{}
  8. }
  9. },
  10. config:{
  11. name:"model2",
  12. base_path:"/models/multiModel/model2",
  13. model_platform:"tensorflow"
  14. },
  15. config:{
  16. name:"model3",
  17. base_path:"/models/multiModel/model3",
  18. model_platform:"tensorflow"
  19. }
  20. }

请求的URL为:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/330697
推荐阅读
相关标签
  

闽ICP备14008679号