我正在Windows 10上运行GTX 1070上的keras神经网络训练和预测。大多数时候它都在工作,但不时会抱怨
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错误都无法解释。
如何解决?
答案 0 :(得分:3)
尝试使用set gpu选项per_process_gpu_memory_fraction限制您的gpu使用。
弄清楚它是什么有效,什么无效。
我建议使用.7作为起始基线。
答案 1 :(得分:3)
解决了这个问题。 我在使用Nvidia GEforce 920M的Windows 10上遇到了同样的问题。 搜索cudnn库的正确版本。如果版本与CUDA版本不兼容,它将不会在tensorflow安装时抛出错误,但会在GPU内存分配期间产生干扰。 请检查您的CUDA和CUDNN版本。另请遵循上述会话创建的说明。
答案 2 :(得分:3)
与其他人所说的类似,启用 GPU 的内存增长可以解决此问题。
通过添加到训练脚本的开头,以下对我有用:
# Using Tensorflow-2.4.x
import tensorflow as tf
try:
tf_gpus = tf.config.list_physical_devices('GPU')
for gpu in tf_gpus:
tf.config.experimental.set_memory_growth(gpu, True)
except:
pass
答案 3 :(得分:2)
我有时在Windows10和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))
设置解决了暂停问题。
答案 4 :(得分:2)
最后,这个问题现在已经为我解决了,我花了很多时间努力解决这个问题。
我建议按照以下说明正确执行所有安装步骤 链接
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下载驱动程序
答案 5 :(得分:0)
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, ...)