tensorflow2.x版本无法调用gpu的一种解决方法
最近學校給了一個服務器賬號用來訓練神經網絡使用,服務器本身配置是十路titan V,然后在上面裝了tensorflow2.2,對應的python版本是3.6.2,裝好之后用tf.test.is_gpu_available()查看是否能調用gpu,結果返回結果是false,具體如下:
這里tensorflow應該是檢測出了gpu,但是因為某些庫無法打開而導致tensorflow無法調用,返回了false,詳細查看錯誤信息可以看到一行:
可以看到上面幾個文件都順利打開了,但是最后一個libcudnn.so.7文件顯示無法打開,not such file or directory。懷疑是cuda有問題,服務器本身是裝的cuda10.1,跟tensorflow2.2應該是吻合的,但是一直無法調用,所以一開始我想重新安裝cuda,覆蓋掉服務器本來的cuda,下好安裝包之后,因為我不是管理員,沒有root權限,所以總是失敗。但是安裝過程中了解到系統的cuda安裝目錄,位于/usr/local/cuda下面,這個libcudnn.so.7應該是一個庫文件,那應該放在cuda的安裝目錄下面,具體地,在/usr/local/cuda/lib64下面,之前在我的windows本地機器安裝cuda時還要下載cudnn7.x,然后把文件拷貝到cuda對應的目錄下面,我懷疑lib64目錄下面的這個libcudnn.so.7文件有問題,因為在linux版本的cudnn中是可以看到libcudnn.so.7這個文件的。
于是,打開lib64目錄,查找是否有libcudnn.so.7這個文件,結果是沒有找到這個文件,這就很奇怪了,cuda10.1目錄下面竟然沒有cudnn的文件,我也沒有權限修改/usr/local,因此想到既然是少了這個文件,那是不是把對應的文件加載在別的目錄下,引導tensorflow去另一個我可以操作的目錄下找這個libcudnn.so.7文件,就可以解決問題呢?我帶著試驗性的心態wget下載cudnn,結果在命令行下無法下載cudnn,原因是cudnn下載需要登錄,而在命令行下就沒辦法下載。于是在本地機器上下載了linux版的cudnn,然后用scp命令把這個tar.gz文件發到服務器上,解壓出來可以看到~/cudnn/cuda/lib64下面有libcudnn.so.7。接下來就是添加環境變量,讓tensorflow不僅在/usr/local/cuda/lib64下找文件,還可以在我這個目錄下找,添加命令:
這幾行命令添加系統cuda的庫
然后添加:
這里的/home/users/cudnn/cuda/lib64視自己的libcudnn.so.7文件目錄而定,最后是更新:
source /etc/profile如果tensorflow是按照在anaconda虛擬環境下的,在執行這幾條命令會自動退出虛擬環境。記得重新進入:
source activate 環境名這時重新進入python,導入tensorflow,然后運行tf.test.is_gpu_available(),可以看到:
這時已經顯示成功打開了libcudnn.so.7文件,說明tf根據我提供的目錄成功找到了這個文件,在打開了這些庫文件后,最下面也返回了True:
還可以用另一個方法tf.config.list_physical_devices(‘GPU’)查看當前可用gpu:
十塊gpu都顯示出來了。
注意,添加這幾條命令只在當前連接上有用,如果斷開了服務器連接再重新連接時,需要重新輸入這些命令。
這個方法只是作為一個參考,碰巧是在tensorflow2.2上這個libcudnn.so.7文件打不開,于是嘗試性地試了一下,結果成功了。其他機器上如果出現同類問題,采用這個方法不一定能解決,只是提供一個思路。在tensorflow2.1上,也同樣出現gpu無法調用的問題,但打印的錯誤信息不僅有libcudnn.so.7文件無法打開,還有其他幾個文件也打不開,這些文件基本都是lib開頭的,可以查看這些文件是否在cuda的lib64目錄下,如果找得到這些文件,那有可能是環境變量設錯了,可以試試上面那些命令:
export PATH=$PATH:/usr/local/cuda-10.1/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64 export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-10.1/lib64如果找不到,那可以試試跟我一樣先把這些文件下載到機器上面,給系統添加環境變量到對應這些文件的目錄,引導tf去找。當然,這只是我一種猜測,tensorflow2.1和2.2用的應該都是cuda10.1,但是我不清楚為什么2.2只有一個文件無法打開,而2.1就有好幾個文件打不開,而在1.9版本上,由于1.9似乎用的不是10.1版本的cuda,其錯誤原因更多,這里要區分開。
總結
以上是生活随笔為你收集整理的tensorflow2.x版本无法调用gpu的一种解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 架构风格与基于网络的软件架构设计
- 下一篇: 8g ubuntu 树莓派4b_树莓派4