美文网首页tensorflow serving
tensorflow serving docker

tensorflow serving docker

作者: 晴天哥_王志 | 来源:发表于2019-03-02 12:37 被阅读57次

    背景介绍

     TensorFlow Serving 是一个用于机器学习模型 serving 的高性能开源库。它可以将训练好的机器学习模型部署到线上,使用 gRPC 作为接口接受外部调用。更加让人眼前一亮的是,它支持模型热更新与自动模型版本管理。这意味着一旦部署 TensorFlow Serving 后,你再也不需要为线上服务操心,只需要关心你的线下模型训练。

     TensorFlow Serving的典型的流程如下:学习者(Learner,比如TensorFlow)根据输入数据进行模型训练。等模型训练完成、验证之后,模型会被发布到TensorFlow Serving系统服务器端。客户端提交请求,由服务端返回预测结果。客户端和服务端之间的通信采用的是RPC/REST协议

    官方资料

     TensorFlow Serving的中文版资料不多,所以能做的基本上就是参考英文官网的文档,一个是tensorflow serving github官网,一个是tensorflow serving web官网,前者能够稳定打开,后者看天看心情能否打开。

     建议选型tensorflow serving作为tensorflow服务容器的一定要熟读tensorflow serving web官网,要对每个细节扣的很细,这样才能了解TFS能够提供的核心能力。

     补充一点,之前在调研资料的时候发现阿里云也提供基于TFS提供在线预测的云能力,特想了解他们如何解决cpu高消耗的问题

    安装选型

     tensorflow serving提供三种安装方式:1、docker安装、2、通过APT安装、3、编译源码,本着快速验验证的原则我们自然而然的选择了docker安装。

     其实按照我们当时的试想如果TFS在性能上有比较明显优势我们可以通过K8S管理docker这样能够非常方便的升级TFS的版本。

     TFS的官方提供的docker可以在TFS的docker官网找到,根据不同的TF版本和是否GPU进行选型,参考当时情况的是TF是1.6.0版本,TFS选型1.12.0,没仔细研究过TFS和TF之间的关系,但是按照TF的版本逻辑在同一个大版本1.X的情况下兼容低版本的API,所以TFS版本更高兼容。

     补充一点,一开始使用TFS最新版本的时候在java API调用方面有些兼容性问题(具体原因没仔细分析),个人建议是TFS的docker版本和编译java api的TFS版本保持一致

    安装命令

     TFS的启动命令需要参考TFS本身的命令和docker相关的命令,前者指定TFS的启动参数,后者指定docker的端口和目录映射问题。

    docker run -t --rm -p 8500:8500 -p 8501:8501 
    -v /home/zhi.wang/tensorflow-serving/model:/models 
    -e MODEL_NAME=wdl_model tensorflow/serving:1.12.0 
    --enable_batching=true 
    --batching_parameters_file=/models/batching_parameters.txt &
    

    说明:

    • -p 8500:8500 -p 8501:8501 用于绑定rpc和rest端口。

    • -v /home/zhi.wang/tensorflow-serving/model:/models 用于绑定目录映射。

    • -e MODEL_NAME=wdl_model指定TFS加载模型名字,和目录tensorflow-serving/model下的模型名字保持一致, 如/home/zhi.wang/tensorflow-serving/model/wdl_model

    • --enable_batching=true 设置TFS开启batch功能。

    • --batching_parameters_file=/models/batching_parameters.txt 绑定批量参数。

    batching_parameters

    num_batch_threads { value: 40 }
    batch_timeout_micros { value: 0 }
    max_batch_size { value: 1024 }
    

    说明:

    • 参考github issue设置的TFS的批量参数。

    model directory

    [wdl_model]# tree
    .
    ├── 1
    │   ├── saved_model.pb
    │   └── variables
    │       ├── variables.data-00000-of-00001
    │       └── variables.index
    ├── 10
    │   ├── saved_model.pb
    │   └── variables
    │       ├── variables.data-00000-of-00001
    │       └── variables.index
    ├── 2
    │   ├── saved_model.pb
    │   └── variables
    │       ├── variables.data-00000-of-00001
    │       └── variables.index
    ├── 3
    │   ├── saved_model.pb
    │   └── variables
    │       ├── variables.data-00000-of-00001
    │       └── variables.index
    ├── 4
    │   ├── saved_model.pb
    │   └── variables
    │       ├── variables.data-00000-of-00001
    │       └── variables.index
    

    说明:

    • TFS支持多版本的模型加载,默认会加载数字最大的版本。

    • TFS加载的模型通过export_savedmodel的api生成。

    相关文章

      网友评论

        本文标题:tensorflow serving docker

        本文链接:https://www.haomeiwen.com/subject/seyjuqtx.html