python无法使用1号gpu_详解tensorflow2.x版本无法调用gpu的一种解决方法
最近學(xué)校給了一個(gè)服務(wù)器賬號(hào)用來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)使用,服務(wù)器本身配置是十路titan V,然后在上面裝了tensorflow2.2,對(duì)應(yīng)的python版本是3.6.2,裝好之后用tf.test.is_gpu_available()查看是否能調(diào)用gpu,結(jié)果返回結(jié)果是false,具體如下:
這里tensorflow應(yīng)該是檢測(cè)出了gpu,但是因?yàn)槟承?kù)無(wú)法打開(kāi)而導(dǎo)致tensorflow無(wú)法調(diào)用,返回了false,詳細(xì)查看錯(cuò)誤信息可以看到一行:
可以看到上面幾個(gè)文件都順利打開(kāi)了,但是最后一個(gè)libcudnn.so.7文件顯示無(wú)法打開(kāi),not such file or directory。懷疑是cuda有問(wèn)題,服務(wù)器本身是裝的cuda10.1,跟tensorflow2.2應(yīng)該是吻合的,但是一直無(wú)法調(diào)用,所以一開(kāi)始我想重新安裝cuda,覆蓋掉服務(wù)器本來(lái)的cuda,下好安裝包之后,因?yàn)槲也皇枪芾韱T,沒(méi)有root權(quán)限,所以總是失敗。但是安裝過(guò)程中了解到系統(tǒng)的cuda安裝目錄,位于/usr/local/cuda下面,這個(gè)libcudnn.so.7應(yīng)該是一個(gè)庫(kù)文件,那應(yīng)該放在cuda的安裝目錄下面,具體地,在/usr/local/cuda/lib64下面,之前在我的windows本地機(jī)器安裝cuda時(shí)還要下載cudnn7.x,然后把文件拷貝到cuda對(duì)應(yīng)的目錄下面,我懷疑lib64目錄下面的這個(gè)libcudnn.so.7文件有問(wèn)題,因?yàn)樵趌inux版本的cudnn中是可以看到libcudnn.so.7這個(gè)文件的。
于是,打開(kāi)lib64目錄,查找是否有l(wèi)ibcudnn.so.7這個(gè)文件,結(jié)果是沒(méi)有找到這個(gè)文件,這就很奇怪了,cuda10.1目錄下面竟然沒(méi)有cudnn的文件,我也沒(méi)有權(quán)限修改/usr/local,因此想到既然是少了這個(gè)文件,那是不是把對(duì)應(yīng)的文件加載在別的目錄下,引導(dǎo)tensorflow去另一個(gè)我可以操作的目錄下找這個(gè)libcudnn.so.7文件,就可以解決問(wèn)題呢?我?guī)е囼?yàn)性的心態(tài)wget下載cudnn,結(jié)果在命令行下無(wú)法下載cudnn,原因是cudnn下載需要登錄,而在命令行下就沒(méi)辦法下載。于是在本地機(jī)器上下載了linux版的cudnn,然后用scp命令把這個(gè)tar.gz文件發(fā)到服務(wù)器上,解壓出來(lái)可以看到~/cudnn/cuda/lib64下面有l(wèi)ibcudnn.so.7。接下來(lái)就是添加環(huán)境變量,讓tensorflow不僅在/usr/local/cuda/lib64下找文件,還可以在我這個(gè)目錄下找,添加命令:
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
這幾行命令添加系統(tǒng)cuda的庫(kù)
然后添加:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/users/cudnn/cuda/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/home/users/cudnn/cuda/lib64
這里的/home/users/cudnn/cuda/lib64視自己的libcudnn.so.7文件目錄而定,最后是更新:
source /etc/profile
如果tensorflow是按照在anaconda虛擬環(huán)境下的,在執(zhí)行這幾條命令會(huì)自動(dòng)退出虛擬環(huán)境。記得重新進(jìn)入:
source activate 環(huán)境名
這時(shí)重新進(jìn)入python,導(dǎo)入tensorflow,然后運(yùn)行tf.test.is_gpu_available(),可以看到:
這時(shí)已經(jīng)顯示成功打開(kāi)了libcudnn.so.7文件,說(shuō)明tf根據(jù)我提供的目錄成功找到了這個(gè)文件,在打開(kāi)了這些庫(kù)文件后,最下面也返回了True:
還可以用另一個(gè)方法tf.config.list_physical_devices(‘GPU')查看當(dāng)前可用gpu:
十塊gpu都顯示出來(lái)了。
注意,添加這幾條命令只在當(dāng)前連接上有用,如果斷開(kāi)了服務(wù)器連接再重新連接時(shí),需要重新輸入這些命令。
這個(gè)方法只是作為一個(gè)參考,碰巧是在tensorflow2.2上這個(gè)libcudnn.so.7文件打不開(kāi),于是嘗試性地試了一下,結(jié)果成功了。其他機(jī)器上如果出現(xiàn)同類(lèi)問(wèn)題,采用這個(gè)方法不一定能解決,只是提供一個(gè)思路。在tensorflow2.1上,也同樣出現(xiàn)gpu無(wú)法調(diào)用的問(wèn)題,但打印的錯(cuò)誤信息不僅有l(wèi)ibcudnn.so.7文件無(wú)法打開(kāi),還有其他幾個(gè)文件也打不開(kāi),這些文件基本都是lib開(kāi)頭的,可以查看這些文件是否在cuda的lib64目錄下,如果找得到這些文件,那有可能是環(huán)境變量設(shè)錯(cuò)了,可以試試上面那些命令:
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
如果找不到,那可以試試跟我一樣先把這些文件下載到機(jī)器上面,給系統(tǒng)添加環(huán)境變量到對(duì)應(yīng)這些文件的目錄,引導(dǎo)tf去找。當(dāng)然,這只是我一種猜測(cè),tensorflow2.1和2.2用的應(yīng)該都是cuda10.1,但是我不清楚為什么2.2只有一個(gè)文件無(wú)法打開(kāi),而2.1就有好幾個(gè)文件打不開(kāi),而在1.9版本上,由于1.9似乎用的不是10.1版本的cuda,其錯(cuò)誤原因更多,這里要區(qū)分開(kāi)。
到此這篇關(guān)于詳解tensorflow2.x版本無(wú)法調(diào)用gpu的一種解決方法的文章就介紹到這了,更多相關(guān)tensorflow2.x無(wú)法調(diào)用gpu內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
總結(jié)
以上是生活随笔為你收集整理的python无法使用1号gpu_详解tensorflow2.x版本无法调用gpu的一种解决方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 进程调度算法-先来先服务、最短作业优先调
- 下一篇: python工作台_FreeCAD二次开