Тензорный поток на 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). Может быть, это может быть проблемой и с тензорным потоком?
Ответы
Ответ 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".