Linux下CUDA9.0和CUDA8.0切换记录及所遇问题
双CUDA版本切换及所遇问题## 标题
- CUDA的版本切换
CUDA各版本的安装教程及对应cuDNN的配置教程不再赘述,下文假设用户系统已经安装好了CUDA8.0和CUDA9.0
-
查看CUDA版本;nvcc -V
-
修改用户环境配置文件: vim ~/.bashrc 在文档的最后添加如图环境变量:
别忘记sudo source ~/.bashrc -
cd /usr/local
ls 查看是否有cuda文件夹,如果没有执行sudo ln -s cuda-8.0 cuda(或者sudo ln -s cuda-9.0 cuda 取决于你想切换什么版本) -
nvcc -V 查看版本,观察cuda版本是否变化
-
测试自己的程序,博主从8.0换到了9.0,在测试使用cuda9.0的项目时遇到了如下报错
ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory
解决方法:
检查 /usr/local/cuda-9.0/lib64 下是否有 libcublas.so.9.0
如果有的话则在终端输入sudo idconfig cuda-9.0/lib64
(关于idconfig的相关知识参见:https://www.cnblogs.com/lyongde/p/4190588.html)
输入上述命令后又出现如下报错:
/sbin/ldconfig.real: /usr/local/cuda-9.0/lib64/libcudnn.so.7 不是符号连接
百度后找到解决方式: https://blog.****.net/hjxu2016/article/details/69389597
个人理解: idconfig命令后会生成一些.so文件, 但这里生成的libcudnn.so.7并没有链接到任何一个库或者链接上
图片来自于上述idconfig链接,侵删
由于改变了软连接,所以lib64里面的东西也变了,故需要idconfig解决方法总结:
首先在usr/local/cuda-8.0/lib64/下搜索libcudnn(由于是libcudnn报错)
ls后发现两个文件libcudnn.so.7 和libcudnn.so.7.0.5 理论上只有一个libcudnn.so.7.0.5
这里的libcudnn.so和libcudnn static.a暂时不知道是什么用途,这里打个问号
ll查看链接情况,发现上述四个文件相互独立
我们这里强行将生成的.so.7链接到原有的.so.7.0.5上:ln -sf /usr/local/cuda-8.0/lib64/libcudnn.so.5.0.5 /usr/local/cuda-8.0/lib64/libcudnn.so.5
链接后输入ll , 命令执行成功
现在重新执行上述操作中的sudo idconfig ***
问题解决.