我正在Windows 10上运行keras神经网络训练和GTX 1070预测。大多数时候它都在工作,但它不时会抱怨
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:359] could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:366] error retrieving driver version: Unimplemented: kernel reported driver version not implemented on Windows
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:326] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
F c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\kernels\conv_ops.cc:659] Check failed: stream->parent()->GetConvolveAlgorithms(&algorithms)
它不能用字面上的错误含义和OOM错误来解释。
怎么修?
尝试使用set gpu选项per_process_gpu_memory_fraction限制您的gpu使用率。
摆弄它,看看哪些有效,哪些无效。
我建议使用.7作为起始基线。
得到了这个问题的解决方案。我在使用Nvidia GEforce 920M的Windows 10上遇到了同样的问题。搜索cudnn库的正确版本。如果版本与CUDA版本不兼容,它将不会在tensorflow安装时抛出错误,但会在GPU内存分配期间产生干扰。请检查您的CUDA和CUDNN版本。另请遵循上面提到的有关创建会话的说明。
我有时在Windows 10和Keras上遇到了这个问题。重启会在短时间内解决问题,但会再次发生。
我指的是https://github.com/fchollet/keras/issues/1538
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3
set_session(tf.Session(config=config))
设置解决了暂停问题。
最后这个问题现在已经解决了,我花了很多时间来解决这个问题。
我建议按照链接中的说明正确执行所有安装步骤
TensorFlow- https://www.tensorflow.org/install/install_windows
和CuDNN -
https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#install-windows
对我来说这还不够,我尝试从GeForce Experience窗口更新我的GeForce Game Ready驱动程序,重启后它开始为我工作。
驱动程序也可以从链接https://www.geforce.com/drivers下载
tf doku帮我很多Allowing GPU memory growth
第一个是allow_growth选项,它尝试根据运行时分配仅分配尽可能多的GPU内存:它开始分配非常少的内存,并且当Sessions运行并需要更多GPU内存时,我们扩展了所需的GPU内存区域TensorFlow流程。请注意,我们不释放内存,因为这可能导致更糟糕的内存碎片。要启用此选项,请在ConfigProto中设置选项:
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)
要么
with tf.Session(graph=graph_node, config=config) as sess:
...
第二种方法是per_process_gpu_memory_fraction选项,它确定应分配每个可见GPU的总内存量的分数。例如,您可以通过以下方式告诉TensorFlow仅分配每个GPU总内存的40%:
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config, ...)