• 解决使用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) 让这些配置生效
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

  • 相关阅读:
    Linux之软连接和硬连接的用法和区别【详细!!!】
    设计模式之建造者模式
    C++11的互斥包装器
    优维低代码实践:函数
    2022强网杯Crypto
    家政预约接单系统,家政保洁小程序开发;
    业务可视化-让你的流程图"Run"起来
    mapper文件添加@Mapper注解爆红
    ChatGPT实战与私有化大模型落地
    SpringSecurity 的简单使用
  • 原文地址:https://blog.csdn.net/threestooegs/article/details/127856206