Подтвердить что ты не робот

Могу ли я измерить время выполнения отдельных операций с помощью TensorFlow?

Я знаю, что могу измерить время выполнения вызова sess.run(), но возможно ли получить более точную детализацию и измерить время выполнения отдельных операций?

4b9b3361

Ответ 1

В публичном выпуске еще нет способа сделать это. Мы знаем, что это важная функция, и мы над этим работаем.

Ответ 2

Я использовал объект Timeline, чтобы получить время выполнения для каждого node в графике:

  • вы используете классический sess.run(), но также указываете необязательные аргументы options и run_metadata
  • затем создайте объект Timeline с данными run_metadata.step_stats

Вот пример программы, которая измеряет производительность матричного умножения:

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. Вы должны увидеть что-то вроде:

timeline

Ответ 3

Вы можете извлечь эту информацию, используя статистику времени выполнения. Вам нужно будет сделать что-то подобное (проверьте полный пример в вышеупомянутой ссылке):

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)

Лучше, чем просто его распечатать, вы можете увидеть его в тензодаре:

Кроме того, нажатие на node отображает точную общую память, времени вычисления и размерах тензора.

[1]: https://www.tensorflow.org/get_started/graph_viz#

Ответ 4

Чтобы обновить этот ответ, у нас есть некоторые функции для профилирования CPU, ориентированные на вывод. Если вы посмотрите на https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/benchmark, вы увидите программу, которую вы можете запустить на модели, чтобы получить тайм-ауты для каждого.

Ответ 5

Для комментариев жир-лобита под ответом Оливье Моиндро, если вы хотите собрать временную шкалу на протяжении всех сеансов, вы можете изменить "open('timeline.json', 'w')" на "open('timeline.json', 'a')".

Ответ 6

Так как это очень важно, когда googling для "Tensorflow Profiling", обратите внимание, что текущий (конец 2017, TensorFlow 1.4) способ получения временной шкалы использует ProfilerHook. Это работает с MonitoredSessions в tf.Estimator, где tf.RunOptions недоступны.

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