TensorFlow: 无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR,但没有其他TF实例运行。

3

我尝试使用VGG16进行一些基本的迁移学习代码。我使用的是Ubuntu 16.04、TensorFlow 1.3和Keras,并且我有4个1080ti GPU。

当我运行到这行代码时:

 datagen = ImageDataGenerator(rescale=1. / 255)
 model = applications.VGG16(include_top=False, weights='imagenet')

nvidia-smi的输出如下所示:
Processes:                                                       GPU Memory |
| GPU       PID  Type  Process name                                   Usage   

|    0     14241    G   /usr/lib/xorg/Xorg                             256MiB |
|    0     14884    G   compiz                                         155MiB |
|    0     16497    C   /home/simon/anaconda3/bin/python             10267MiB |
|    1     16497    C   /home/simon/anaconda3/bin/python             10611MiB |
|    2     16497    C   /home/simon/anaconda3/bin/python             10611MiB |
|    3     16497    C   /home/simon/anaconda3/bin/python             10611MiB |

+-----------------------------------------------------------------------------+

接下来在终端的输出为

 2017-09-02 15:59:15.946927: E tensorflow/stream_executor/cuda/cuda_dnn.cc:371] could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
 2017-09-02 15:59:15.946960: E tensorflow/stream_executor/cuda/cuda_dnn.cc:338] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
 2017-09-02 15:59:15.946973: F tensorflow/core/kernels/conv_ops.cc:672] Check failed: stream->parent()->GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo<T>(), &algorithms) 

我的jupyter笔记本内核死了。

显然这是一个内存问题,但我不明白为什么突然间我的GPU被这段代码占用。需要补充一下的是,这个问题只出现在过去24小时内,而且所有这些代码都在一天前运行得很好。这里有很多类似问题的答案,但它们都涉及到其他TF实例(并建议关闭它们)。在我的情况下,这是唯一运行的TF应用程序(或任何其他应用程序)。


1
你确定16497不是僵尸进程吗?你试过重启吗? - Robert Crovella
不是僵尸进程的问题,我已经查找过了。这真的很烦人,因为 Stack Overflow 上几乎所有与此问题相关的答案都表明这是由于僵尸进程导致的内存耗尽。 - GhostRider
3个回答

2
尝试终止所有Python进程,然后删除~/.nv文件夹并再次运行。对于我遇到的相同错误,这种方法有效。

0

CHECK可能会失败,原因不仅限于ShouldIncludeWinogradNonfusedAlgo()。例如,如果cudnnSupport实例未能成功创建,CHECK也会失败。我建议您在github上发布更详细的问题,我可以查看。但首先尝试更新CUDA驱动程序,然后重新安装cudnn。基本上是为了确保CUDA和cudnn环境最近没有被更改。此外,如果可能的话,请提供一个最小的重现器。谢谢!


0

通过这里的方法解决了问题。我也成功地让它工作了,只需要选择一个适合的百分比,例如0.7。

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.7
session = tf.Session(config=config, ...)

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