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

Тензорный поток на GPU: никаких известных устройств, несмотря на то, что cuda deviceQuery возвращает результат "PASS"

Примечание: этот вопрос изначально был задан в github, но его попросили вместо этого

У меня возникли проблемы с запуском shadoworflow на gpu, и это, похоже, не является обычной проблемой конфигурации cuda, потому что все, кажется, указывает, что cuda правильно настроена.

Основной симптом: при работе с тензорным потоком мой gpu не обнаружен (код, который выполняется, и его выход).

Что отличает от обычных проблем, так это то, что cuda кажется правильно установленным и работает ./deviceQuery из образцов cuda успешно (output).

У меня есть две графические карты:

  • старый GTX 650, используемый для моих мониторов (я не хочу использовать его с тензорным потоком)
  • GTX 1060, который я хочу посвятить tensorflow

Я использую:

Я пробовал:

  • добавление /usr/local/cuda/bin/ в $PATH
  • принудительное размещение gpu в тензорном потоке script с помощью with tf.device('/gpu:1'):with tf.device('/gpu:0'):, когда он не прошел, для хорошей оценки)
  • whitelisting gpu, который я хотел использовать с CUDA_VISIBLE_DEVICES, если наличие моей старой неподдерживаемой карты действительно вызвало проблемы.
  • запуск script с помощью sudo (потому что почему бы и нет)

Вот выходы nvidia-smi и nvidia-debugdump - l, если это полезно.

В этот момент я чувствую, что я следил за всеми сухарями и понятия не имею, что я мог бы попробовать. Я даже не уверен, рассматриваю ли я ошибку или проблему с конфигурацией. Любые советы о том, как отладить это, будут очень признательны. Спасибо!

Обновление: с помощью Ярослава в github я собрал больше информации об отладке, подняв уровень журнала, но, похоже, он не говорит о выборе устройства: https://gist.github.com/oelmekki/760a37ca50bf58d4f03f46d104b798bb

Обновление 2. Использование anano обнаруживает gpu правильно, но интересно, что он жалуется на то, что cuDNN является слишком недавним, а затем возвращается к процессору (code бежал, output). Может быть, это может быть проблемой и с тензорным потоком?

4b9b3361

Ответ 1

Из выходного лога, похоже, вы используете версию CPU TensorFlow (PyPI: tensorflow), а не графический процессор версия (PyPI: tensorflow-gpu). Запуск версии GPU приведет либо к регистрации информации о библиотеках CUDA, либо к ошибке, если не удалось загрузить их или открыть драйвер.

Если вы выполните следующие команды, вы сможете использовать GPU в последующих запусках:

$ pip uninstall tensorflow
$ pip install tensorflow-gpu

Ответ 2

В моем случае:

pip3 uninstall tensorflow

недостаточно. Потому что при переустановке с помощью:

pip3 install tensorflow-gpu

Он по-прежнему переустанавливает shadoworflow с помощью cpu not gpu. Итак, перед установкой tensorfow-pgu я попытался удалить все связанные тензорные папки в пакетах сайтов, удалив protobuf, и он работает!

Для вывода:

pip3 uninstall tensorflow

Удалите все тензорные папки в ~\Python35\Lib\site-packages

pip3 uninstall protobuf
pip3 install tensorflow-gpu

Ответ 3

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


Шаг 0: удалить protobuf

pip uninstall protobuf

Шаг 1: Удаление тензорного потока

pip uninstall tensorflow
pip uninstall tensorflow-gpu

Шаг 2: принудительно установите Tensorflow с поддержкой GPU

pip install --upgrade --force-reinstall tensorflow-gpu

Шаг 3: Если вы еще этого не сделали, установите CUDA_VISIBLE_DEVICES

Итак, для меня с 2 графическими процессорами это будет

export CUDA_VISIBLE_DEVICES=0,1

Ответ 4

Может показаться глупым, но sudo reboot исправил ту же самую проблему для меня и пары других.

Ответ 5

Эта ошибка может быть вызвана возможностями вычислений на GPU, CUDA официально поддерживает возможности вычислений на GPU в пределах 3.5 ~ 5.0, вы можете проверить здесь: https://en.wikipedia.org/wiki/CUDA

В моем случае ошибка была такой:

Игнорирование видимого устройства gpu (устройство: 0, имя: GeForce GT 640M, идентификатор шины pci: 0000: 01: 00.0, возможность вычисления: 3.0) с возможностью вычисления Cuda 3.0. Минимальная требуемая способность Cuda - 3,5.

На данный момент мы можем компилировать только из исходного кода в Linux (или Mac OS), чтобы преодолеть ограничение "3.5 ~ 5.0".