¿Puedo medir el tiempo de ejecución de operaciones individuales con TensorFlow?

Resuelto user3559888 asked hace 9 años • 10 respuestas

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?

user3559888 avatar Dec 15 '15 22:12 user3559888
Aceptado

He usado el Timelineobjeto 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 opcionales optionsyrun_metadata
  • Luego creas un Timelineobjeto con los run_metadata.step_statsdatos.

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://tracingy cargar el timeline.jsonarchivo. Deberías ver algo como:

línea de tiempo

Olivier Moindrot avatar Jun 12 '2016 12:06 Olivier Moindrot

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.

Ian Goodfellow avatar Dec 15 '2015 19:12 Ian Goodfellow