我正在尝试使用Tensorflow服务制作一个大的(1.2GB大小)的发球模式,但是我得到了一个:
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的一些相关问题,但是最终它变得不相关了,因为since使用的是protobuf的C++版本。关于部署带有服务的大型模型的信息很少,所以任何信息都足够了。
Tensorflow服务是在主机上编译的,模型也是如此,但使用的是python3 (我想知道它是否与任何事情有关)。对此是否有快速修复,或者我必须挖掘服务C++源并增加消息的大小?
注释中每个请求的编辑:
我根据官方教程保存模型。这个模型之所以这么大,是因为我保存了一个嵌入层。无论如何,以下是保存代码:
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()该模型由Ubuntu16.04主机上的GitHub提供的编译TF读取。
发布于 2017-12-07 15:28:20
希望它能帮到别人,但我“找到了”解决办法。
主要的问题是显而易见的;his是一个NLP模型,因此它的词汇量很大。将词汇表保留在图形定义中会使图解膨胀,而当面对如此大的协议时,protobuf会给出一个错误。
解决方案是将字典放在assets_collection.中您实际需要做的事情几乎没有文档,但是在正式回购中查看test.py是值得一看的。
至于使用Tensorflow服务的资产,必须创建自定义Servable,如创造一种新型的可服务的正式文档所述。无法提供特定的示例,因为我只是暂时将模型包含在容器中。
如果有人有例子,或者在NLP模型部署方面有更好的策略,我很乐意进一步讨论它。
https://stackoverflow.com/questions/47612069
复制相似问题