【问题标题】:Tensorflow Serving: Large model, protobuf errorTensorflow Serving:大型模型,protobuf 错误
【发布时间】:2018-05-16 15:52:40
【问题描述】:

我正在尝试使用 Tensorflow Serving 制作一个大型(1.2 GB 大小)模型,但我得到了:

2017-12-02 21:55:57.711317: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:236] Loading SavedModel from: ...
[libprotobuf ERROR external/protobuf_archive/src/google/protobuf/io/coded_stream.cc:193] A protocol message was rejected because it was too big (more than 1073741824 bytes).  To increase the limit (or to disable these warnings), see CodedInputStream::SetTotalBytesLimit() in google/protobuf/io/coded_stream.h.
2017-12-02 21:55:58.563507: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:284] Loading SavedModel: fail. Took 852178 microseconds.
2017-12-02 21:55:58.563567: E tensorflow_serving/util/retrier.cc:38] Loading servable: {name: 2 version: 2} failed: Data loss: Can't parse .../saved_model.pb as binary proto 

几年前我在 Github 上阅读了一些相关问题,但最终变得无关紧要,因为 Serving 使用的是 C++ 版本的 protobuf。关于使用 Serving 部署大型模型的信息很少,因此任何信息都足够了。

Tensorflow Serving 是在主机上编译的,模型也是如此,但使用的是 python3(我想知道它是否与任何事情有关)。 是否有一个快速解决方案,或者我必须挖掘 Serving C++ 源并增加消息的大小?

在 cmets 中根据请求进行编辑:

我按照官方教程保存模型。模型这么大的原因是我保存了一个嵌入层。无论如何,这是保存代码:

export_path = 'model/1'
builder = saved_model_builder.SavedModelBuilder(export_path)

signature = predict_signature_def(inputs={'input': input},
                                  outputs={'sent': output})


builder.add_meta_graph_and_variables(sess=session,
                                     tags=[tag_constants.SERVING],
                                     signature_def_map={'predict': signature})
builder.save()

模型由 Ubuntu 16.04 主机上的 GitHub 编译的 TF Serving 读取。

【问题讨论】:

  • 您能否输入您如何编写和阅读模型?
  • @DenizBeker 我已经更新了帖子

标签: c++ machine-learning tensorflow deep-learning tensorflow-serving


【解决方案1】:

希望它对某人有所帮助,但我“找到”了解决方案。

主要问题很明显;他是一个 NLP 模型,因此它有一个很大的词汇表。将词汇留在图定义中会使 metagraphdef 膨胀,而 protobuf 在面对如此大的协议时会出错。

解决方案是将字典放在 assets_collection 中。几乎没有关于您实际需要做什么的文档,但是在官方 repo 中查看 saved_model_test.py 是值得一看的。

要通过 Tensorflow Serving 使用资产,必须创建一个自定义 Servable,如Creating a new kind of servable 官方文档中所述。无法提供具体示例,因为我暂时只是将模型容器化了。

如果有人有示例,或者在 NLP 模型部署方面有更好的策略,我很乐意进一步讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-03
    • 2018-02-01
    • 2018-02-26
    • 2017-09-24
    • 2019-11-27
    • 2017-09-10
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多