Tensorboard Graph: сессия профилировщика началась - PullRequest
1 голос
/ 19 февраля 2020

Я хотел показать свой сетевой график на тензорной доске с использованием tenorflow 2. Я следовал этому учебнику и сделал код, похожий на этот:

for epoch in range(epochs):
    # Bracket the function call with
    # tf.summary.trace_on() and tf.summary.trace_export().
    tf.summary.trace_on(graph=True, profiler=True)
    # Call only one tf.function when tracing.
    z = train_step(x, y)
    with writer.as_default():
        tf.summary.trace_export(name="train_graph", step=0, profiler_outdir=logdir)

При этом Я получил сообщение Profiler session started. несколько раз. Разумеется, когда я открывал тензорную доску, график говорил об ошибке и ничего не мог показать.

1 Ответ

1 голос
/ 19 февраля 2020

Я нашел ответ здесь .

На самом деле, вы можете включить экспорт графиков в v2. Вам нужно будет позвонить tf.summary.trace_on() перед кодом, для которого вы хотите отследить график (например, L224, если вы просто хотите шаг поезда), а затем позвонить tf.summary.trace_off() после завершения кода. Поскольку вам нужна только одна трассировка графика, я бы рекомендовал обернуть эти вызовы if global_step_val == 0:, чтобы вы не создавали трассы на каждом шаге.

На самом деле, для создания графика необходимо делайте трассировку только один раз, и нет смысла делать это в каждую эпоху. Решение состоит в том, чтобы просто проверить перед вызовом трассировки один раз:

for epoch in range(epochs):
    if epoch == 0:
        tf.summary.trace_on(graph=True, profiler=True)
    z = train_step(x, y)
    if epoch == 0:
        with writer.as_default():
            tf.summary.trace_export(name="train_graph", step=0, profiler_outdir=logdir)

Мне лично больше нравится этот декоратор идея:

def run_once(f):
    def wrapper(*args, **kwargs):
        if not wrapper.has_run:
            wrapper.has_run = True
            return f(*args, **kwargs)
    wrapper.has_run = False
    return wrapper

@run_once
def _start_graph_tensorflow(self):
    tf.summary.trace_on(graph=True, profiler=True)  # https://www.tensorflow.org/tensorboard/graphs

@run_once
def _end_graph_tensorflow(self):
    with self.graph_writer.as_default():
        tf.summary.trace_export(name="graph", step=0, profiler_outdir=self.graph_writer_logdir)

for epoch in range(epochs):
    _start_graph_tensorflow()
    z = train_step(x, y)
    _end_graph_tensorflow()
...