我可以使用TensorFlow来测量单个操作的执行时间吗?
我知道我可以测量调用sess.run()
的执行时间,但是可以获得更精细的粒度并测量单个操作的执行时间吗?
在公开发布中还没有办法做到这一点。 我们知道这是一个重要的特点,我们正在努力。
我使用了Timeline
对象来获得图中每个节点的执行时间:
- 你使用一个经典的
sess.run()
但也指定了可选的参数options
和run_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)
然后,您可以打开Google 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)
比打印更好,你可以在张力板上看到它:
此外,单击节点将显示确切的总内存,计算时间和张量输出大小。
为了更新这个答案,我们确实有一些CPU分析function,重点是推理。 如果你看看https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/benchmark,你会看到一个程序,你可以在模型上运行,以获得每个时间点的时间。;
对Olivier Moindrot的回答,如果你想收集所有会话的时间表,你可以把open('timeline.json', 'w')
“改为” open('timeline.json', 'a')
“。
- 在TensorFlow中使用预先训练的单词embedded(word2vec或Glove)
- 在CPU上运行Tensorflow
- 如何用SSE4.2和AVX指令编译Tensorflow?
- 如何使用张量stream中的自定义python函数预取数据
- Windows上的TensorFlow版本1.0.0-rc2:“OpKernel('op:”BestSplits“device_type:”CPU“')for unknown op:BestSplits”with test code
- tensorflow tf.nn.softmax与tf.nn.softmax_cross_entropy_with_logits的区别
- “冻结”一些variables/范围在tensorflow:stop_gradient与传递variables最小化
- 如何为GradientDescentOptimizer设置自适应学习率?
- 如何在Tensorflow中只使用Python来自定义激活函数?