【问题标题】:Tensorflow SavedModel file size increases with each save每次保存时,Tensorflow SavedModel 文件大小都会增加
【发布时间】:2019-09-06 01:53:51
【问题描述】:

我有一个 Tensorflow R1.13 训练代码,它在长时间的训练运行期间定期保存 SavedModel(我正在关注这个出色的 article 主题)。我注意到每次保存模型时,大小都会增加。事实上,它似乎每次都线性增加,并且似乎是初始文件大小的倍数。我想知道 TF 是否保留了对所有以前保存的文件的引用并为以后的每次保存累积它们。以下是随着训练的进行而按顺序写入的几个 SavedModel 文件的文件大小。

-rw-rw-r-- 1 ubuntu ubuntu  576962 Apr 15 23:56 ./model_accuracy_0.361/saved_model.pb
-rw-rw-r-- 1 ubuntu ubuntu 1116716 Apr 15 23:58 ./model_accuracy_0.539/saved_model.pb
-rw-rw-r-- 1 ubuntu ubuntu 1656470 Apr 16 00:11 ./model_accuracy_0.811/saved_model.pb
-rw-rw-r-- 1 ubuntu ubuntu 2196440 Apr 16 00:15 ./model_accuracy_0.819/saved_model.pb
-rw-rw-r-- 1 ubuntu ubuntu 2736794 Apr 16 00:17 ./model_accuracy_0.886/saved_model.pb
-rw-rw-r-- 1 ubuntu ubuntu 3277150 Apr 16 00:19 ./model_accuracy_0.908/saved_model.pb
-rw-rw-r-- 1 ubuntu ubuntu 3817530 Apr 16 00:21 ./model_accuracy_0.919/saved_model.pb
-rw-rw-r-- 1 ubuntu ubuntu 4357950 Apr 16 00:25 ./model_accuracy_0.930/saved_model.pb
-rw-rw-r-- 1 ubuntu ubuntu 4898492 Apr 16 00:27 ./model_accuracy_0.937/saved_model.pb

有没有办法剔除以前保存的版本?或者至少从一开始就防止它们被积累?我当然会只保留最后一个文件,但它似乎比应有的大 10 倍。

下面是我的代码(大部分抄自Silva):

        # Creates the TensorInfo protobuf objects that encapsulates the input/output tensors
        tensor_info_input_data_1 = tf.saved_model.utils.build_tensor_info(gd.data_1)
        tensor_info_input_data_2 = tf.saved_model.utils.build_tensor_info(gd.data_2)
        tensor_info_input_keep   = tf.saved_model.utils.build_tensor_info(gd.keep  )

        # output tensor info
        tensor_info_output_pred = tf.saved_model.utils.build_tensor_info(gd.targ_pred_oneh)
        tensor_info_output_soft = tf.saved_model.utils.build_tensor_info(gd.targ_pred_soft)

        # Define the SignatureDef for this export
        prediction_signature = \
            tf.saved_model.signature_def_utils.build_signature_def(
                inputs={
                    'data_1': tensor_info_input_data_1,
                    'data_2': tensor_info_input_data_2,
                    'keep'  : tensor_info_input_keep
                },
                outputs={
                    'pred_orig': tensor_info_output_pred,
                    'pred_soft': tensor_info_output_soft
                },
                method_name=tf.saved_model.signature_constants.CLASSIFY_METHOD_NAME)

        graph_entry_point_name = "my_model" # The logical name for the model in TF Serving

        try:
            builder = tf.saved_model.builder.SavedModelBuilder(saved_model_path)
            builder.add_meta_graph_and_variables(
                sess= sess,
                tags=[tf.saved_model.tag_constants.SERVING],
                signature_def_map = {graph_entry_point_name:prediction_signature}
            )
            builder.save(as_text=False)
            if verbose:
                print("  SavedModel graph written successfully. " )
            success = True
        except Exception as e:
            print("       WARNING::SavedModel write FAILED. " )
            traceback.print_tb(e.__traceback__)
            success = False
        return success

【问题讨论】:

    标签: tensorflow tensorflow-serving


    【解决方案1】:

    @赫菲斯托斯,

    如果您每次都在构造SavedModelBuilder,那么每次您save 时它都会向图表添加新的保存操作。

    相反,您可以只构造一次SavedModelBuilder,然后重复调用builder.save。这不会在每次 save 调用时向图表添加新操作。

    或者,我认为您可以创建自己的tf.train.Saver 并将其传递给add_meta_graph_and_variables。那么它不应该创建任何新的操作。

    在您完成图形构建后,tf.get_default_graph().finalize() 是一个很好的调试辅助工具,它将引发异常,而不是像这样扩展图形。

    希望这会有所帮助。

    【讨论】:

    • 谢谢。隐式图构造可能非常违反直觉。我将在一周左右的时间内对此进行测试并回复结果。谢谢。
    【解决方案2】:

    为 Saver 设置 clear_extraneous_saver = True

    https://github.com/tensorflow/tensorflow/blob/b78d23cf92656db63bca1f2cbc9636c7caa387ca/tensorflow/python/saved_model/builder_impl.py#L382

    meta_graph_def = saver.export_meta_graph( clear_devices=clear_devices, clear_extraneous_savers=True, strip_default_attrs=strip_default_attrs)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2016-10-02
      • 2023-03-29
      • 2019-05-12
      • 2013-08-09
      • 1970-01-01
      相关资源
      最近更新 更多