Debug
在这里列举一下我在配置中遇到的问题
1. 版本问题
torch cuda mmcv-full的版本必须对应,且cuda的版本不能过低
2.报错:文件找不到
可能是在pip的过程中缺漏了,或者是文件的修改过程错误了,可以再pip一遍看看是不是already requirement
3.ImportError: libcudart.so.10.1: cannot open shared object file: No such file or directory
这是我遇到的最棘手的问题,浪费了我许多个消失,这里先讲产生这个错误的主要原因:当前cuda版本不是10.1,缺少必要文件
我先后尝试了许多种办法:
-
以上错误报错原因是libcudart.so.10.1文件没有找到,执行完
sudo ln -s /usr/local/cuda-10.0/lib64/libcudart.so.10.0 /usr/lib/libcudart.so.10.1
指令后,libcudart.so.10.1其实就已经在usr/lib下了,可以通过cd /usr/lib
查看文件,但是这个文件其实是个假文件,既不能下载,也不能打开,点击就报错,据说copy了其他地方的libcudart.so.10.1和libcudart.so.10.1.243这两个文件进去就可以解决,但是我没等到那篇文章的作者给我发这两个文件 -
我怀疑是cudatoolkit下载不完整的问题,但是我通过以下指令,发现我的cudatoolkit是有的且完整的
默认目录为:local,进入local:cd /usr/local
输入命令:ls,查看该目录下的文件,可以看到安装的cuda在此处
进入cuda文件:cd cuda-7.5(我的是7.5),此处为安装的东西
查找安装的工具,在bin目录下,进入cuda文件所在目录,然后进入bin目录:cd bin
输入命令:ls,就可以看到cuda toolkit自带的工具了,这些工具可以直接使用。
- 最后我怀疑到了正确的地方:系统和cuda的软链接有问题
但是找到了这点后,我依然花了几个小时去解决问题,因为网上切换cuda版本及转换cuda软链接的方法多种多样,我每个都试了一遍,并且在1080,2080,3090的服务器上都尝试了一遍。
以下又是一个分类,记录我使用的多种指令
3.1 先说最后成功的指令
输入命令:
export PATH=/usr/local/cuda-7.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
(此处我使用的是cuda7.5,具体需要根据自己的版本输)
这样路径就添加好了,输入命令:nvcc -V检查路径是否添加成功,如果结果有nvcc则添加成功了。 这样toolkit里面自带的工具都可以直接在终端进行使用了。
3.2
查看当前cuda软链接指向的哪个cuda版本
cd /usr/local
ls
stat cuda
3.2.1. 删除软链接
cd /usr/local/
sudo rm -rf cuda
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda
3.2.2. 在home/下修改.bashrc的注释,即环境变量
打开.bashrc文件指令:gedit ~/.bashrc
# 将8.0的注释掉,10.0版本的export前面的#去掉即可
export PATH="/usr/local/cuda-10.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME=/usr/local/cuda
3.2.3. 查看CUDA和CUDNN版本
cat /usr/local/cuda/version.txt
3.2.4.但是当nvcc -V
时,还是显示cuda10.0
(原版本)
所以我们查看环境变量path,命令:echo $PATH
3.2.5.发现原因:是因为/usr/bin/cuda-10.0
(①处)在PATH中相较/usr/local/cuda-10.1
(②处)靠前,所以nvcc –V命令会按照PATH顺序,先去①里面找,应该是在这文件夹里的nvcc中找到了10.0版本的cuda,所以就不去别的地方找了,就没有找到②处我们想要的cuda版本;
更改PATH内①和②顺序,采用的方法是将环境变量②位置提前:
export PATH=/usr/local/cuda/bin:$PATH
3.2.6.再nvcc -V
3.3 使用update-alternatives实现多版本CUDA切换
# 为cuda配置优先级,数字越大优先级越高:
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-10.0/ 10
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-10.2/ 20
接着使用命令语句: sudo update-alternatives --config cuda
选择cuda版本
nvcc-v
查看是否更换成功
4.报错:invalid syntax
这个报错是字符错误的意思,可以去对应的文件报错行数的周围找一找有没有缺错标点符号。
最有可能的情况是:你根本就没进入自己的虚拟环境,还在base的环境中,base环境中的python2版本过低,没办法运行一些python3的代码,所以在不兼容的地方报错
5. 虚拟环境
要确保每次自己在运行train.py文件时,一定要进入自建的环境,而不是在base的环境下,base的环境下的python版本为python2的老版本,会报错python版本过低,给人要安装新的python的错觉。
注意看当前环境下的虚拟环境都有哪些,指令:pyenv versions