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