Обучение модели TensorFlow с итоговыми операциями намного медленнее, чем без итоговых операций

Я тренирую модель, подобную Inception, используя TensorFlow r1.0 с графическим процессором Nvidia Titan X.

Я добавил несколько итоговых операций для визуализации процедуры обучения, используя следующий код:

def variable_summaries(var):
"""Attach a lot of summaries to a Tensor (for TensorBoard visualization)."""
    with tf.name_scope('summaries'):
        mean = tf.reduce_mean(var)
        tf.summary.scalar('mean', mean)
        with tf.name_scope('stddev'):
            stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
        tf.summary.scalar('stddev', stddev)
        tf.summary.scalar('max', tf.reduce_max(var))
        tf.summary.scalar('min', tf.reduce_min(var))
        tf.summary.histogram('histogram', var)

Когда я запускаю эти операции, затраты времени на обучение в одну эпоху составляют около 400 секунд. Но когда я отключаю эти операции, затраты времени на обучение одной эпохи составляют всего 90 секунд.

Как оптимизировать график, чтобы минимизировать суммарные затраты времени на операции?

0 ответов

Конспекты, конечно, замедляют процесс обучения, потому что вы выполняете больше операций и вам необходимо записать их на диск. Кроме того, сводки гистограмм еще больше замедляют обучение, потому что для гистограмм нужно копировать больше данных из GPU в CPU, чем для скалярных значений. Поэтому я бы старался использовать регистрацию гистограмм реже, чем остальные, что могло бы иметь какое-то значение.

Обычное решение состоит в том, чтобы вычислять сводки только каждые X пакетов. Поскольку вы вычисляете сводки только по одной для каждой эпохи, а не для каждого пакета, возможно, стоит попробовать еще меньше вести протоколирование сводок.

Зависит от того, сколько пакетов у вас есть в наборе данных, но обычно вы не теряете много информации, собирая чуть меньше журналов.

Другие вопросы по тегам