TensorFlow:成本图在 RunMetadata 中为空

TensorFlow: Cost graph is empty in RunMetadata

我按照 this answer 从 TensorFlow 获取成本模型估计。但是,当我打印结果 metadata.cost_graph 时,输出为空。我还需要做什么吗?

我想查看 TensorFlow 成本模型的成本估算以及它如何映射到设备。我还有其他方法可以做到这一点吗?

完整程序如下:

import tensorflow as tf
import datetime
import numpy as np

# Create random large matrix
A = np.random.rand(10000, 10000).astype('float32')
B = np.random.rand(10000, 10000).astype('float32')

with tf.device('/gpu:0'):
    a = tf.placeholder(tf.float32, [10000, 10000])
    b = tf.placeholder(tf.float32, [10000, 10000])

with tf.device('gpu:0'):
    mul = tf.matmul(a, b)

metadata = tf.RunMetadata()
run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
ops = tf.GraphOptions(build_cost_model=5)

with tf.Session(config=tf.ConfigProto(log_device_placement=True,
    graph_options=ops)) as sess:
    # Run the op.
    for _ in xrange(20):
         sess.run([mul], feed_dict={a:A, b:B}, options=run_options,
            run_metadata=metadata)
         print ("Cost graph " + str(metadata.cost_graph))

tf.GraphOptions.build_cost_model 选项是 defined 作为在生成成本模型之前 运行 的步骤数。来自定义:

// The number of steps to run before returning a cost model detailing
// the memory usage and performance of each node of the graph. 0 means
// no cost model.
int64 build_cost_model = 4;

因此,要查看成本模型,您必须 运行 使用 build_cost_model=50 该图 50 次。为了获得更好的性能,我建议仅在第 50 次调用时传递 run_options(否则 TensorFlow 将产生并丢弃大量元数据)。