TensorFlow в Windows: "Не удалось открыть CUDA-библиотеку cudnn64_5.dll"
Tensorflow только что выпустила поддержку Windows. Я установил версию gpu и CUDA 8.0 и python 3.5. Однако после импорта тензорного потока я получил следующую ошибку:
>>> import tensorflow
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cublas64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:119] Couldn't open CUDA library cudnn64_5.dll
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:3459] Unable to load cuDNN DSO
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cufft64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library nvcuda.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library curand64_80.dll locally
Может кто-нибудь помочь? Спасибо!
Ответы
Ответ 1
TL; DR: Чтобы использовать cuDNN с TensorFlow, файл cudnn64_5.dll
должен находиться в каталоге, который находится в вашей переменной среды %PATH%
. Обратите внимание, что cuDNN - это отдельная загрузка из CUDA, и вы должны скачать версию 5.1 cuDNN.
Прежде всего, обратите внимание, что cuDNN не распространяется вместе с остальной частью инструментария CUDA, поэтому вам потребуется загрузить его отдельно от веб-сайта NVIDIA. В Windows он распространяется как ZIP-архив, поэтому вы должны извлечь его и найти каталог, содержащий cudnn64_5.dll
. Например, если вы извлечете его в C:\tools\cuda
, DLL будет находиться в C:\tools\cuda\bin\cudnn64_5.dll
. Наконец, вы можете добавить его в свой путь, введя в командной строке следующее:
C:\> set PATH=%PATH%;C:\tools\cuda\bin
C:\> python
...
>>> import tensorflow as tf
Ответ 2
В дополнение к приведенным выше ответам убедитесь, что вы загрузили поддерживаемую версию cuDNN.
В настоящее время TensorFlow поддерживает более старое cuDNN v.5.1, в то время как на сайте Nvidia имеется более новый cuDNN 6.0. У меня были такие ошибки с 6.0. Когда я вернулся к 5.1, все сработало.
Ответ 3
У меня была эта проблема, и мне потребовалось несколько попыток ее устранения.
Этот ответ относится к Python 64 на Windows 64
У меня также есть VS2017, установленный с Python 3.6
С чистой машины Windows 64
Установите Visual Studio 2015 (примечание: НЕ vs2017 - по крайней мере, пока). Публичное издание бесплатное. Убедитесь, что вы установили компилятор С++. Вам понадобится это, чтобы скомпилировать будущие библиотеки python.
Это также устранит любые проблемы с msvcp140.dll или msvcrt *.dlls. В качестве альтернативы вы можете установить VC Redistributable (но я рекомендую установить VS2015 вместо этого, поскольку это позволит вам скомпилировать и установить будущие библиотеки python).
Затем установите VS2017 и на этот раз также выберите Python и Data Learning (scikit). По умолчанию будет установлено Anaconda с Python 3.6 (построено с VS2015). Есть также некоторые полезные функции
* Также убедитесь, что у вас есть совместимая карта Nvidia (см. предыдущие ответы)
Затем убедитесь, что на вашем компьютере установлены последние драйверы Nvidia.
Затем убедитесь, что вы установили библиотеки Nvidia, упомянутые Google, и другие, в том числе Cuda.
* По сравнению с tensorflow 1.2 поддерживается Python 3.6, поэтому заметки о создании среды Python 3.5 больше не нужны
Есть несколько проблем, с которыми я столкнулся с tensorflow 1.2. Я также пробовал shadoworflow 1.31rc2 в моей среде
Проблема №1 - Брандмауэры (для тех, кто находится за брандмауэром)
Это предотвратит установку через "pip install" Чтобы исправить это, добавьте - trusted-host pypi.python.org
Например
pip install tensorflow-gpu --trusted-host pypi.python.org
Проблема №2 - Обновление до numpy 1.13.1
Установка tensorflow обновится до несовместимой версии numpy 1.13.1 (по крайней мере, на моем компьютере с Windows). Чтобы исправить это, загрузите колесо в http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy найдите numpy-1.13.1 + mkl-cp36-cp36m-win_amd64.whl
Установите это колесо перед установкой тензорного потока. Это остановит tenorflow от установки несовместимой версии пакета numpy 1.13.1
ПРИМЕЧАНИЕ. Посмотрите, как устанавливать колеса в других сообщениях (pip install fullpath_of_wheel)
ПРИМЕЧАНИЕ. Если вы уже установили shadoworflow, убедитесь, что вы принудительно обновляете с помощью опции --upgrade с установкой pip)
Проблема №3 - пакеты Nvidia cuda в разных местах
Чтобы проверить, есть ли у вас соответствующие пакеты CU *.DLL, используйте команду "where" (из командной строки C: \)
где cublas64_80.dll
где cudnn64_5.dll
где cufft64_80.dll
где nvcuda.dll
где curand64_80.dll
где cusolver64_80.dll
Если ваша машина похожа на мою, вы найдете эти DLL в нескольких местах, а иногда их даже не существует. Например, cublas64_80.dll был найден в моем каталоге c:\program files\Anaconda3 nvcuda.dll в моих c:\system32\windows и так далее. Если у вас установлен Matlab, у него будет своя версия. CNTK также имеет собственные версии. Nvidia поместит их в другой каталог. Это еще одна проблема. Как упоминалось другими, некоторые из DLL, которые вам нужны, предоставляются Nvidia в zip файле.
Вместо того, чтобы пытаться исправить ваши пути, я рекомендую попробовать это сначала вместо
Соберите 6 dll, упомянутых выше, и поместите их в один каталог, например c:\tfexperiment
Тогда cd в c:\tfexperiment
запустите python.exe из этого места. Windows теперь будет искать DLL в текущем пути сначала
теперь, когда python загружает тип в
импортировать тензор потока как tf
он должен работать для вас (надеюсь). Это был единственный способ заставить его работать на моей машине. Если вы дойдете до этого, вы можете просто добавить c:\tfexperiment в качестве своего первого пути в переменной окружения. Или вы можете определить правильный путь пути.
Если STILL не работает, вы можете сделать это еще на один шаг, загрузив procmon.exe из Microsoft. Запустите procmon.exe. Отфильтруйте исполняемый файл python.exe(извините, у меня нет времени объяснять, как использовать procmon). Теперь вернитесь к своей подсказке python и снова введите "import tensorflow as tf". procmon должен иметь много строк информации. Вы можете захотеть отфильтровать на loadimage. Это скажет вам, какие DLL файлы загружаются. Обратите внимание: расширения .pyd также являются DLL. Последняя .dll, загруженная (или не загруженная), вероятно, вызвала проблемы.
Ответ 4
Вам нужно загрузить cudnn вашей системы и извлечь его в CUDA_PATH.
Мой CUDA_PATH C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
Ответ 5
Для тех из вас, кто приземляется здесь из-за:
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:119] Couldn't open CUDA library cublas64_80.dll
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_blas.cc:2294] Unable to load cuBLAS DSO.
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cudnn64_5.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:119] Couldn't open CUDA library cufft64_80.dll
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_fft.cc:344] Unable to load cuFFT DSO.
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library nvcuda.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:119] Couldn't open CUDA library curand64_80.dll
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_rng.cc:338] Unable to load cuRAND DSO.
Вам нужно добавить обычный путь CUDA. Я не знаю, почему они просто не объединили их в одну загрузку. Очень глупо.
C:\Users\user>set PATH=%PATH%;C:\tools\cuda\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin
Ответ 6
Также убедитесь, что нет дополнительного cudnn64_5.dll
(неправильной версии), сидящего на другом пути.
Итак, если вы помещаете DLL в ...\CUDA\v8.0\bin
в прошлом, помните, что вы сделали и не ставили новую версию в ...\CuDNN\v5.1\bin
, не удаляя старый из другого каталога.
Ответ 7
Я только что загрузил cuda.dll файл с этого сайта: https://developer.nvidia.com/cudnn
а затем переместил распакованную папку туда, где были остальные библиотеки anaconda.
Я использую pycharm, поэтому было легко увидеть, где все внешние библиотеки были сохранены в anaconda. Надеюсь, это поможет!
Ответ 8
Пробовал pip3 install --upgrade tensorflow
после tensorflow-gpu
, и он работал нормально.
Я думаю, что это проблема только при прямой попытке pip3 install --upgrade tensorflow-gpu
.
Ответ 9
Как и в моем тесте, я обнаружил, что TF 1.2 поддерживает cudnn 64_5, а TF 1.3 поддерживает cudnn 64_6. Надеюсь, это поможет.:)