我在配备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
答案 0 :(得分:13)
我已经设法通过删除我的主文件夹中的.nv文件夹来实现它:
sudo rm -rf ~/.nv/
答案 1 :(得分:5)
听起来很奇怪,尝试重新启动计算机并重新运行模型。如果模型运行正常,则问题在于GPU内存分配和可用内存的张量流管理。在Windows 10上,我有两个终端打开,关闭一个解决了我的问题。可能有开放线程(僵尸)仍在保留内存。
答案 2 :(得分:4)
在Tensorflow 2.0中,我的问题通过设置内存增长来解决。 ConfigProto在TF 2.0中已弃用,我使用了tf.config.experimental。我的计算机规格是:
我使用的代码是:
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)
答案 3 :(得分:3)
在我的情况下,问题似乎是由tensorflow和cudnn版本不匹配引起的。 以下帮助了我(我在Ubuntu 16.04上使用NVidia Tesla K80在Google Cloud上工作,tensorflow 1.5最终与cudnn 7.0.4和cuda 9.0一起工作):
完全删除cuDNN:
sudo rm /usr/local/cuda/include/cudnn.h
sudo rm /usr/local/cuda/lib64/libcudnn*
执行此操作后,导入tensorflow会导致错误。
下载相应的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版本。
重新启动计算机。在我的情况下,问题消失了。如果错误仍然存在,请考虑安装另一个版本的tensorflow。
希望这有助于某人。
答案 4 :(得分:3)
对我来说,第四可以很好地解决问题。 https://blog.csdn.net/comway_Li/article/details/102953634?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-2
1.
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 1.0
session = tf.Session(config=config, ...)
2.
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
3.
sudo rm -f ~/.nv
4.
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
#from tensorflow import ConfigProto
#from tensorflow import InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)
答案 5 :(得分:2)
我也得到同样的错误,我解决了这个问题。我的系统属性如下:
我如何解决这个问题如下:
我将环境变量设置为:
malloc()
* export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"
* export CUDA_HOME=/usr/local/cuda
来缓存运行时链接器的共享库。 我希望这些步骤也能帮助即将发疯的人。
答案 6 :(得分:2)
这对我有用:
export TF_FORCE_GPU_ALLOW_GROWTH='true'
答案 7 :(得分:2)
尝试一下
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)])
答案 8 :(得分:2)
添加以下代码对我有用:
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
在我的环境中,CuDNN和Cuda版本之间没有不匹配的地方。 操作系统:ubuntu-18.04; Tensorflow:1.14; CuDNN:7.6; CUDA:10.1(418.87.00)。
答案 9 :(得分: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。
答案 10 :(得分:1)
这是 cudnn 兼容的问题。检查您安装的使用GPU的实例,例如tensorflow-gpu
。什么版本?该版本是否与您的cudnn
的版本兼容,并且cudnn是否为您的cuda安装了正确的版本?。
我观察到:
cuDNN v7.0.3
的{{1}}
Cuda 7.*
的{{1}}
cuDNN v7.1.2
代表Cuda 9.0
,依此类推。
因此,还要为您的cuda配置检查TensorFlow的正确版本。
例如,使用cuDNN v7.3.1
:
Cuda 9.1
的{{1}}
tensorflow-gpu
及以上TF v1.4
等
因此,您所需要做的就是重新安装相应的cudnn版本。 希望对您有帮助!
答案 11 :(得分:1)
对于在 Jupyter笔记本电脑中遇到此问题的任何人:
我正在运行两个Jupyter笔记本。关闭其中一个后,问题就解决了。
答案 12 :(得分:0)
尝试重新启动机器。它对我有用。
答案 13 :(得分:0)
重新启动机器对我有用。试试这个:
sudo reboot
然后,重新运行代码
答案 14 :(得分:0)
我遇到了同样的问题(Ubuntu 18.04)。我正在使用:
我解决了它卸载cuda及其文件夹,并按照tensorflow页面说明通过apt安装它: https://www.tensorflow.org/install/gpu?hl=fr#ubuntu_1804_cuda_101
答案 15 :(得分:0)
我遇到了同样的问题,因为我的GPU被某个后台僵尸/终止进程耗尽了内存,杀死了这些进程对我有用:
ps aux | grep 'Z' # Zombie
ps aux | grep 'T' # Terminated
kill -9 your_zombie_or_terminated_process_id
答案 16 :(得分: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句柄。
答案 17 :(得分:0)
以我为例,在检查cuDNN和CUDA版本后,我发现我的GPU内存不足。在另一个bash终端中使用watch -n 0.1 nvidia-smi
时,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内存快满的时刻。
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
和使用缓存)。我希望我的回答可以帮助其他人。
答案 18 :(得分:0)
请记住关闭您的tensorboard终端/ cmd或其他与目录有交互作用的终端。然后,您可以在应有的状态下重新开始训练。
答案 19 :(得分: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
意外将其更新为与系统其他部分不兼容的版本。
答案 20 :(得分: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是特定于版本的。
答案 21 :(得分: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 与命令配合使用是可以的。