原因
由于服务器中安装了两个版本的cuda(cuda10.1和cuda11.1),不同项目可能需要应用不同的cuda版本,但是自己又没有root权限或者只想在使用指定conda环境时改为用指定的cuda版本。总结起来有三种方法:
1、修改软链接指向,但是这样会使得所有环境以及所有账户的cuda版本都改变,会影响其他人**(强烈不推荐)**
2、修改 ~.bashrc 文件(修改方法见“不同linux账户切换不同的cuda版本”),这样不会改变其他账户的cuda版本,但是自己账户下的所有conda环境都会改变cuda版本,有时候不同conda环境安装的torch版本不一样,用到的cuda版本也可能不一样。(不太推荐)
3、增加env_vars.sh 文件 (修改方法见“不同conda环境切换不同的cuda版本”)。这样修改则是不同的conda环境使用的cuda版本不一样(强烈推荐)。
下面介绍方法3的修改
修改步骤
1、查看默认的cuda版本
一般而言,默认会在/usr/local/下面创建一个软链接,指向某个cuda版本。
如下图
cd /usr/local 定位到目标夹
ls -al 即可查看,cuda指向的是10.1版本
我们来验证一下是不是所有的项目都默认采用cuda10.1编译器。
SAM环境中为cuda,(即指向cuda10.1)
yolov5环境中为cuda,(即指向cuda10.1)
2、创建activate.d目录和env_vars.sh文件
用下面命令创建activate.d目录,注意activate.d是文件夹,不是文件. $CONDA_PREFIX表示获取当前conda环境路径。
mkdir -p $CONDA_PREFIX/etc/conda/activate.d
vim $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
加上下列代码,保存。(我是想将默认的cuda软链接路径,改成cuda11.1,根据你自己的cuda版本自行修改)
确认是否创建好了env_vars.sh文件。
3、验证是否切换成功
创建好了env_vars.sh文件后,必须要
source ~/.bashrc
重置环境才生效。也可以切换到其他环境,再切换回来,总之就是要重置 ~/.bashrc 一次。
yolov5环境的cuda版本切换成功。
SAM环境的cuda不变
大功告成
4、顺便提一句(torch编译时的cuda版本和运行时的cuda版本)
上面的 torch.utils.cpp_extension.CUDA_HOME 是运行时用到的cuda版本
torch.version 显示的是编译时用到的cuda版本