關於ImportError: libcudnn.so.7: cannot open shared object file錯誤以及非root用戶安裝cudnn
使用 Tensorflow 的時候出現了錯誤Tensorflow:ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory
從報錯信息上來看,就是libcudnn.so.7
文件沒有找到。
首先檢查是否是cuda的鏈接出現了錯誤,ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory解決
簡單來說,就是:
首先檢擦libcudnn.so.7
文件是否存在,這個文件夾一般在usr/local
文件夾下,可以使用命令:
ll /usr/local
查看自己的cuda信息,在服務器上一般都會有多個版本,但是會將cuda指向其中一個,這時候檢查各個文件夾(例如cuda-9.0
, cuda-10.0
等等)下的lib64
文件夾下是否有libcudnn.so.7
文件夾(例如,在/usr/local/cuda-9.0/lib64
文件夾下找到了libcudnn.so.7
,)記住這個文件夾,這時候需要在配置文件信息裏添加這個路徑,使用
vim .bashrc
打開文件 -> Esc
-> i
進入編輯模式,然後添加配置信息:
export PATH="/usr/local/cuda-9.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH"
注意這裏的cuda-9.0
要根據實際改變。(關於export
命令,可見:環境變量設置export 命令詳解)
但是!!! 我試了之後發現我的/usr/local/cuda-X/lib64下面並沒有這個libcudnn文件,我解決的方法是安裝自己的cudnn,(我是非root用戶),這裏介紹非root用戶如何安裝cudnn。(可以參考, Linux非root用戶如何優雅的安裝cuda和cudnn)
首先,在官網找到下載:cuDNN Archive(或者是參考 下載歷史版本cudnn)注意這個網站需要註冊,然後下載的話記得還要做個survey,總之找到這個頁面:
然後找到你要使用的版本(注意與Cuda版本對應,可以使用nvcc -V
看一下你的Cuda版本),然後點擊就可以下載了,當然也可以直接使用命令,但是往往會受到網速限制,注意下載之後是一個後綴名爲.solitairetheme8
的文件,這個文件需要改名,如果是已經上傳到服務器,使用
cp XXXX.solitairetheme8` XXXX.tgz
命令改名,如果還是在windows下直接改成.tgz
文件即可,然後再服務器中找個位置使用:
tar -xvfz XXXX.tgz
解壓即可,如果你比較"精細",那麼可以將這個文件夾移動到上面的cuda文件夾下,當然也可以直接在某個位置解壓。
最後一樣要改一改環境變量配置文件,例如:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export LD_LIBRARY_PATH="/home/XXX...XXX/cudnn/cuda/lib64:$LD_LIBRARY_PATH"
注意按照自己的實際解壓位置改一下路徑。
然後我就可以用了,其實總結一下就是兩個步驟:
- 首先檢測文件是否存在,環境變量中的鏈接路徑是否寫對
- 如果沒有文件,則單獨安裝libcudnn包