Keras、Tensorflow和CuDNN初始化失败

4

我有一台非常强大的Windows PC(运行Windows 10),具有112GB内存,16个核心和3张Geforce RTX2070显卡(不支持SLI等)。 它正在运行CuDNN 7.5 + Tensorflor 1.13 + Python 3.7。

我的问题是,每当我尝试对矩阵运行Keras模型进行训练或进行预测时,都会出现下面的错误。起初我以为只有在同时运行多个程序时才会出现这种情况,但事实并非如此,现在即使我只运行单个Keras实例时也会出现错误(通常是这样,但不总是)。

2019-06-15 19:33:17.878911: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] 创建了 TensorFlow 设备 (/job:localhost/replica:0/task:0/device:GPU:2,带有 6317 MB 内存) -> 物理 GPU (device: 2,name: GeForce RTX 2070, pci bus id: 0000:44:00.0,compute capability: 7.5) 2019-06-15 19:33:23.423911: I tensorflow/stream_executor/dso_loader.cc:152] 成功打开 CUDA 库 cublas64_100.dll 本地 2019-06-15 19:33:23.744678: E tensorflow/stream_executor/cuda/cuda_blas.cc:510] 创建 cublas 句柄失败:CUBLAS_STATUS_ALLOC_FAILED 2019-06-15 19:33:23.748069: E tensorflow/stream_executor/cuda/cuda_blas.cc:510] 创建 cublas 句柄失败:CUBLAS_STATUS_ALLOC_FAILED 2019-06-15 19:33:23.751235: E tensorflow/stream_executor/cuda/cuda_blas.cc:510] 创建 cublas 句柄失败:CUBLAS_STATUS_ALLOC_FAILED 2019-06-15 19:33:25.267137: E tensorflow/stream_executor/cuda/cuda_dnn.cc:334] 无法创建 cudnn 句柄:CUDNN_STATUS_ALLOC_FAILED 2019-06-15 19:33:25.270582: E tensorflow/stream_executor/cuda/cuda_dnn.cc:334] 无法创建 cudnn 句柄:CUDNN_STATUS_ALLOC_FAILED 异常: 无法获取卷积算法。这可能是因为cuDNN无法初始化,因此请查看上面是否打印了警告日志消息。 [[{{node conv2d_1/convolution}}]] [[{{node dense_3/Sigmoid}}]]

2个回答

5
在Tensorflow 2.0及以上版本中,您可以通过以下方式解决此问题:
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'

或者

physical_devices = tf.config.experimental.list_physical_devices('GPU')
if len(physical_devices) > 0:
    tf.config.experimental.set_memory_growth(physical_devices[0], True)

2
我猜你不是想缩进 if 语句,是这样吗?另外,为什么只应用于一个 GPU?谢谢。 - Robert Lugg
1
@RobertLugg 谢谢,我已经编辑了帖子,我只有一张GPU,但是你可以创建一个循环来配置多个GPU ^^ - Bensuperpc

1
将以下内容添加到您的代码中。
from keras.backend.tensorflow_backend import set_session
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True  # dynamically grow the memory used on the GPU
config.log_device_placement = True  # to log device placement (on which device the operation ran)
sess = tf.Session(config=config)
set_session(sess)  # set this TensorFlow session as the default session for Keras

2
但关键是要将其直接写在“import tensorflow as tf”下面,而我没有这样做。我是在所有导入之后才写的。 - PabloDK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接