昨天跑个程序,报了以下错误:
libcudart.so.9.0: cannot open shared object file: No such file or directory
我的电脑环境是
cuda10.0,
torch1.2,
torchvision0.3.0.
后面查找知道torchvision0.3.0 支持的事cuda9,而不支持cuda10.0。
但一开始我并不想重装cuda。。。。
我安装我的上一篇博客的方法https://blog.csdn.net/c2250645962/article/details/105160102解除了
libcudart.so.9.0:
报错问题。
可是又报了新的错误。。。
libcudart.so.9.2: cannot open shared object file: No such file or directory
神奇。。。。。。。
所以决定安装多个版本的cuda,根据需求切换cuda环境。
1. 下载cuda9.0,链接如下:
https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=runfilelocal
2. 按照安装命令进行安装即可,安装完成后终端执行
cd /usr/local
可以看到local下面多了个cuda9.0的文件夹(我这里安装了三个cuda版本。。)
其中cuda是链接。
3. cuda环境设置
首先终端执行
gedit ~/.bashrc
在文件末尾添加如下内容(如果之前安装cuda有就不需要这一步了,不过一般之前安装过的话都不需要了)
export PATH=/usr/local/cuda/bin${
PATH:+:${
PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${
LD_LIBRARY_PATH:+:${
LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda
注意看上面的路径都是指向/usr/local/cuda 软连接,并没有写死指向某一个cuda版本,这也方面了我们后面做cuda版本切换,只需要切换cuda软链接指向就可以了。
4. 版本切换
终端执行
cd /usr/local
然后执行
sudo rm -rf cuda
这一步是删除原有的软链接。
最后执行
sudo ln -s /usr/local/cuda-9.0 /usr/local/cuda
这一步是创建了指向cuda-9.0的软链接。
我们可以通过终端执行
stat cuda
# 或者
nvcc -V
查看当前使用的cuda版本,看是否设置成功。
我设置ok后可是依然报了
libcudart.so.9.0: cannot open shared object file: No such file or directory
这个错误,
最后通过终端执行
sudo ldconfig /usr/local/cuda-9.0/lib64
解决(参考https://blog.csdn.net/qq_38451119/article/details/81007904)!
本以为OK了,又报了新的错误:
ImportError: /home/cendelian/anaconda3/envs/pytorch/lib/python3.6/site-packages/torchvision/_C.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN2at7getTypeERKNS_6TensorE
原来是我的torch版本和cuda版本不匹配。我现在torch版本是1.2,需要对应cuda10.0
Python 3.6.4 |Anaconda, Inc.| (default, Mar 13 2018, 01:15:57)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.version.cuda)
10.0.130
>>>
所以我将torch版本降低到1.1。
可以通过
打开终端输入:python
输入命令:import torch
再输入:print(torch.version.cuda)
来查看torch对应的cuda版本。
至此!可以成功训练了!!
总结一下
代码需要torchvision0.3
的包 -> cuda9
支持torchvision0.3
-> torch1.1
对应cuda9
。。。
所以我从开始的环境cuda10.0,torchvision0.3,torch1.2
变成了
cuda9.0,torchvision0.3,torch1.1
(这几个也是代码的明确要求。。。。刚开始想偷工减料是不行的。。。。)
不过我用cuda9.0,torchvision0.3,torch1.1
去跑其它程序又有奇怪的错误。。
这样就只能切换回cuda10.0
了。。
参考
https://blog.csdn.net/qq_38451119/article/details/81007904
https://blog.csdn.net/u013925378/article/details/103045065
https://www.jianshu.com/p/9c98d51e4de3
https://blog.csdn.net/tunhuzhuang1836/article/details/79545625