我将标题从“ CUDNN_STATUS_ALLOC_FAILED更改为使用CUDA 10.0和CuDNN 7.6.x的网络和数据最少”更好地描述了我的问题。
我有一台带有NVIDIA Geforce RTX 2060 GPU的笔记本电脑,该笔记本电脑应该具有Turing架构和7.5计算功能:https://en.wikipedia.org/wiki/Turing_(microarchitecture)
根据CuDNN支持矩阵,应在最新的CuDNN 7.6.3中支持GPU:https://docs.nvidia.com/deeplearning/sdk/cudnn-support-matrix/index.html
话虽如此,这个简单的示例代码在我的一台使用tensorflow-gpu
的机器上失败了:
import numpy as np
from tensorflow.keras import layers, models, optimizers
model = models.Sequential()
model.add(layers.Conv1D(1, 3, input_shape=(8, 1)))
optimizer = optimizers.Adam(lr=1e-6)
model.compile(optimizer=optimizer, loss='mse')
x = np.zeros((1, *model.input.shape[1:]))
y = np.zeros((1, *model.output.shape[1:]))
model.fit(x, y)
经过大量清理的输出为:
I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened
dynamic library cudart64_100.dll
I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened
dynamic library nvcuda.dll
I tensorflow/core/common_runtime/gpu/gpu_device.cc:1304] Created TensorFlow device
(/job:localhost/replica:0/task:0/device:GPU:0 with 4608 MB memory) -> physical GPU
(device: 0, name: GeForce RTX 2060, pci bus id: 0000:01:00.0, compute capability: 7.5)
I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened
dynamic library cudnn64_7.dll
E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle:
CUDNN_STATUS_ALLOC_FAILED
W tensorflow/core/common_runtime/base_collective_executor.cc:216]
BaseCollectiveExecutor::StartAbort Unknown: Failed to get convolution algorithm. This
is probably because cuDNN failed to initialize, so try looking to see if a warning log
message was printed above.
[[{{node sequential/conv3d/Conv3D}}]]
Traceback (most recent call last):
File "NotWorking.py", line 12, in <module>
model.fit(x, y)
...
tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution
algorithm. This is probably because cuDNN failed to initialize, so try looking to see
if a warning log message was printed above.
[[node sequential/conv3d/Conv3D (defined at C:\Users\bers\AppData\Local\Programs\
Python\Python37\lib\site-packages\tensorflow_core\python\framework\ops.py:1751) ]]
[Op:__inference_distributed_function_505]
Function call stack:
distributed_function
在tensorflow-gpu==1.14.0
,2.0.0rc0
,2.0.0rc1
(通过pip
安装),CUDA 10.0.130和多个版本的CuDNN [7.6.3.30, 7.6.2.24,7.6.0.64] for Python 3.7.4上的CUDA 10.0。
编辑1:我已经卸载并重新安装了TensorFlow,Python和所有与NVIDIA有关的东西,包括CUDA,CuDNN和图形驱动程序,直到Windows只能分配基本的VGA为止。 NVIDIA GPU的驱动程序。仅安装tensorflow
时不会出现此问题,并且在装有CUDA 10.0上具有CuDNN 7.6.2的Quadro M5000的另一台计算机上也不会出现此问题。
编辑2:我已经使用下面的代码进行了许多实验。这些是我的结果:
失败:
工作:
因此,该问题独立于Python版本(比较2与3),独立于tensorflow-gpu
的确切版本(与1与2比较),包括独立于{{ 1}}被编译为(比较1与2)。
到目前为止,该问题仅出现在CUDA 10.0上的任何版本的CuDNN> = 7.6.0上-这意味着,最新的CuDNN 7.5在CUDA 10.0上可以正常工作(请参见4和5),而最早的CuDNN 7.6在CUDA上失败10.0(请参阅2和3),并且在CUDA 9.0上都可以正常工作(请参阅6)。
有趣的是,以下代码变体在上述所有系统变体中也能正常工作:
tensorflow-gpu
和
model.add(layers.Conv1D(1, 3, input_shape=(3, 1))) # changed input shape
因此,总而言之,某些特定的TensorFlow代码(甚至不是每个TensorFlow代码)仅在CUDA 10.0上的CuDNN 7.6失败。不幸的是,TensorFlow 2已针对CuDNN 7.6.0进行了编译,因此我无法运行功能强大的TF2代码。
这可能是怎么回事?