关于CUDA,cuDNN,TF,CUDA驱动版本兼容问题
实际工作当中,经常维护好几个项目的代码,不同项目依赖的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。