【TF2】Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

一、问题出现

在使用TensorFlow或者Keras准备进行网络训练时,有时候会出现如下报错:

Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

二、问题分析

有的时候,电脑gpu显存明显是足够的,为何还是为报错呢?

一般情况下,如果不加以限制,很多深度学习框架的代码在运行的时候会申请整个显存空间(即便它不需要这么多的资源,但是它申请了之后就不允许其他的程序使用),所以在这种状态下运行代码,就会出现显存不够用的问题(因为还有其他的程序或操作也需要显存资源)。

三、解决方案

为了解决以上问题,我们在训练网络之前,需要在代码加入一些指令,控制显存的使用,以TensorFLow2为例:

import tensorflow as tf
config = tf.compat.v1.ConfigProto(gpu_options=tf.compat.v1.GPUOptions(allow_growth=True))
sss = tf.compat.v1.Session(config=config)

解释:

  • tf.compat.v1.ConfigProto()。这是 tensorflow2 版本的写法,这个方法的作用就是设置运行tensorflow代码的时候的一些配置,例如如何分配显存,是否打印日志等;所以它的参数都是 配置名称=True/False(默认为False)这种形式;
  • gpu_options=tf.compat.v1.GPUOptions(allow_growth=True) 限制GPU资源的使用,此处allow_growth=True是动态分配显存,需要多少,申请多少;
  • sess = tf.compat.v1.Session(config=config),让这些配置生效。

你可能感兴趣的:(tensorflow学习,tensorflow)