I know I can measure the execution time of a call to sess.run()
, but is it possible to get a finer granularity and measure the execution time of individual operations?
I have used the Timeline
object to get the time of execution for each node in the graph:
sess.run()
but also specify the optional arguments options
and run_metadata
Timeline
object with the run_metadata.step_stats
dataHere is an example program that measures the performance of a matrix multiplication:
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)
You can then open Google Chrome, go to the page chrome://tracing
and load the timeline.json
file. You should see something like:
There is not yet a way to do this in the public release. We are aware that it's an important feature and we are working on it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With