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