我可以使用TensorFlow来测量单个操作的执行时间吗?

我知道我可以测量调用sess.run()的执行时间,但是可以获得更精细的粒度并测量单个操作的执行时间吗?

在公开发布中还没有办法做到这一点。 我们知道这是一个重要的特点,我们正在努力。

我使用了Timeline对象来获得图中每个节点的执行时间:

  • 你使用一个经典的sess.run()但也指定了可选的参数optionsrun_metadata
  • 然后使用run_metadata.step_stats数据创build一个Timeline对象

下面是一个测量matrix乘法性能的示例程序:

 import tensorflow as tf from tensorflow.python.client import timeline x = tf.random_normal([1000, 1000]) y = tf.random_normal([1000, 1000]) res = tf.matmul(x, y) # Run the graph with full trace option with tf.Session() as sess: run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) run_metadata = tf.RunMetadata() sess.run(res, options=run_options, run_metadata=run_metadata) # Create the Timeline object, and write it to a json tl = timeline.Timeline(run_metadata.step_stats) ctf = tl.generate_chrome_trace_format() with open('timeline.json', 'w') as f: f.write(ctf) 

然后,您可以打开Goog​​le Chrome浏览器,转到页面chrome://tracing并加载timeline.json文件。 你应该看到像这样的东西:

时间线

您可以使用运行时统计信息提取此信息。 你将需要做这样的事情(检查上面提到的链接中的完整示例):

 run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) run_metadata = tf.RunMetadata() sess.run(<values_you_want_to_execute>, options=run_options, run_metadata=run_metadata) your_writer.add_run_metadata(run_metadata, 'step%d' % i) 

比打印更好,你可以在张力板上看到它:

此外,单击节点将显示确切的总内存,计算时间和张量输出大小。

[1]:https://www.tensorflow.org/get_started/graph_viz#

Olivier Moindrot的回答,如果你想收集所有会话的时间表,你可以把open('timeline.json', 'w') “改为” open('timeline.json', 'a') “。