无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR

问题描述 投票:7回答:9

我在配备GeForce GT 750M的Macbook Pro上安装了tensorflow 1.0.1 GPU版本。还安装了CUDA 8.0.71和cuDNN 5.1。我运行的tf代码可以很好地处理非CPU张量流,但是在GPU版本上,我得到了这个错误(曾经有一段时间它也有效):

name: GeForce GT 750M
major: 3 minor: 0 memoryClockRate (GHz) 0.9255
pciBusID 0000:01:00.0
Total memory: 2.00GiB
Free memory: 67.48MiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:01:00.0)
E tensorflow/stream_executor/cuda/cuda_driver.cc:1002] failed to allocate 67.48M (70754304 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY
Training...

E tensorflow/stream_executor/cuda/cuda_dnn.cc:397] could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
E tensorflow/stream_executor/cuda/cuda_dnn.cc:364] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
F tensorflow/core/kernels/conv_ops.cc:605] Check failed: stream->parent()->GetConvolveAlgorithms(&algorithms) 
Abort trap: 6

这里发生了什么?这是张量流中的错误吗?请帮忙。

当我运行python代码时,这是GPU内存空间:

Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 83.477 of 2047.6 MB (i.e. 4.08%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 83.477 of 2047.6 MB (i.e. 4.08%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 83.477 of 2047.6 MB (i.e. 4.08%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 1.1016 of 2047.6 MB (i.e. 0.0538%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 1.1016 of 2047.6 MB (i.e. 0.0538%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 1.1016 of 2047.6 MB (i.e. 0.0538%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 1.1016 of 2047.6 MB (i.e. 0.0538%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 91.477 of 2047.6 MB (i.e. 4.47%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 22.852 of 2047.6 MB (i.e. 1.12%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 22.852 of 2047.6 MB (i.e. 1.12%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 36.121 of 2047.6 MB (i.e. 1.76%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 71.477 of 2047.6 MB (i.e. 3.49%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 67.477 of 2047.6 MB (i.e. 3.3%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 67.477 of 2047.6 MB (i.e. 3.3%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 67.477 of 2047.6 MB (i.e. 3.3%) Free
tensorflow cudnn
9个回答
14
投票

我已经设法通过删除我的主文件夹中的.nv文件夹来使其工作:

sudo rm -rf ~/.nv/

0
投票

请记住关闭与目录交互的tensorboard终端/ cmd或其他终端。然后你可以重新开始训练它应该工作。


0
投票

在我的情况下,在检查cuDNN和CUDA版本后,我发现我的GPU内存不足。在另一个bash终端中使用watch -n 0.1 nvidia-smi2019-07-16 19:54:05.122224: E tensorflow/stream_executor/cuda/cuda_dnn.cc:334] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR发生的那一刻是GPU内存几乎已满的时刻。 The screenshot

所以我配置tnsorflow的限制来使用我的gpu。当我使用tf.keras模块时,我将以下代码添加到我的程序的开头:

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9
tf.keras.backend.set_session(tf.Session(config=config));

然后,问题解决了!

您可以更改batch_size或使用更智能的方式输入训练数据(例如tf.data.Dataset和使用缓存)。我希望我的回答可以帮助别人。


0
投票

它与可用于加载GPU资源的内存部分有关,以创建cudnn句柄,也称为per_process_gpu_memory_fraction。自己减少这个内存分数将解决错误。

> sess_config = tf.ConfigProto(gpu_options =
> tf.GPUOptions(per_process_gpu_memory_fraction=0.7),
> allow_soft_placement = True)
> 
> with tf.Session(config=sess_config) as sess:
>      sess.run([whatever])

使用可能适合您记忆的小部分。 (在代码中,我使用0.7,你可以从0.3开始甚至更小,然后增加直到你得到相同的错误,这是你的限制。)将它传递给你的tf.Session()tf.train.MonitoredTrainingSession()或主管的sv.managed_session()作为配置。

这应该允许你的GPU为你的TensorFlow代码创建一个cudnn句柄。


5
投票

听起来很奇怪,尝试重新启动计算机并重新运行模型。如果模型运行正常,则问题在于GPU内存分配和可用内存的张量流管理。在Windows 10上,我有两个终端打开,关闭一个解决了我的问题。可能有开放线程(僵尸)仍然持有内存。


3
投票

在我的情况下,问题似乎是由tensorflow和cudnn版本不匹配引起的。以下帮助了我(我在Ubuntu 16.04上使用NVidia Tesla K80在Google Cloud上工作,tensorflow 1.5最终与cudnn 7.0.4和cuda 9.0一起工作):

  1. 完全删除cuDNN: sudo rm /usr/local/cuda/include/cudnn.h sudo rm /usr/local/cuda/lib64/libcudnn* 这样做后导入tensorflow会导致错误。
  2. 下载适当的cuDNN版本。请注意,CUDA 9.0有cuDNN 7.0.4,CUDA 8.0有cuDNN 7.0.4。您应该选择与您的CUDA版本对应的那个。在这一步要小心,否则你会再次遇到类似的问题。像往常一样安装cuDNN: tar -xzvf cudnn-9.0-linux-x64-v7.tgz cd cuda sudo cp -P include/cudnn.h /usr/include sudo cp -P lib64/libcudnn* /usr/lib/x86_64-linux-gnu/ sudo chmod a+r /usr/lib/x86_64-linux-gnu/libcudnn* 在这个例子中,我为CUDA 9.0安装了cuDNN 7.0.x(x实际上并不重要)。注意匹配您的CUDA版本。
  3. 重新启动计算机。在我的情况下,问题消失了。如果错误仍然存​​在,请考虑安装另一个版本的tensorflow。

希望这有助于某人。


2
投票

我也得到同样的错误,我解决了这个问题。我的系统属性如下:

  • 操作系统:Ubuntu 14.04
  • GPU:GTX 1050Ti
  • Nvidia车手:375.66
  • Tensorflow:1.3.0
  • Cudnn:6.0.21(cudnn-8.0-linux-x64-v6.0.deb)
  • CUDA: 8.0.61
  • 硬:2.0.8

我如何解决这个问题如下:

  1. 我将cudnn文件复制到适当的位置(/ usr / local / cuda / include和/ usr / local / cuda / lib64)
  2. 我将环境变量设置为: * export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64" * export CUDA_HOME=/usr/local/cuda
  3. 我还运行sudo ldconfig -v command来缓存运行时链接器的共享库。

我希望这些步骤也能帮助即将发疯的人。


1
投票

这是cudnn兼容的问题。检查您使用GPU安装的内容,例如tensorflow-gpu。什么是版本?该版本是否与您的cudnn版本兼容,并且为您的cuda安装了正确版本的cudnn?

我观察到:cuDNN v7.0.3Cuda 7.* cuDNN v7.1.2Cuda 9.0 cuDNN v7.3.1Cuda 9.1等等。

因此,请检查您的cuda配置的正确版本的TensorFlow。例如 - 使用tensorflow-gpuTF v1.4用于cudnn 7.0.* TF v1.7及以上用于cudnn 9.0.*等。

所以你需要做的就是重新安装合适的cudnn版本。希望能帮助到你!


1
投票

对于在Jupyter笔记本中遇到此问题的任何人:

我正在运行两个jupyter笔记本。关闭其中一个后,问题就解决了。


0
投票

我也遇到了同样的问题:

Using TensorFlow backend.
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties: 
name: GeForce GTX 1050
major: 6 minor: 1 memoryClockRate (GHz) 1.493 pciBusID 0000:01:00.0
Total memory: 3.95GiB
Free memory: 3.60GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0)
E tensorflow/stream_executor/cuda/cuda_dnn.cc:385] could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
E tensorflow/stream_executor/cuda/cuda_dnn.cc:352] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
F tensorflow/core/kernels/conv_ops.cc:532] Check failed:  stream->parent()->GetConvolveAlgorithms(&algorithms)

Aborted (core dumped)

但在我的情况下,使用sudo与命令工作完全正常。


0
投票

我在安装了CUDA 9.0的系统上意外安装了CUDA 9.2 libcudnn7_7.2.1.38-1 + cuda9.2_amd64.deb而不是libcudnn7_7.0.5.15-1 + cuda9.0_amd64.deb时遇到了这个问题。

我到了那里是因为我安装了CUDA 9.2并且我降级到了CUDA 9.0,显然libcudnn特定于版本。


0
投票

对我来说,按照描述here重新运行CUDA安装解决了这个问题:

# Add NVIDIA package repository
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
sudo apt install ./cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt update

# Install CUDA and tools. Include optional NCCL 2.x
sudo apt install cuda9.0 cuda-cublas-9-0 cuda-cufft-9-0 cuda-curand-9-0 \
    cuda-cusolver-9-0 cuda-cusparse-9-0 libcudnn7=7.2.1.38-1+cuda9.0 \
    libnccl2=2.2.13-1+cuda9.0 cuda-command-line-tools-9-0

在安装过程中,apt-get降级了cudnn7,我认为这是罪魁祸首。可能它与apt-get upgrade意外更新到一个与系统的其他部分不兼容的版本。

© www.soinside.com 2019 - 2024. All rights reserved.