代码之家  ›  专栏  ›  技术社区  ›  clstl

Tensorflow服务:大模型,protobuf错误

  •  3
  • clstl  · 技术社区  · 8 年前

    我正在尝试使用Tensorflow发球,使发球成为一个大(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使用的是protobuf的C++版本。关于使用Serving部署大型模型的信息很少,因此任何信息都足够了。

    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()
    

    该模型由在Ubuntu 16.04主机上从GitHub提供的已编译TF读取。

    1 回复  |  直到 8 年前
        1
  •  2
  •   clstl    8 年前

    希望它能帮助别人,但我“找到”了一个解决方案。

    主要问题是显而易见的;his是一个自然语言处理模型,因此它有一个很大的词汇量。将词汇表留在图定义中会使metagraphdef膨胀,而protobuf在面对如此大的协议时会出现错误。

    解决方案是将字典放入 assets\u集合 . 关于您实际必须做的事情,几乎没有文档记录,但是查看 saved_model_test.py 官方回购协议值得一看。

    为了利用Tensorflow服务的资产,必须创建一个自定义可服务项,如中所述 Creating a new kind of servable 官方文件。无法提供具体示例,因为我只是暂时将模型封装起来。

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

    推荐文章