有没有办法计算TensorFlow网络中每个节点的时间成本? 我发现很难找到性能瓶颈。
编辑:Timeline
探查器非常棒(https://stackoverflow.com/a/37774470/3632556)。
答案 0 :(得分:6)
如果要查找TF上每个操作花费的时间,可以使用runtime statistics在tensorboard中执行此操作。您将需要执行以下操作(请查看上述链接中的完整示例):
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还有debugger。这是一个如何使用它的教程。
答案 1 :(得分:2)
现在最好的外部方法是使用CPU / GPU分析器进行编译,但这必须通过更改BUILD
和tensorflow.bzl
文件中的选项(不确定位置)来手动完成。
然后,您可以获取有关哪些功能花费最多时间等的个人资料信息。这取决于您,您可以使用gperftools进行操作并按pprof进行可视化
由于TensorFlow的代码是通过swig
链接的,因此我不能100%确定在通过pprof
阅读个人资料时获取符号是多么容易。您可以将其指向已构建的swig .so
文件。
尝试一下,让我们知道它是否适合您!
答案 2 :(得分:0)
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/profiler
主要特点:
测量模型参数,浮点运算,张量形状。
剖析操作执行时间,请求的内存大小和设备放置。
检查检查站张量&#39;形状和它们的价值观。
有选择地分组,过滤,帐户和订购操作。