编译mmdetection3d时,无root权限下为虚拟环境单独创建CUDA版本
在跑一些深度学习代码的时候,如果需要使用mmdetection3d框架,下载的pytorch的cudatoolkit最好需要和本机的cuda版本是一样的,即输入nvcc -V
命令后显示的版本一样。
但是如果是在学校里,一般是服务器管理员装的cuda驱动是啥版本,cudatoolkit就是啥版本,且非root用户改变不了。
但是有非root用户也能为自己用户下的虚拟环境更改cudatoolkit版本的操作。
本文是实现进入该虚拟环境后便切换成该环境下专属的cudatoolkit版本的教程。
一、装好CUDA
首先去下面链接中下载你想要的版本的cuda:
https://developer.nvidia.com/cuda-toolkit-archive
以11.3为例,那么就是这样:
在命令行中输入该wget指令
然后安装
sh 你下载的文件名
例:sh cuda_10.0.130_410.48_linux.run
安装的时候,Driver要取消勾选
因为没有root权限,所以要进入Options,然后更改toolkit的安装位置,然后比如下载到/home/username/cuda/cuda-11.3
(要自己在cuda文件夹内新建一个cuda-11.3)
username替换为自己的用户名,cuda-11.3视版本更改。
2 更改虚拟环境中默认的nvcc命令指向的位置
首先要知道虚拟环境的配置文件都放在哪儿:
conda activate 虚拟环境名
echo ${CONDA_PREFIX}
假设得到的是:/home/username/.conda/envs/CRN
,在本文示例中
然后然后conda deactivate
退出虚拟环境(重要!)
使用以下命令创建脚本(注意用上面找到的路径替换下面的,下面的是在本文具体情况下的示例)
//创建文件夹
mkdir -p /home/username/.conda/envs/CRN/etc/conda/activate.d
//新写一个虚拟环境启动的时候的脚本
vi /home/username/.conda/envs/CRN/etc/conda/activate.d/activate.sh
往脚本中写入(注意替换username与版本号)
ORIGINAL_CUDA_HOME=$CUDA_HOME
ORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
ORIGINAL_PATH=$PATH
export CUDA_HOME=/home/username/cuda/cuda-11.3
export PATH=/home/username/cuda/cuda-11.3/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
然后就是编写退出虚拟环境时的脚本:
mkdir -p /home/username/.conda/envs/CRN/etc/conda/deactivate.d
vi /home/username/.conda/envs/CRN/etc/conda/deactivate.d/deactivate.sh
往里写入:
export CUDA_HOME=$ORIGINAL_CUDA_HOME
export LD_LIBRARY_PATH=$ORIGINAL_LD_LIBRARY_PATH
export PATH=$ORIGINAL_PATH
unset ORIGINAL_CUDA_HOME
unset ORIGINAL_LD_LIBRARY_PATH
unset ORIGINAL_PATH
3 再安装一下cuDNN(给CUDA加速用的)
在链接中下载对应的cudnn
https://developer.nvidia.com/rdp/cudnn-archive
然后随便解压到某一个temp文件夹中,举例:
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz -C ./temp/
在该temp文件夹中:
cd cudnn-linux-x86_64-8.9.7.29_cuda11-archive
cp ./include/cudnn* /home/username/cuda/cuda-11.3/include
cp ./lib/libcudnn* /home/username/cuda/cuda-11.3/lib64
chmod a+r /home/username/cuda/cuda-11.3/include/cudnn* /home/username/cuda/cuda-11.3/lib64/libcudnn*
这样就可以了,最后conda activate CRN
进入虚拟环境后,输入nvcc -V
的时候显示的就是所需要的版本,就可以去编译mmdetection3d了。
参考博客:
https://blog.csdn.net/Mr__George/article/details/106984574
https://blog.csdn.net/zhaozebin666/article/details/129817030