實(shí)際工作當(dāng)中,經(jīng)常維護(hù)好幾個(gè)項(xiàng)目的代碼,不同項(xiàng)目依賴的TF版本不一致問題。網(wǎng)上找了好多資料,但是每次遇到的問題都不一樣,每次都要去查(就是是一樣的問題,解決辦法也可能會(huì)不一樣)每次踩坑無數(shù),今天痛定思痛,下決心總結(jié)一下。
基本概念
- CUDA:用于GPU編程的語言,跑TF的時(shí)候用了GPU,TF里面很多函數(shù)(或者依賴庫)是CUDA語言編寫的。不同TF版本需要不同的CUDA。
- cuDNN:NVIDIA為深度學(xué)習(xí),矩陣運(yùn)算寫的一個(gè)加速庫。CUDA版本必須和cuDNN版本匹配。cuDNN和TF版本匹配與否則無所謂(不過CUDA和TF版本必須匹配,所以cuDNN版本和TF版本是間接依賴關(guān)系)。
- TF:這個(gè)沒什么好說的。個(gè)人經(jīng)驗(yàn),別用太新的,如果每次都用最新的,那么進(jìn)而導(dǎo)致CUDA也要不斷更新
-
CUDA驅(qū)動(dòng)版本:保持最新就好了,CUDA驅(qū)動(dòng)版本要求和CUDA版本匹配,而CUDA又要求cuDNN/TF是匹配的。不過CUDA驅(qū)動(dòng)版本是向下兼容的,所以保持最新就沒事。輸入nvidia-smi可以查看:
查看CUDA驅(qū)動(dòng)版本
工作當(dāng)中改如何做?
- 盡量保持最新的CUDA驅(qū)動(dòng)版本
- 維護(hù)多個(gè)cuda版本:cuda安裝到/usr/local/目錄下,可以通過命令切換不同版本
sudo rm -rf /usr/local/cuda #刪除之前創(chuàng)建的軟鏈接
sudo ln -s /usr/local/cuda-8.0 /usr/local/cuda #創(chuàng)建新 cuda 的軟鏈接
- 將cuDNN和CUDA解耦:說白了就是,二者單獨(dú)存放,不要混在一起。切換cuDNN只需要在~/.bashrc文件里面設(shè)置如下即可:
# 在.bashrc文件里面寫入該環(huán)境變量,切換cudnn只需要把cudnn設(shè)置到/root/cuda路徑即可
export LD_LIBRARY_PATH=/root/cuda/lib64:$LD_LIBRARY_PATH
- TF版本別用太新的:使用pip install tensorflow-gpu=1.x.0安裝
- 遇到問題不要無腦google:先自行分析原因,嘗試辦法,然后再google。
