TensorFlow - Низкое использование графического процессора на Titan X

Некоторое время я замечал, что TensorFlow (v0.8), похоже, не полностью использует вычислительную мощность моего Titan X. Для нескольких CNN, которые я использовал для использования GPU, похоже, не превышает ~ 30 %. Как правило, использование графического процессора еще ниже, более 15%. Один конкретный пример CNN, который показывает это поведение, - это CNN из документа DeepMind Atari с Q-обучением (см. Ссылку ниже для кода).

Когда я вижу других людей из нашей лаборатории, на которых работают CNN, написанные на Theano или Torch, использование GPU обычно составляет 80%+. Это заставляет меня задаться вопросом, почему CNN, которые я пишу в TensorFlow так "медленно", и что я могу сделать, чтобы более эффективно использовать вычислительную мощность GPU? Как правило, меня интересуют способы профилирования операций GPU и выяснения того, где эти узкие места. Любые рекомендации, как это сделать, очень приветствуются, поскольку в данный момент это невозможно сделать с TensorFlow.

Что я сделал, чтобы узнать больше о причине этой проблемы:

  • Анализ размещения устройства TensorFlow , все, кажется, находится на gpu:/0, поэтому выглядит нормально.

  • Используя cProfile, я оптимизировал процесс генерации пакетов и других шагов предварительной обработки. Предварительная обработка выполняется в одном потоке, но фактическая оптимизация, выполняемая шагами TensorFlow, занимает гораздо больше времени (см. Среднее время работы ниже). Одна очевидная идея увеличить скорость - это использовать бегуны очереди TFs, но поскольку подготовка партии уже в 20 раз быстрее, чем оптимизация, я задаюсь вопросом, будет ли это иметь большое значение.

    Avg. Time Batch Preparation: 0.001 seconds
    Avg. Time Train Operation:   0.021 seconds
    Avg. Time Total per Batch:   0.022 seconds (45.18 batches/second)
    
  • Запустите на нескольких машинах, чтобы исключить аппаратные проблемы.

  • Обновлено до последних версий CuDNN v5 (RC), CUDA Toolkit 7.5 и переустановлено TensorFlow из источников около недели назад.

Пример Q-обучения CNN, для которого эта "проблема" встречается, можно найти здесь: https://github.com/tomrunia/DeepReinforcementLearning-Atari/blob/master/qnetwork.py

Пример NVIDIA SMI, показывающий использование низкого использования графического процессора: NVIDIA-SMI

Ответ 1

Вы пытались понизить рейтинг до Cuda 7.0? Как я уже говорил, могут возникнуть проблемы с Tensorflow на Titan X с Cuda 7.5.

Ответ 2

С более поздними версиями Tensorflow (я использую Tensorflow 1.4) мы можем получить статистику времени выполнения и визуализировать их в Tensorboard.

Эти статистические данные включают время вычисления и использование памяти для каждого node в графе вычислений.