为什么`tf.constant()`的值在TensorFlow的内存中多次存储?

发布于 2021-01-29 14:56:19

读过(在TensorFlow中):

a的值tf.constant()多次存储在内存中。

为什么将值tf.constant()多次存储在内存中?

关注者
0
被浏览
89
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    因为恒定张量的数据已嵌入到图定义中。这意味着这些数据既存储在维护图定义的客户端中,又存储在运行时中,为所有张量分配其自己的内存。

    IE浏览器,尝试

    a = tf.constant([1,2])
    tf.get_default_graph().as_graph_def()
    

    你会看到的

        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 2
          }
        }
        tensor_content: "\001\000\000\000\002\000\000\000"
      }
    

    tensor_content场是原始内容,一样的np.array([1,2], dtype=np.int32).tobytes()

    现在,要查看运行时分配,可以使用运行export TF_CPP_MIN_LOG_LEVEL=1

    如果您使用进行任何评估a,都会看到类似的内容

    2017-02-24 16:13:58: I tensorflow/core/framework/log_memory.cc:35] __LOG_MEMORY__ MemoryLogTensorOutput { step_id: 1 kernel_name: "Const_1/_1" tensor { dtype: DT_INT32 shape { dim { size: 2 } } allocation_description { requested_bytes: 8 allocated_bytes: 256 allocator_name: "cuda_host_bfc" allocation_id: 1 ptr: 8605532160 } } }
    

    这意味着运行时要求分配8个字节,而TF实际上分配了256个字节。(目前实际分配多少数据的选择有些随意-bfc_allocator.cc

    将常量嵌入图形中使进行基于图形的优化(如常量折叠)变得更加容易。但这也意味着大常数是无效的。同样,使用大常量是导致图形大小超过2GB限制的常见原因。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看