37

我用 GeForce GT 750M 在我的 Macbook Pro 上安装了 tensorflow 1.0.1 GPU 版本。还安装了 CUDA 8.0.71 和 cuDNN 5.1。我正在运行一个在非 CPU tensorflow 上运行良好的 tf 代码,但在 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
4

22 回答 22

39

在 Tensorflow 2.0 中,我的问题通过设置内存增长得到了解决。ConfigProto 在 TF 2.0 中已弃用,我使用了 tf.config.experimental。我的电脑规格是:

  • 操作系统:Ubuntu 18.04
  • 显卡:GeForce RTX 2070
  • 英伟达驱动程序:430.26
  • 张量流:2.0
  • 库登:7.6.2
  • 库达:10.0

我使用的代码是:

physical_devices = tf.config.experimental.list_physical_devices('GPU')
assert len(physical_devices) > 0, "Not enough GPU hardware devices available"
config = tf.config.experimental.set_memory_growth(physical_devices[0], True)
于 2019-11-03T20:40:11.910 回答
27

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

sudo rm -rf ~/.nv/
于 2018-02-05T11:14:28.687 回答
19

就我而言,在检查了 cuDNN 和 CUDA 版本后,我发现我的 GPU 内存不足watch -n 0.1 nvidia-smi在另一个 bash 终端中使用时,2019-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 内存几乎已满的时刻。 截图

所以我为 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并使用缓存)。我希望我的回答可以帮助别人。

于 2019-07-16T12:19:49.713 回答
12

添加以下代码对我有用:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)

在我的环境中,CuDNN 和 Cuda 版本之间没有不匹配。操作系统:ubuntu-18.04;张量流:1.14;CuDNN:7.6;库达:10.1(418.87.00)。

于 2019-10-01T07:51:03.050 回答
8
于 2020-05-13T12:32:17.867 回答
5

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

于 2018-01-15T03:30:30.240 回答
4

这对我有用:

export TF_FORCE_GPU_ALLOW_GROWTH='true'

于 2020-12-04T21:53:52.143 回答
3

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

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

于 2019-08-07T08:48:53.493 回答
3

尝试这个

gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)
tf.config.experimental.set_virtual_device_configuration(gpus[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)])
于 2020-04-30T05:38:25.487 回答
2

就我而言,问题似乎是由 tensorflow 和 cudnn 版本不匹配引起的。以下帮助了我(我在 Google Cloud 上使用 NVidia Tesla K80 在 Ubuntu 16.04 上工作,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 应该会导致错误。

  1. 下载适当的 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 版本。

  1. 重新启动计算机。就我而言,问题消失了。如果错误仍然出现,请考虑安装另一个版本的 tensorflow。
于 2018-03-24T13:57:47.547 回答
2

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

  • 操作系统:Ubuntu 14.04
  • 显卡:GTX 1050Ti
  • 英伟达驱动程序:375.66
  • 张量流:1.3.0
  • Cudnn:6.0.21(cudnn-8.0-linux-x64-v6.0.deb)
  • 库达: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以缓存运行时链接器的共享库。

于 2017-10-06T18:03:13.043 回答
1

它与可用于加载 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()ortf.train.MonitoredTrainingSession()或 Supervisor 的。sv.managed_session()

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

于 2019-08-30T14:58:54.323 回答
1

我通过使用以下几行调整 GPU 内存使用来解决了这个问题:

config = tf.compat.v1.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.7
tf.compat.v1.keras.backend.set_session(
    tf.compat.v1.Session(config=config))

这适用于 TensorFlow 2。

于 2021-02-18T21:43:23.057 回答
1

我有同样的问题(Ubuntu 18.04)。我正在使用:

  • 张量流 2.1
  • 库达 10.1
  • cudnn 7.6.5

我解决了它卸载 cuda 及其文件夹,并按照 tensorflow 页面说明通过 apt 安装它: https ://www.tensorflow.org/install/gpu?hl=fr#ubuntu_1804_cuda_101

于 2020-04-22T04:04:27.840 回答
1

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

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

因此,还要为您的 cuda 配置检查正确的 TensorFlow 版本。例如 -using tensorflow-gpu: TF v1.4forcudnn 7.0.* TF v1.7及以上 forcudnn 9.0.*等。

因此,您需要做的就是重新安装适当的 cudnn 版本。希望能帮助到你!

于 2019-02-28T09:12:48.563 回答
1

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

于 2019-05-07T07:35:14.653 回答
0

重新启动机器对我有用。尝试这个:

sudo reboot

然后,重新运行代码

于 2020-09-02T16:39:57.863 回答
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和命令效果很好。

于 2018-09-06T06:55:26.240 回答
0

我遇到了同样的问题,因为我的 GPU 被一些后台僵尸/终止进程耗尽了内存,杀死这些进程对我有用:

ps aux | grep 'Z' # Zombie
ps aux | grep 'T' # Terminated
kill -9 your_zombie_or_terminated_process_id
于 2020-02-24T10:00:33.290 回答
0

对我来说,按照此处所述重新运行 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为与系统其他部分不兼容的版本。

于 2019-01-30T19:20:39.713 回答
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 是特定于版本的。

于 2018-09-15T21:53:04.487 回答
0

我遇到了同样的问题并通过添加解决了它:

import os
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'
于 2021-11-07T18:57:12.050 回答