UnkownError:Fail to find the dnn implementation. 解决方案


UnkownError:Fail to find the dnn implementation. 解决方案

一、总结

一句话总结:

这意思是cudnn分配不出更多的运算资源了

 

 

二、UnkownError:Fail to find the dnn implementation. 解决方案及附加问题

转自或参考:UnkownError:Fail to find the dnn implementation. 解决方案及附加问题
https://blog.csdn.net/weixin_44545603/article/details/103322446


本人配置:
GEFORCE RTX 2060
Win10
CUDA10.0
cuDNN7.6
tensorflow-gpu-2.0.0
本文中只包含tf2.0的解决方案,tf1的解决方案请参考本文的参考文章链接。
我的程序是在jupyter notebook中跑的,notebook只有一个UnknownError的报错。我在控制台中找到了一些新的信息。

Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED

这意思是cudnn分配不出更多的运算资源了。
网上有很多人说这是因为显卡太渣了…就目前情况来看,如果一台算力7.4的显卡还太渣的话,那真不知道什么显卡不渣了…

在确定自己tensorflow、cuda、cudnn版本
这种问题只能是显存资源的分配问题导致的
tensorflow有两种显存分配方式:

  1. 仅在需要时申请显存空间(程序初始运行时消耗很少的显存,随着程序的运行而动态申请显存);
  2. 限制消耗固定大小的显存(程序不会超出限定的显存大小,若超出的报错)。
    而默认是第二种!!!

这就能解释为什么会出现alloc的问题了,所以我们通过下面的代码吧显存分配方式改成第一种就可以了!

import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)

到此,相信很多人的问题已经解决了,但是可能也有些人出现了新问题:

RuntimeError: Device could not be initialized or no devices found.

这可能是因为,现在你的程序是跑在一个虚拟环境中的(比如anaconda)。
而在这些环境中,你的硬件都是事先被初始化过的,所以才会出现这个问题。
所以我的建议是,不要用anaconda的虚拟环境了,直接在外部环境里面跑,使用上面的代码就能解决问题。
有兴趣也可以研究一下anaconda里面怎么能让设备不事先initialize或者事先初始化为按需分配。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM