¿Puedo medir el tiempo de ejecución de operaciones individuales con TensorFlow?
Sé que puedo medir el tiempo de ejecución de una llamada sess.run()
, pero ¿es posible obtener una granularidad más fina y medir el tiempo de ejecución de operaciones individuales?
Aceptado
He usado el Timeline
objeto para obtener el tiempo de ejecución de cada nodo en el gráfico:
- usas un clásico
sess.run()
pero también especificas los argumentos opcionalesoptions
yrun_metadata
- Luego creas un
Timeline
objeto con losrun_metadata.step_stats
datos.
Aquí hay un programa de ejemplo que mide el desempeño de una multiplicación de matrices:
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)
Luego puede abrir Google Chrome, ir a la página chrome://tracing
y cargar el timeline.json
archivo. Deberías ver algo como:
Todavía no hay una manera de hacer esto en la versión pública. Somos conscientes de que es una característica importante y estamos trabajando en ello.