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

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

参考资料:
Stack Overflow
收藏
评论
共 7 个回答
高赞 时间 活跃

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

  • 您使用经典的sess.run() ,还指定了可选参数optionsrun_metadata
  • 然后使用run_metadata.step_stats数据创建一个Timeline对象

这是一个测量矩阵乘法性能的示例程序:

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文件。您应该看到类似以下内容:

时间线

收藏
评论

要更新此答案,我们确实有一些针对CPU分析的功能,重点是推理。如果您查看https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/benchmark,您会看到一个可以在模型上运行的程序,以获取每个操作的时间。

收藏
评论

对于Olivier Moindrot回答下的fat-lobyte的评论,如果要在所有会话中收集时间线,可以将“ open('timeline.json', 'w') ”更改为“ open('timeline.json', 'a') “。

收藏
评论

由于在谷歌搜索“ Tensorflow Profiling”时这是很高的,因此请注意,当前(2017年末,TensorFlow 1.4)获取时间轴的方法是使用ProfilerHook 。这适用于tf.Estimator中的MonitoredSessions,其中tf.RunOptions不可用。

estimator = tf.estimator.Estimator(model_fn=...)
hook = tf.train.ProfilerHook(save_steps=10, output_dir='.')
estimator.train(input_fn=..., steps=..., hooks=[hook])
收藏
评论

您可以使用运行时统计信息提取此信息。您将需要执行以下操作(请查看上述链接中的完整示例):

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)

比只打印它更好的是,您可以在tensorboard中看到它:

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

[链接示例

收藏
评论

作为Tensorflow 1.8的,有使用一个很好的例子tf.profile.Profiler 这里

收藏
评论

公开发布中尚无此方法。我们知道这是一项重要功能,我们正在努力。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号