解决使用keras训练模型Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR报错问题

机器环境
Ubuntu18.04
rtx2080s
tensorflow-gpu 1.14
keras 2.2.3

使用keras训练模型时异常报错,根据日志分析大概是显存溢出问题,通过watch -n 1 nvidia-smi 观察显存使用情况,也发现当模型训练时显存会突然爆增,然后进程就挂掉了。
在这里插入图片描述
根据上面分析的原因修改了batchsize也是异常,然后查找了一下相关资料,一般情况下,如果不加以限制,很多深度学习框架的代码在运行的时候会申请整个显存空间,即便它不需要这么多的资源,但是它申请了之后就不允许其他的程序使用,所以在这种状态下运行代码,就会出现显存不够用的问题,所以只要分配一下模型训练的显存分配策略就可以。

而keras是在tensorflow的基础上封装起来的,所以只需要修改tensorflow的显存分配策略就可以,在train代码中添加如下配置。

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

修改显存分配策略后,模型训练调用gpu正常。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/threestooegs/article/details/127856206
今日推荐